Back ay4's blog · blog

实习笔记03:Agent 工作循环与消息格式

1,365 words 4 min read #Agent开发

实习笔记03:消息格式与 Agent 工作流程

今天继续学习 AI,主要看了两部分内容:大模型怎样理解聊天消息,以及 Agent 是怎样调用工具完成任务的。

这些内容之前在看 Vercel 文档、做多轮聊天 Chatbot MVP 时接触过一点,这次算是重新梳理。

从 Messages 到模型真正读取的文本

开发聊天应用时,一段对话通常会被整理成 Messages:

[
{ "role": "user", "content": "你好" },
{ "role": "assistant", "content": "你好,有什么可以帮你?" }
]

多轮对话时,应用会把需要保留的历史消息一起提供给模型,让模型结合上下文回答。不过不一定每次都要发送全部历史;对话太长时,也可以截取、压缩或总结一部分内容。

rolecontent 是方便开发者使用的结构,模型真正读取的仍是一串 Token。把结构化消息转换成模型训练时使用的文本格式,就是 Chat Template 的作用。

例如,一些模型使用类似下面的格式区分角色和消息边界:

<|im_start|>user
你好<|im_end|>
<|im_start|>assistant

其中的 <|im_start|><|im_end|> 属于特殊 Token 或控制 Token。它们可以用来表示文本起止、角色边界或一轮对话结束等信息。

不同模型使用的模板并不完全相同,因此不能随便混用。模板用错以后,模型可能分不清谁在说话,回答效果也会明显下降。

原笔记把 Llama 的 <|begin_of_text|><|end_header_id|> 都当成了对话结束标记,这里需要纠正:前者表示文本开始,后者表示角色头部结束,都不是普通意义上的 EOS。不同功能的特殊 Token 需要分开理解。

Base Model 与 Instruct Model

  • Base Model:主要通过预测下一个 Token 进行预训练,更接近一个通用的文本续写模型。
  • Instruct Model:通常是在 Base Model 上继续进行指令微调或其他后训练,使它更擅长理解要求、回答问题和进行对话。

两者底层都在生成下一个 Token,区别主要在于后续训练方式和表现出来的行为。

Agent 的基本循环

一个常见的 Agent 工作流程可以简单理解为:

  1. Thought:根据任务和现有信息判断下一步做什么。
  2. Action:选择并调用工具,或者执行其他操作。
  3. Observation:接收工具结果、错误信息或环境反馈。
  4. 根据新的信息继续行动,或者输出最终答案。

Think, Act, Observe cycle

Thought 指的是 Agent 的内部推理和规划,并不代表应用必须把完整思考过程展示给用户。实际产品通常只需要呈现必要的操作说明和最终结论。

这种把推理、行动和观察交替进行的思路,常被称为 ReAct(Reasoning + Acting)。它很适合需要查询数据、调用 API 或分多步完成的任务,但不是所有任务都必须使用固定的 ReAct 格式。简单问题可能不需要工具,也不需要多轮循环。

Action:模型提出调用,程序负责执行

Agent 的操作可以用结构化 JSON、函数调用字段或代码等形式表达。例如查询天气时,模型可能生成:

{
"action": "get_weather",
"action_input": {
"location": "Tokyo"
}
}

需要注意的是,大语言模型本身通常不会直接执行这个工具。Agent 框架或宿主程序会解析调用信息,执行真正的天气查询,再把结果交还给模型。

这样做可以防止模型在结果返回以前就凭空编造答案。现代 Function Calling API 一般会直接返回结构化的工具调用字段,不一定需要开发者手动依赖“停止并解析”这一种实现方式。

Observation:接收结果,再决定下一步

Observation 是 Agent 从环境中得到的反馈,例如:

  • API 返回的数据;
  • 工具执行成功或失败的信息;
  • 文件、数据库或系统状态的变化;
  • 错误消息和状态码。

Agent 会把这些结果加入当前上下文,再判断信息是否足够。如果不够,就继续调用工具;如果已经能回答用户,就结束循环并生成最终回复。

例如,用户同时要求查询航班和天气,Agent 可能先获取航班列表,再查询目的地天气,最后结合两边的结果给出出行建议。一次工具调用不一定能完成整个任务,这也是 Agent 需要循环工作的原因。

今天的理解

今天把两条线连了起来:Chat Template 负责把聊天消息整理成模型熟悉的格式;Agent 工作流则让模型能够根据任务提出工具调用,并利用工具返回的结果继续判断。

简单来说,大模型负责理解和决策,Agent 程序负责执行与反馈。两边配合起来,模型才不只是“生成一段文字”,而是能够逐步完成实际任务。

参考资料

Comments

Quiet notes for this article.