LangGraph文档解释:github.langchain.ac.cn/langgraphjs…
一、输入格式
代理输入必须是一个包含 messages
键的对象,支持多种输入形式,且会自动转换为 LangChain 内部消息格式。具体格式如下:
- 字符串格式
{ messages: "Hello" }
会被解释为
HumanMessage
(用户消息)。消息对象格式{ messages: { "role": "user", "content": "Hello" } }
直接指定角色(如
user
)和内容。消息列表格式{ messages: [{"role": "user", "content": "Hello"}] }
支持多条消息按顺序传入。带自定义状态格式
{ messages: [{"role": "user", "content": "Hello"}], "user_name": "Alice" }
若定义了
stateSchema
,可添加额外字段(如 user_name
),用于动态调整代理行为。二、输出格式
代理输出是一个字典,包含以下核心内容:
- messages
执行过程中所有消息的列表,包括用户输入、助手回复、工具调用等完整交互记录。structuredResponse(可选)
若配置了结构化输出(如 JSON 格式),会在此字段中包含解析后的结果。
LangGraph配置结构化输出文档自定义状态字段(可选)
若定义了
stateSchema
,输出会包含工具执行结果或提示逻辑更新的状态值(如 user_name
)。示例
{ "messages": [ {"role": "user", "content": "what is the weather in sf"}, {"role": "assistant", "content": "Thinking... need to call weather tool"}, {"role": "tool", "name": "getWeather", "parameters": {"location": "SF"}}, {"role": "assistant", "content": "The weather in SF is sunny."} ], "structuredResponse": {"weather": "sunny", "temperature": "22°C"}, "user_name": "Alice" // 自定义状态字段}
三、对比与应用场景
场景 | 输入格式示例 | 输出格式核心字段 |
---|---|---|
简单文本交互 | { messages: "What's today's date?" } | messages (包含助手回复) |
复杂对话历史 | { messages: [{"role": "user", "content": "First question"}, ...] } | messages (按顺序记录所有消息) |
工具调用场景 | { messages: ["Get weather in NY"], "location": "New York" } | messages (包含工具调用记录)、structuredResponse (天气数据) |
自定义状态管理 | { messages: ["Hello"], "user_id": 123 } | messages 、user_id (状态保留) |
四、延伸
- 输入转换逻辑:所有输入格式最终都会被解析为 LangChain 消息对象,确保代理能统一处理不同形式的输入。输出扩展性:通过
stateSchema
可自定义输出字段,适用于需要持久化用户状态或工具调用结果的场景(如多轮对话中保存用户偏好)。与流式输出的结合:流式输出时,每次更新会逐步返回 messages
中的内容片段,提升用户交互体验(如实时显示 LLM 生成过程)。原文地址:https://www.cnblogs.com/LiShengTrip/p/18957212