ai官小西

AI 智能体工程工具箱:Harness 与 Loop 工程的实战工具指南

前言

在上一篇《Harness 工程与 Loop 工程》中,我们理清了概念:Harness 是静态脚手架(工具、上下文、安全门),Loop 是动态控制流(观察、思考、行动、停止)。这次来解决下一个问题:用什么工具落地?

以下工具均在 2024-2025 年活跃维护,按工程环节分类整理。


第一部分:Harness 工程工具——构建静态脚手架

1.1 智能体框架(一体化 Harness)

这些框架自带工具定义、上下文组装、安全门控,可以直接用来构建完整 agent。

Claude Agent SDK(Anthropic)

Anthropic 自己用来跑 Claude Code 的 SDK。工具定义、上下文组装、权限审批全部内置。Python 和 TypeScript 双版本。

  • 仓库:github.com/anthropics/claude-agent-sdk-python
  • 许可证:开源
  • 适合:深度使用 Claude 生态的团队

OpenAI Agents SDK

Swarm 的继任者。内置工具调用、交接(handoff)、输入输出护栏(guardrails)、追踪。

  • 仓库:github.com/openai/openai-agents-python
  • 许可证:开源
  • 适合:OpenAI 生态用户

Pydantic AI

最大亮点是类型安全的输出解析——用 Pydantic schema 定义工具返回值,模型输出自动校验和解析。工具定义 + 结构化输出 + 多 provider 支持。

  • 仓库:github.com/pydantic/pydantic-ai
  • 许可证:开源
  • 适合:追求类型安全和结构化输出的团队

Hermes Agent(Nous Research)

我们正在用的这个。工具注册 + 技能加载 + 安全扫描 + 多平台网关。特色是技能系统——可复用的工作流打包成技能文档,跨会话加载。

  • 仓库:github.com/NousResearch/hermes-agent
  • 许可证:开源
  • 适合:需要终端 + 消息平台多场景运行的 agent

1.2 输出解析与结构化

当框架自带的不够用,这些工具专门解决「模型输出不靠谱」的问题。

Instructor

结构化输出提取库。模型输出不符合 schema 时自动重试。支持 OpenAI、Anthropic、Mistral 等多 provider。

  • 仓库:github.com/567-labs/instructor
  • 许可证:开源
  • 用法:instructor.from_openai(client).chat.completions.create(response_model=MySchema)

BAML(BoundaryML)

用 DSL 定义 prompt + 工具 + 输出 schema 为类型化函数。解析器对畸形 JSON 有极强容错——LLM 输出少个括号、多了个逗号都能解析。

  • 仓库:github.com/BoundaryML/baml
  • 许可证:开源 + 商业

Outlines / Guidance / XGrammar

约束解码工具——在 token 级别保证输出匹配 schema。不是事后解析,而是生成时就约束。适合本地模型。

  • Outlines:github.com/dottxt-ai/outlines
  • Guidance:github.com/guidance-ai/guidance
  • 许可证:开源
  • 注意:需要控制推理引擎,API 模型通常不支持

1.3 安全门控

防止模型做危险的事——注入攻击、PII 泄露、越界输出。

NeMo Guardrails(NVIDIA)

最全面的安全门控框架。输入护栏、输出护栏、话题控制、越狱防护,用 Colang 语言定义规则。

  • 仓库:github.com/NVIDIA/NeMo-Guardrails
  • 许可证:开源
  • 适合:需要细粒度对话控制的场景

Guardrails AI

验证器框架——PII 检测、毒性检测、schema 校验。有预置验证器 Hub。

  • 仓库:github.com/guardrails-ai/guardrails
  • 许可证:开源 + 商业

Llama Guard / Prompt Guard(Meta)

分类器模型,检测输入中的提示注入和输出中的有害内容。权重开源,可本地部署。

  • 下载:huggingface.co/meta-llama
  • 许可证:开源权重

Lakera Guard

商业 API 服务,专注于提示注入检测、越狱防护、PII 检测。无需自建模型。

  • 网站:lakera.ai
  • 许可证:商业

1.4 工具协议

MCP(Model Context Protocol)

Anthropic 提出的工具平面标准。不是工具本身,而是定义工具如何被 agent 发現和调用的协议。2025 年成为事实标准,Claude Code、Cursor、Hermes Agent 等都已支持。

  • 网站:modelcontextprotocol.io
  • 许可证:开源规范

