过去大多数软件的控制流是人写死的。用户点一个按钮,程序走进某个函数,再返回一个结果。Agent 把其中一段控制流交给模型:它先看目标,再决定要不要搜索、写代码、查数据库,或者停下来。
什么是 AI Agent
一个 Agent 不是更长的提示词。它是一个循环。模型提出下一步动作,运行时执行这个动作,再把结果送回模型,直到它认为任务完成,或者到达你设定的边界。
边界比模型更重要。没有步数、权限和检查,循环只会把一次错误放大成一串错误。
它和聊天机器人有什么不同
聊天机器人通常回答一次。Agent 会连续行动。前者的失败是说错,后者的失败可能是做错:删掉文件、发出请求、把错误写进记忆。
| 聊天机器人 | Agent | |
|---|---|---|
| 控制流 | 一次回答 | 多步循环 |
| 工具 | 通常没有 | 搜索、代码、数据库 |
| 主要风险 | 说错 | 做错 |
一个最小架构
模型
模型负责选择下一步。它不应该直接碰到生产系统,而应该返回一个结构化动作。
工具
工具是你明确允许的能力。每个工具都要有名字、参数和失败时的返回值。
记忆
记忆保存已经发生的事。它不是无限的聊天记录,而是下一轮决策需要的摘要。
def run_agent(goal, tools, memory):
steps = []
while len(steps) < 8:
action = model.decide(goal, memory.read(), tools.schema())
if action.type == "finish":
return action.answer
result = tools.call(action.name, action.args)
memory.write({"action": action, "result": result})
steps.append(action)
return memory.summary()
把 RAG 放回正确的位置
检索可以成为 Agent 的一个工具,也可以发生在循环开始之前。两种做法都合理,但不要把检索说成训练。
说明
RAG 不会训练模型。它只是在回答之前,把检索到的材料放进上下文。
模型不会因为被放进一个循环就变得可靠。可靠来自你允许它做的事,以及你如何检查结果。
工程上先守住的边界
先限制步数、工具权限和可写范围。让每次动作都可以记录、重放和撤销。能由普通程序完成的判断,就不要交给模型。
结论
Agent 改变的是控制流的位置,不是软件工程的责任。架构仍然要回答:谁可以行动,行动如何被看见,失败时停在哪里。
把失败定义成做错而不是说错,这个区分很有用。
下一步会用一个只读搜索工具来写这个例子,先不给写权限。