一个 AI 智能体有多少是框架的功劳,又有多少其实只是一个循环?

Reddit r/AI_Agents 工具

摘要

作者对比了手写智能体循环和使用 LangGraph create_agent 构建购物助手的方式,说明框架本质上是帮你运行同样的循环,并额外提供检查点记忆、流式输出、重试和追踪功能。建议先手写循环理解原理,再用框架落地。

刚开始使用 LangGraph 时,我分不清哪些部分是框架做的,哪些部分是模型做的。为了弄明白,我先在不使用任何框架的情况下搭建了一个购物助手。它有两个工具,一个搜索商品目录,另一个获取单个商品的详细信息。整个智能体就是这个函数:```python def run_agent(user_message, max_steps=6): messages = [ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": user_message}, ] for step in range(1, max_steps + 1): response = client.chat.completions.create( model=MODEL, messages=messages, tools=TOOL_SCHEMAS, temperature=0.1, extra_body=EXTRA_BODY, # 服务提供商专用;非 NVIDIA 服务留空 ) message = response.choices[0].message messages.append(message) # 记住模型说了什么 # 没有工具调用 -> 模型给出了最终答案。 if not message.tool_calls: return message.content # 否则:运行每个请求调用的工具,将结果反馈回去,继续循环。 for call in message.tool_calls: name = call.function.name args = json.loads(call.function.arguments) result = TOOL_FUNCTIONS[name](**args) messages.append( {"role": "tool", "tool_call_id": call.id, "content": result} ) return "已停止:达到步数上限,仍未获得最终答案。" ``` 模型只会请求调用工具,本身并不执行任何操作。循环负责运行函数,将结果追加为一条消息,然后再次调用模型。当返回的响应中不包含工具调用时,那就是答案。我起初把 max_steps 理解为一道安全保障。实际上,它是一项预算,因为每执行一轮循环,就会发起一次 API 调用。一个需要使用五次工具的问题,要花费六次调用。接着,我用 LangGraph 的 create_agent 构建了同样的智能体。上面的函数变成了三行代码。但在运行结束后打印消息列表,你会看到完全相同的顺序:用户消息、模型请求调用工具、工具结果、最终答案。框架替你运行这个循环,并没有取代它。它真正增加的是记忆。原始循环每次调用都会从一个空消息列表开始,所以先问“给我看看你们的登山靴”,再问“其中哪些是防水的?”,就无法衔接下去。有了检查点保存器,第二个问题就能正常回答。再加上流式输出、重试和追踪,这些都是实实在在的工作,否则就得由你自己实现。我的看法是:亲手写一次循环来理解它,正式交付时再使用框架。如果一开始就用框架,循环对你来说就像魔法,而你没法调试魔法。我把这些内容写进了一篇教程,可以在没有 GPU 的笔记本电脑上运行,对接任何兼容 OpenAI 的端点,包括 Ollama。文章链接在评论区。你是从原始循环开始的,还是从框架开始的?有哪些事情是你希望自己早点知道的?
查看原文

相似文章

@Huahuazo: 想搞明白Agent到底怎么从零搭起来,不是光会调API那种——我翻过不少资料,要么讲得太抽象,要么直接甩给你一个成品让你改改参数就完事,中间“为什么这样设计”的部分基本是空白。 LangChain官方的这个Agents From Scra…

X AI KOLs Timeline

LangChain官方发布的Agents From Scratch教程详细介绍了如何从零构建一个具有人机协作和记忆功能的AI代理,涵盖基础搭建、评估体系、人机协作和长期记忆四个部分。

@cellinlab: https://x.com/cellinlab/status/2064144608242679822

X AI KOLs Timeline

这篇文章介绍了 Loop Engineering 的概念——不再直接给 AI agent 写 prompt,而是设计一个系统(loop)来递归地让 agent 迭代工作,直到任务完成。文章详细对比了 Claude Code 和 Codex 在 automations、worktrees、skills、sub-agents 等五个构建块上的实现,认为这可能是未来与 coding agent 协作的趋势,但仍需警惕 token 成本和 AI slop 问题。

@antiAIvo: 如何从零手写一个Agent?整了一套 Agent 教程,共18 篇 Claude Code、Codex 这些编码 Agent 内核其实就是一个循环: 模型请求工具,代码执行,结果放回对话,直到模型不再请求 这套教程从100 行代码开始 用…

X AI KOLs Following

分享了一套共18篇的手写Agent教程,从100行Python代码起步,逐步实现工具调用、权限、上下文管理、Skills、MCP、子Agent、计划与记忆等核心模块,并对照拆解Claude Code、Codex、Grok Bot、DeepSeek Harness等主流编码Agent的实现取舍,指出其最大分歧在于安全层应交给提示词还是代码。

本文系统梳理了AI Agent架构与工程实践,涵盖控制流、上下文工程、工具设计、记忆、多Agent组织、评测、追踪和安全,基于OpenClaw实现展开,强调Harness(测试验证基础设施)对系统稳定性的关键作用。

X AI KOLs

本文系统梳理了AI Agent架构与工程实践,涵盖控制流、上下文工程、工具设计、记忆、多Agent组织、评测、追踪和安全,基于OpenClaw实现展开,强调Harness(测试验证基础设施)对系统稳定性的关键作用。

@yibie: 每个程序员都应该自己手写一个 agent。 只要 50 行代码,很有趣,而且会让你惊讶。但为了获得最大收获,请做这两件事: 第一,从零手写。打开空白文本文件,自己敲完每一行代码。不要用任何 AI,连自动补全都不要。 第二,只依赖标准库文档…

X AI KOLs Timeline

本文鼓励程序员亲手手写一个简单的AI agent(约50行代码),以加深对agent工作机制的理解,并建议从零手工编写、只依赖标准库和API文档。