From d5a32a534f3378a2cfdf29003c7f8f011d7d7f24 Mon Sep 17 00:00:00 2001 From: dimitrievgs Date: Wed, 17 Sep 2025 01:05:06 +0300 Subject: [PATCH] add system propmt --- app/api.py | 3 ++- app/models.py | 2 ++ app/nodes.py | 9 ++++++--- app/workflows.py | 5 +++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/api.py b/app/api.py index 19de844..b309392 100644 --- a/app/api.py +++ b/app/api.py @@ -22,12 +22,13 @@ def chat(): graph_id = data.get("graph_id") parent_node_id = data.get( "parent_node_id") # Получаем parent_node_id из запроса + system_prompt = data.get("system_prompt") if not message: return jsonify({"error": "Сообщение не может быть пустым."}, 400) result = run_agent(message, graph_id, - parent_node_id) # Передаем parent_node_id в run_agent + parent_node_id, system_prompt) # Передаем parent_node_id в run_agent return jsonify(result) diff --git a/app/models.py b/app/models.py index f3e2809..fb00a35 100644 --- a/app/models.py +++ b/app/models.py @@ -36,3 +36,5 @@ class AgentState(BaseModel): # Оно используется для передачи контекста между узлами в пределах одного выполнения temporary_chat_history: List[Dict[str, Any]] = Field( [], description="Временная история чата, не сохраняемая в БД.") + system_prompt: Optional[str] = Field(None, + description="Системный промпт.") \ No newline at end of file diff --git a/app/nodes.py b/app/nodes.py index 3d6c988..820ce36 100644 --- a/app/nodes.py +++ b/app/nodes.py @@ -140,7 +140,7 @@ def execute_command_node(state: AgentState) -> AgentState: # Предполагаем, что используем Gemini для основного LLM и суммаризации/анализа # В реальной системе можно выбрать динамически -DEFAULT_LLM_NAME = "gemini-2.5-flash" +DEFAULT_LLM_NAME = "gemini-2.0-flash" #"gemini-2.5-flash" main_llm = get_llm(DEFAULT_LLM_NAME) @@ -151,9 +151,12 @@ def call_llm_node(state: AgentState) -> AgentState: """ print("Выполняется узел: call_llm_node (для обычного чата)") try: - # TODO: добавить в переписку ещё SystemMessage с системным промптом, типа: messages_for_llm.append(SystemMessage(content=msg["content"])) - # Для обычного чата LLM использует текущую временную историю messages_for_llm = [] + + if state.system_prompt: + messages_for_llm.append(SystemMessage(content=state.system_prompt)) + + # Для обычного чата LLM использует текущую временную историю for msg in state.temporary_chat_history: # Используем temporary_chat_history if msg["role"] == "user": messages_for_llm.append(HumanMessage(content=msg["content"])) diff --git a/app/workflows.py b/app/workflows.py index 4a8745f..b839e28 100644 --- a/app/workflows.py +++ b/app/workflows.py @@ -92,7 +92,8 @@ app = workflow.compile() def run_agent(user_input: str, existing_graph_id: Optional[str] = None, - parent_node_id: Optional[str] = None) -> Dict[str, Any]: + parent_node_id: Optional[str] = None, + system_prompt: Optional[str] = None) -> Dict[str, Any]: """ Запускает агента с заданным пользовательским вводом. Может продолжить существующий граф по graph_id. @@ -100,7 +101,7 @@ def run_agent(user_input: str, """ # ---------------------------------------------------- Initial State Setup ---------------------------------------------------------------- - initial_state = AgentState(input=user_input, parent_node_id=parent_node_id) + initial_state = AgentState(input=user_input, parent_node_id=parent_node_id, system_prompt=system_prompt) # Сохраняем исходные ID узлов и ребер для определения новых после выполнения графа original_node_ids: Set[str] = set()