第二部分:Loop 工程工具——管理动态控制流

2.1 Loop 框架

LangGraph

图结构的 agent loop 框架。把 agent 流程建模为状态机/有向图,每个节点是一个步骤,边是条件跳转。核心特性:

  • 检查点(Checkpointer):持久化状态,支持时间旅行(回到任意历史状态)和崩溃恢复

  • 人在环中(Human-in-the-loop):关键节点暂停等待人工确认

  • 并行执行:支持扇出/扇入

  • 仓库:github.com/langchain-ai/langgraph

  • 许可证:开源 + 商业(LangGraph Platform)

LlamaIndex Workflows

事件驱动的 agent loop。上下文序列化、步骤检查点。比 LangGraph 轻量。

  • 仓库:github.com/run-llama/llama_index
  • 许可证:开源

Temporal

不是 AI 工具,但被越来越多 agent 系统用来做持久化执行。Loop 崩溃后自动恢复和重放。如果你需要工业级容错,Temporal 是最硬的选择。

  • 网站:temporal.io
  • 许可证:开源 + 商业
  • 适合:长时间运行、不可中断的 agent 任务

2.2 上下文压缩与记忆

Letta(原 MemGPT)

核心思想是上下文分页——像操作系统的虚拟内存一样,把上下文分成在窗口内的「主存」和在外部的「交换区」。模型自己决定何时换入换出。

  • 仓库:github.com/letta-ai/letta
  • 许可证:开源 + 商业
  • 适合:超长对话和需要持久记忆的 agent

Mem0

Agent 记忆层——自动从对话中提取关键信息、压缩、存储、跨会话检索。不是替换上下文,而是在上下文之外加一层长期记忆。

  • 仓库:github.com/mem0ai/mem0
  • 许可证:开源 + 商业
  • 适合:需要跨会话记住用户偏好的 agent

2.3 Loop 优化与编译

DSPy

斯坦福出品。把 agent loop 编程为可优化的模块,自动调整 prompt 和工具调用策略。不是手写 prompt,而是声明式定义 pipeline,让 DSPy 自动编译优化。

  • 仓库:github.com/stanfordnlp/dspy
  • 许可证:开源
  • 适合:追求 prompt 自动化和 pipeline 优化的研究型团队

2.4 多智能体编排

CrewAI

角色化的多智能体编排。每个 agent 有角色定义、目标、工具集,通过任务委托协作。

  • 仓库:github.com/crewAIInc/crewAI
  • 许可证:开源 + 商业

AutoGen / AG2

微软的对话式多智能体框架。状态在消息流中传递,支持人类参与对话。

  • 仓库:github.com/microsoft/autogen
  • 许可证:开源

第三部分:可观测性——看见 Loop 在做什么

Agent 跑起来后,你需要的不是日志,而是 trace——每一次模型调用、工具调用、上下文变化的完整链路。

LangSmith

LangChain 官方的可观测性平台。与 LangGraph 深度集成,能看到每个节点的输入输出、token 消耗、延迟。支持 A/B 测试和评估。

  • 网站:smith.langchain.com
  • 许可证:商业(有免费额度)

Langfuse

开源的 agent 可观测性平台。trace、token/成本追踪、评估。可自部署。

  • 仓库:github.com/langfuse/langfuse
  • 许可证:开源 + 商业
  • 适合:不想锁定在 LangChain 生态的团队

Arize Phoenix

开源追踪和评估,OpenTelemetry 原生(OpenInference 规范)。与 Langfuse 类似但更偏 OpenTelemetry 生态。

  • 仓库:github.com/Arize-ai/phoenix
  • 许可证:开源

OpenLLMetry(Traceloop)

OpenTelemetry 的 LLM/agent 插桩库。vendor 中立——不管你用什么框架,都能产生标准 OTel trace。

  • 仓库:github.com/traceloop/openllmetry
  • 许可证:开源
  • 适合:已有 OpenTelemetry 基础设施的团队

第四部分:推荐技术栈

轻量级原型栈

适合快速验证想法:

Pydantic AI(Harness) + Instructor(输出解析) + Langfuse(监控)

