)
上次我认真写博客是好久以前 ChatGPT 才发布没多久写 YOLO v8 配置教程。更早研究 YOLO v4 的时候没想起来写博客世界还不存在现在大家口头意义上的“AI”那个时候 YOLO 这类表现超模的卷积神经网络就已经是前沿 AI 的代表了。现在恐怕愿意跟着博客教程学习卷积神经网络而不是直接询问“AI”的同学也越来越少了。世界正在巨变非常之巨感慨感慨。Agent 的基本概念首先什么是 AI Agent一般同学在找工作或者阅读 OpenAI / Anthropic 的博客的时候接触到的 Agent 概念就是指 AI Agent。设计一个 Agent 意味着设计一个由 LLM 使用工具观察工具执行结果根据结果判断如何进行下一步动作以满足用户提出的需求的软件。我之所以开头使用 AI Agent 这个词是因为还存在不使用 AI 进行工作的传统 Agent例如自动备份程序、服务器监控程序等。接下来我将会一律使用“Agent”指代“AI Agent”基于我开头描述的的 Agent 的工作方式直观地可以想象到 Agent 中的两个重要模块LLM 和 Tools。语言模型能做的是处理语言的变换有了工具其才能将语言变为操作。霍金有一个很聪明的大脑但他只能指挥别人做事。假设世界上不存在能够供霍金指挥的人那就倒霉了。一个语言模型和工具协作的示意{ // 此处发送工具列表 tools: [ { type: function, function: { name: open_excel, description: 使用这个函数可以打开 Excel返回执行结果 succeed / failed, parameters: { // 此处应该描述该工具参数填写的格式 } } } }, { type: function, function: { name: open_word, description: 使用这个函数可以打开 Word返回执行结果 succeed / failed, parameters: { // 此处应该描述该工具参数填写的格式 } } } }, ], messages: [ // 此处发送给模型的消息用户通过 Agent 发起的第一轮交互 { role: user, content: 我有一篇论文要写帮我打开 Word }, // 此处模型返回的工具调用请求模型返回的第一轮响应 { role: assistant, content: null, tool_calls: [ { id: 001, type: function, function: { name: open_word, arguments: {此处应该填写传给工具的参数略} } } ] }, // 此处工具执行后返回的值工具执行后通过 Agent 返回的第二轮交互 { role: tool, tool_call_id: 001, content: { succeed } }, // 此处模型返回的消息模型对工具执行结果返回的第二轮响应 { role: assistant, content: 已经为你打开了 Word, }, ] }你的 Agent 需要在每一次和模型产生交互的时候尝试解析模型返回的“function_call”字段值如果发现存在可解析的 function就执行它。所以让模型使用工具需要4️⃣步给模型发消息的时候附上你准备好的工具模型会自己决定要不要用等待模型返回消息解析模型返回消息中的工具调用字段并执行将执行结果发送给模型光使用了还不够你在 Agent 中编写的任何工具都必须返回执行结果。例如 openWord() 执行后必须返回 succeed 或 failed然后将这个结果拼接到上下文返回给模型否则模型不知道执行状态无法对结果进行决策例如向你报告“活干完了”或者反省“执行失败了我规划个别的办法”。相信敏锐的你已经发觉了这里存在一个循环。如果模型认为任务还有前进的必要则因为存在这个循环模型会一直工作下去。这就是 Agent 完成任务的基本原理只要你提供的工具对于完成任务是完备的模型会为你达到目标。