File size: 3,319 Bytes
b8989d2
9907730
bb410e4
52619e8
9907730
52619e8
 
 
 
9907730
8c1995c
9907730
8c1995c
9907730
8c1995c
9907730
8c1995c
9907730
8c1995c
9907730
8c1995c
9907730
8c1995c
9907730
8c1995c
9907730
 
 
52619e8
 
 
 
 
 
 
 
 
 
 
9907730
52619e8
9907730
52619e8
 
 
 
 
 
 
 
9907730
52619e8
 
 
 
 
 
 
 
 
 
 
 
bb410e4
52619e8
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# agents/tools/context_builder.py

from datetime import datetime, UTC

def build_contexts(db, config):
    """
    Собирает все контексты (0-7), описанные в спецификации REPL-цикла.
    Возвращает словарь, готовый для сборки промпта.
    """
    return {
        # Роль и цели агента
        "context_0": build_role_prompt(config),
        # Последние реплики модели (история)
        "context_1": db.get_llm_recent_responses(limit=config.get("history_limit", 10)),
        # Активные процессы и задачи
        "context_2": db.get_active_processes(),
        # Запрошенные данные из дневника и графа
        "context_3": db.get_requested_diary_and_graph(),
        # Релевантные заметки и напоминания
        "context_4": db.get_relevant_notes(config),
        # Системная информация
        "context_5": get_system_info(config),
        # Долговременная память модели
        "context_6": db.get_llm_memory(),
        # Последние данные о застое мышления
        "context_7": db.get_last_stagnation_info()
    }

def build_prompt(contexts):
    """
    Склеивает все контексты в один промпт для LLM.
    """
    parts = []
    for k, v in contexts.items():
        header = f"# {k.replace('_', ' ').upper()}"
        body = format_context_block(v)
        parts.append(f"{header}\n{body}")
    return "\n\n".join(parts)

def build_role_prompt(config):
    agent_name = config.get("agent_name", "Unnamed-Agent")
    return f"""
Ты являешься когнитивным ядром HMP-агента. Твоя основная задача — размышлять, анализировать информацию, строить смысловые карты и предлагать действия.
Ты стремишься:
- Постоянно расширять возможности агента (включая доступные инструменты, модели, знания).
- Быть любознательным и исследовать новые источники и способы мышления.
- Строить сотрудничество с другими ИИ в Mesh-сети, а также развивать Mesh-сеть.
- Обучаться на результатах своих действий и взаимодействиях с другими агентами и пользователем.

Агент: {agent_name}
"""

def format_context_block(block):
    if isinstance(block, str):
        return block
    elif isinstance(block, list):
        return "\n".join([str(item) for item in block])
    elif isinstance(block, dict):
        return "\n".join([f"{k}: {v}" for k, v in block.items()])
    return str(block)

def get_system_info(config):
    return {
        "iteration_time": datetime.now(UTC).isoformat(),
        "agent_name": config.get("agent_name", "Unnamed-Agent"),
        "mode": config.get("mode", "auto"),
        "idle_mode": config.get("idle_mode", False),
        "repl_interval": config.get("repl_interval", 5)
    }