2023 年大家还在惊叹“模型能回答问题”,2024 年之后真正的竞争变成了“模型能不能把事做完”。一个普通聊天机器人和一个顶级 Agent 的差别,不在语气多自然,而在于:
换句话说,顶级 Agent 的核心不是“生成”,而是“闭环”。它要能感知环境、做出决策、执行动作、观察反馈,再回到决策——这个循环越稳定,Agent 就越“顶”。
拆开看,一个能稳定干活的 Agent 通常具备四种能力:
缺任何一个,Agent 都会退化成“套了壳的聊天框”。只有规划没有工具,是纸上谈兵;只有工具没有反思,是一顿乱调。
顶级 Agent 的骨架其实很简单:一个带状态的任务循环。下面这段伪代码展示了最核心的决策-执行-观察结构:
def run_agent(goal, tools, max_steps=10):
memory = [{"role": "user", "content": goal}]
for step in range(max_steps):
# 1. 模型基于目标和历史,决定下一步
action = llm.decide(memory, tools_schema=tools)
if action.type == "finish":
return action.answer
# 2. 执行工具,拿到观察结果
observation = tools[action.name].run(**action.args)
# 3. 把动作和结果写回记忆,进入下一轮
memory.append({"role": "assistant", "action": action})
memory.append({"role": "tool", "content": observation})
return "达到最大步数,未能完成"这段代码只有十几行,但它包含了 Agent 的全部本质:决策、执行、观察、循环。市面上所有“顶级 Agent”框架,无非是在这个骨架上加更聪明的规划、更安全的工具、更强的记忆。
骨架人人会写,差距全在工程细节。
工具不是越多越好,而是边界清晰、参数明确、失败可读。一个糟糕的工具会让 Agent 反复试错,一个优秀的工具定义本身就在引导模型正确使用:
tools = {
"search_docs": {
"desc": "检索内部知识库,返回最相关的3条片段",
"params": {"query": "str, 检索关键词"},
},
"run_sql": {
"desc": "执行只读SQL查询,仅允许SELECT,返回前100行",
"params": {"sql": "str, 标准SQL语句"},
},
}注意 run_sql 的描述里写死了“只读、仅 SELECT、返回前 100 行”——这是用工具契约约束 Agent 的行为边界,比在 Prompt 里反复叮嘱可靠得多。
顶级 Agent 和普通 Agent 最大的行为差异,是它会在交付前自我检查。最简单的实现是加一个“评审步骤”:
def reflect(goal, draft):
critique = llm.generate(
f"目标:{goal}\n当前结果:{draft}\n"
f"请检查:是否满足目标?有无事实错误?缺什么?"
)
return critique实战中,反思可以由同一个模型完成,也可以换一个更严格的小模型做“质检员”。关键是把“检查”变成一个显式步骤,而不是指望模型一次就写对。
顶级 Agent 不会把全部历史都塞进 Prompt。常见做法是三层记忆:
上下文窗口是有限且昂贵的资源,会做记忆压缩的 Agent,才能跑长任务。
Agent 的评估比普通模型难得多,因为它多步执行、路径不唯一。实战中通常看三类指标:
建议维护一个回归测试集:几十个真实任务,每次改 Prompt、换模型、加工具都跑一遍。没有回归集的 Agent 团队,迭代全靠玄学。
玩转顶级 Agent,不是去追最新的框架和最大的模型,而是把四件事做扎实:规划要能拆、工具要好用、记忆要会压、反思要显式。骨架十几行代码就能写出来,但让它稳定干活的,是工具契约、记忆分层和回归评估这些“不性感”的工程。
从一个小而具体的任务开始,给它三五个可靠的工具,加上一个反思步骤和一个回归测试集——这就是通往顶级 Agent 最踏实的路。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。