fix(m09): update TypedDict to MessagesState and refine prompts

This commit is contained in:
Annyfee
2026-01-08 11:09:35 +08:00
parent d8cddf436f
commit 66ca542cee
3 changed files with 22 additions and 15 deletions
@@ -5,7 +5,6 @@ from langchain.tools import tool
from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.messages import HumanMessage, SystemMessage
from langgraph.graph import StateGraph, MessagesState, START, END from langgraph.graph import StateGraph, MessagesState, START, END
from langgraph.prebuilt import ToolNode from langgraph.prebuilt import ToolNode
from typing import TypedDict
# LangSmith调试 # LangSmith调试
os.environ["LANGCHAIN_TRACING_V2"] = "true" # 总开关,决定启用追踪功能 os.environ["LANGCHAIN_TRACING_V2"] = "true" # 总开关,决定启用追踪功能
@@ -21,7 +20,7 @@ llm = ChatOpenAI(
# 构建子工作流 # 构建子工作流
# 1.子任务状态 # 1.子任务状态
class RetryState(TypedDict): class RetryState(MessagesState):
query: str query: str
attempt: int attempt: int
result: str result: str
@@ -3,11 +3,8 @@ from config import OPENAI_API_KEY,LANGCHAIN_API_KEY
from langchain_openai import ChatOpenAI from langchain_openai import ChatOpenAI
from langchain.tools import tool from langchain.tools import tool
from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.messages import HumanMessage, SystemMessage
from langgraph.graph import StateGraph, START, END from langgraph.graph import StateGraph, START, END, MessagesState
from langgraph.prebuilt import ToolNode from langgraph.prebuilt import ToolNode
from typing import TypedDict # 定义数据类型
from typing import Annotated # 注释说明细节
from langgraph.graph.message import add_messages
# LangSmith调试 # LangSmith调试
os.environ["LANGCHAIN_TRACING_V2"] = "true" # 总开关,决定启用追踪功能 os.environ["LANGCHAIN_TRACING_V2"] = "true" # 总开关,决定启用追踪功能
@@ -39,8 +36,7 @@ def generate_code(requirement:str):
# 共享状态定义 # 共享状态定义
class AgentState(TypedDict): class AgentState(MessagesState):
messages: Annotated[list,add_messages] # 自动累积对话历史
next_speaker: str next_speaker: str
# 专家节点 # 专家节点
@@ -6,8 +6,7 @@ from langchain_core.messages import HumanMessage,SystemMessage
from langgraph.graph import StateGraph,START,END from langgraph.graph import StateGraph,START,END
from langgraph.prebuilt import ToolNode from langgraph.prebuilt import ToolNode
from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.memory import MemorySaver
from typing import TypedDict,Annotated from langgraph.graph.message import add_messages, MessagesState
from langgraph.graph.message import add_messages
# LangSmith调试 # LangSmith调试
os.environ["LANGCHAIN_TRACING_V2"] = "true" # 总开关,决定启用追踪功能 os.environ["LANGCHAIN_TRACING_V2"] = "true" # 总开关,决定启用追踪功能
@@ -23,7 +22,7 @@ llm = ChatOpenAI(
# === 一、Graph-as-a-Tool === # === 一、Graph-as-a-Tool ===
# === 模拟一个不稳定的SSH日志查询过程 === # === 模拟一个不稳定的SSH日志查询过程 ===
class SSHState(TypedDict): class SSHState(MessagesState):
target_ip: str target_ip: str
attempt: int attempt: int
logs: str logs: str
@@ -82,13 +81,19 @@ def restart_service(service_name:str):
# === 总控调度 + 专家分工 === # === 总控调度 + 专家分工 ===
# 1. 共享状态 # 1. 共享状态
class AgentState(TypedDict): class AgentState(MessagesState):
messages:Annotated[list,add_messages]
next_speaker:str next_speaker:str
# 2. 专家节点 # 2. 专家节点
def log_expert(state:AgentState): def log_expert(state:AgentState):
prompt = "你是日志分析专家,使用工具分析服务器日志,找出报错原因。回答需简洁。" prompt = """你是日志分析专家,使用工具分析服务器日志,找出报错原因。
工作规则:
1. 如果消息中还没有日志数据,调用 analyze_server_logs 工具获取
2. 如果消息中已经有工具返回的日志结果,直接分析并给出结论,不要再调用工具
3. 回答需简洁明确
请先检查对话历史中是否已有日志数据。"""
messages = [SystemMessage(content=prompt)] + state['messages'] messages = [SystemMessage(content=prompt)] + state['messages']
# 绑定子图工具 # 绑定子图工具
tools = [analyze_server_logs] tools = [analyze_server_logs]
@@ -96,7 +101,14 @@ def log_expert(state:AgentState):
return {"messages":[response]} return {"messages":[response]}
def ops_expert(state:AgentState): def ops_expert(state:AgentState):
prompt = "你是运维专家。当收到修复指令时,请立即调用 'restart_service' 工具进行修复,不要输出任何额外的解释文本。" prompt = """你是运维专家。
工作规则:
1. 当收到修复指令且消息中有明确的故障原因时,调用 restart_service 工具进行修复
2. 只调用一次 restart_service 工具
3. 工具调用后,不要输出额外的解释文本
请先检查对话历史,如果已经调用过工具,就等待结果。"""
messages = [SystemMessage(content=prompt)] + state['messages'] messages = [SystemMessage(content=prompt)] + state['messages']
tools = [restart_service] tools = [restart_service]
# 绑定敏感工具 # 绑定敏感工具