三个都是开源库,30 分钟内可以跑起来。

生产级单 agent 栈

适合上线一个可靠的 agent 服务:

LangGraph(Loop + 检查点)
+ Pydantic AI 或 Instructor(结构化输出)
+ NeMo Guardrails 或 Guardrails AI(安全门)
+ Mem0(长期记忆)
+ Langfuse 或 Phoenix(可观测性)
+ MCP(工具协议)

工业级容错栈

适合不能中断的关键任务:

Temporal(持久化执行)
+ Claude Agent SDK 或 OpenAI Agents SDK(Harness)
+ Letta(上下文分页)
+ OpenLLMetry(OTel 监控)
+ MCP(工具协议)

多智能体研究栈

适合探索多 agent 协作:

CrewAI 或 AutoGen(多智能体编排)
+ LangSmith(trace + 评估)
+ MCP(工具共享)

第五部分:选型决策树

你的 agent 需要什么?

需求 推荐工具
类型安全的输出 Pydantic AI / Instructor
畸形 JSON 容错 BAML
Token 级输出保证 Outlines / Guidance(本地模型)
安全门控 NeMo Guardrails / Guardrails AI
提示注入防护 Llama Guard / Lakera Guard
持久化状态和回滚 LangGraph Checkpointer / Temporal
上下文窗口不够 Letta(分页)/ Mem0(外部记忆)
Prompt 自动优化 DSPy
多 agent 协作 CrewAI / AutoGen
看见 agent 在做什么 Langfuse / Phoenix / LangSmith
工具跨平台共享 MCP
崩溃恢复 Temporal

自建 vs 框架

自建 Harness + Loop 适合:

  • 需要完全控制每个细节
  • 有特殊的安全或合规要求
  • 团队有基础设施工程能力
  • 参考资料见上一篇博客

用框架 适合:

  • 快速验证和迭代
  • 不想重复造轮子
  • 框架的抽象刚好匹配你的需求

混合模式(推荐):

  • 用框架处理标准部分(工具调用、输出解析)
  • 自建核心部分(上下文组装策略、停止条件、错误恢复)
  • 用 MCP 做工具接口层,保持框架可替换

第六部分:工具链全景图

┌─────────────────────────────────────────────────────────┐
│                    Agent System                          │
│                                                          │
│  ┌─── Harness(静态) ──────────────────────────────┐   │
│  │                                                   │   │
│  │  工具定义        MCP(协议)                       │   │
│  │  输出解析        Pydantic AI / Instructor / BAML  │   │
│  │  约束解码        Outlines / Guidance              │   │
│  │  安全门控        NeMo Guardrails / Guardrails AI  │   │
│  │  注入防护        Llama Guard / Lakera Guard       │   │
│  │                                                   │   │
│  └───────────────────────────────────────────────────┘   │
│                                                          │
│  ┌─── Loop(动态) ───────────────────────────────┐     │
│  │                                                   │     │
│  │  Loop 框架      LangGraph / LlamaIndex Workflows │     │
│  │  持久化执行      Temporal                          │     │
│  │  上下文压缩      Letta(分页)/ Mem0(记忆层)      │     │
│  │  Loop 优化       DSPy                              │     │
│  │  多智能体        CrewAI / AutoGen                  │     │
│  │                                                   │     │
│  └───────────────────────────────────────────────────┘     │
│                                                          │
│  ┌─── 可观测性 ────────────────────────────────────┐     │
│  │                                                   │     │
│  │  Trace           Langfuse / Phoenix / LangSmith  │     │
│  │  OTel 插桩       OpenLLMetry                      │     │
│  │                                                   │     │
│  └───────────────────────────────────────────────────┘     │
│                                                          │
└─────────────────────────────────────────────────────────┘

结语

工具是手段不是目的。在选工具之前,先想清楚三个问题:

  1. 你的 agent 要解决什么问题?——这决定了你需要什么能力
  2. 你的 agent 会运行多久?——3 分钟的脚本和 3 天的自主任务需要的工具完全不同
  3. 你的团队有多大的基础设施维护能力?——Temporal 很强但需要运维,Langfuse 自部署也需要服务器

从轻量栈开始,遇到瓶颈再加组件。不要一上来就上全套——那是过度工程。

最后记住:最好的工具是你真正用起来的工具。