Hacker News 中文摘要

RSS订阅

代理设计依然困难 -- Agent design is still hard

文章摘要

文章核心内容:作者分享构建智能代理的新发现,指出当前代理开发仍面临诸多挑战,包括SDK抽象在真实工具使用时失效、缓存管理需自定义、强化学习负担过重、失败隔离要求严格等问题,同时强调文件系统式共享状态层的重要性。作者反思了Vercel AI SDK的选择,认为底层SDK可能更适合代理开发。

文章总结

智能体设计依然充满挑战

发布日期:2025年11月21日

作者分享了构建智能体(agent)的最新实践经验,核心观点是:尽管技术进步显著,但智能体开发仍面临诸多挑战。以下是关键发现:


1. SDK选择困境

开发智能体时面临底层SDK(如OpenAI/Anthropic)与高级抽象(如Vercel AI SDK)的选择。作者团队曾采用Vercel AI SDK的提供者抽象层,但发现: - 不同模型差异显著,需要自定义抽象层 - 处理提供者端工具时兼容性问题频发(如Anthropic的网页搜索工具会破坏消息历史记录) - 直接使用原生SDK能获得更清晰的错误提示和缓存控制

结论:目前阶段更推荐直接使用平台原生SDK,避免抽象层带来的额外复杂度。


2. 缓存管理经验

  • Anthropic的显式缓存管理:虽然初期认为手动管理繁琐,但最终发现其优势:
    • 支持对话分支并行执行
    • 允许上下文编辑
    • 成本预测更精准
  • 实现方案:在系统提示后设置缓存点,对话开头设置两个缓存点(最后一个随对话尾部移动)

3. 强化机制的应用

在智能体循环中通过以下方式增强效果: - 工具调用后注入任务状态、环境变更等元信息 - 失败时提示回退步骤 - 自强化工具(如Claude Code的待办事项回显工具)


4. 故障隔离策略

  • 子代理隔离:将可能失败的任务交由子代理执行,仅返回成功结果和失败摘要
  • 上下文编辑(Anthropic特有):可移除无效尝试记录,但会破坏缓存

5. 核心架构设计

  • 虚拟文件系统:作为子代理/子推理间的共享存储层,解决工具间数据传递问题
  • 输出工具挑战
    • 难以控制输出语气(额外调用轻量级LLM反而降低质量)
    • 存在漏调用问题,需通过结束检查强制触发

6. 模型选择建议

  • 主循环:Haiku/Sonnet(最佳工具调用模型)或Gemini系列
  • 子任务:Gemini 2.5(适合文档/PDF处理及图像信息提取)
  • 成本考量:更高效的模型虽单token成本高,但总消耗可能更低

7. 测试评估难题

智能体的动态特性使得传统评估方法失效,目前尚未找到理想的测试方案,需依赖实际运行时的可观测数据。


附:近期阅读推荐

  1. 浏览器智能体的极简实现:用基础CLI工具替代复杂MCP服务器
  2. 小型开源库的未来:AI生成代码正在取代简单工具库
  3. Tmux在交互系统中的价值
  4. LLM API的同步问题

标签人工智能

(注:本文保留了技术细节和实证发现,删减了部分个人化表述和外部链接的具体实现描述)

评论总结

评论总结

1. 自定义框架 vs. 抽象层

  • 支持自定义框架:认为现有LLM抽象层过于复杂且难以维护,建议自行构建框架。

    • "I'd stay clear of any llm abstraction... crumbling under their own weight due to the sheer futility of supporting every permutation of every SDK evolution"(评论1)
    • "don’t use SDK:s for agents. Use a while loop and craft your own JSON"(评论9)
  • 支持特定工具:推荐Claude Code/Agent SDK,认为其高效且易用。

    • "using cc is the first that has felt magic... incredibly self aware"(评论2)
    • "Claude Code SDK is amazing... but only Anthoripic models are supported"(评论10)

2. 技术迭代与锁定风险

  • 技术快速迭代:认为当前优化可能因模型升级而过时,建议避免过度投入。

    • "a lot of these techniques are simply optimisations to tackle some deficiency in LLMs that is a problem 'today'"(评论6)
    • "Design is hard because models change almost on a weekly basis"(评论12)
  • 供应商锁定风险:需权衡锁定风险与开发效率。

    • "Vendor lock-in is a risk, but the bigger risk is having an agent that is less capable"(评论2)
    • "SmythOS SDK provides flexibility in terms of choosing the model provider"(评论10)

3. 架构设计与工具选择

  • 多样化架构尝试:用户尝试多种架构(子代理、线性、规划-执行等),但尚无统一方案。

    • "tried three different SDKs and a couple of architectures... will write a detailed post about my learnings"(评论10)
    • "I still feel there is no sure shot way to build an abstraction yet"(评论5)
  • 推荐轻量工具:如Pocketflow因其简单性和跨语言支持受推荐。

    • "The simple api and mental model makes it easy for everyone on my team to jump into"(评论13)

4. 实用建议与质疑

  • 强化循环(Reinforcement in the Loop):认为异步/事件驱动模式强大。

    • "use this pattern to enable async/event steered agents, it’s super powerful"(评论4)
  • 技术质疑:部分用户认为当前技术被过度炒作,或存在基础缺陷。

    • "Most of it reads like too high expectation of overhyped technology"(评论7)
    • "why can’t the agent just know where the data is?"(评论3)

5. 商业服务 vs. 自建

  • 倾向商业服务:部分用户选择付费服务以节省开发成本。

    • "Paying an agentic coding company to do this makes perfect sense for me"(评论11)
  • 自建控制权:强调自主控制的重要性,尤其是非简单场景。

    • "You will in practice need this level of control if you are not doing something trivial"(评论9)