ReAct Agent
构造
1 | func main() { |
Tools
让大模型从「只会说」变成「会做事」
一次完整的工具调用由三段组成,缺一不可:
- ToolInfo —— 工具的说明书(名字、描述、参数 JSON Schema),发给模型看,模型据此决定调不调这个工具、参数怎么填;
- ToolsNode —— 工具的执行器,框架按模型给出的 tool_call 分派到对应工具并执行;
- tool 消息回灌 —— 执行结果被序列化成 role=tool 的消息回给模型,模型据此组织自然语言答案。
其实工具可以理解很简单,输入就是一个工具消息,SDK 要做的就是解析这个消息,然后执行函数,最后返回工具结果消息。消息都遵循AI调用的基本协议
1 | callMsg := schema.AssistantMessage("", []schema.ToolCall{ |
MaxStep
chatModel和Toolcal分别对应一次调用。以12为例子,模型最多执行5次tool call,因为最后一次不需要tool call是ai输出结果的环节。
一轮调用步数至少是三步,模型拿到用户输入并执行,获得参数;然后工具调用一次。工具调用结果要让模型继续调用一次,最后输出。其中,ChatModel和ToolCall分别执行了两次和一次。所以在规定循环次数的时候,请在设定的目标轮次加2。
MessageRewriter 与 MessageModifier
- MessageRewriter:改 State 里的原始消息,修改会持久化,后面每一轮循环都能看到;
- MessageModifier:只改本次传给模型的消息副本,不改 State,只对这一次模型调用生效
1 | import ( |
Agent in Graph
Agent 整体作为一个节点。输入是string 输出是 message格式
1 | agent, _ := NewAgent(ctx, &AgentConfig{ |