从零开始构建 Agentic 框架 🚀

发布: (2026年1月17日 GMT+8 05:32)
7 min read
原文: Dev.to

I’m ready to translate the article for you, but I don’t have the article’s content—only the source link you provided. Could you please paste the text you’d like translated (or the full article)? Once I have the content, I’ll translate it into Simplified Chinese while preserving the formatting, markdown, and code blocks as requested.

挑战:为什么要构建一个新框架?

说实话,我很好奇构建能够使用自己策略进行思考和推理的代理需要什么——类似于我们处理任务的方式。当时的代理框架在如何用更少的代码构建体面的代理方面几乎没有控制力,所以我想尝试自己的实现。

大多数现有的代理框架要么:

  • 将代理视为 简单的 LLM + 工具循环
    • 需要冗长或重复的设置
    • 限制了推理或策略的灵活性

从第一天起,我就想要一些不同的东西:

  • 能够 思考、行动并在任务中途转向 的代理
  • 清晰且 类型安全的 API,易于推理
  • 可组合的策略,以适应任何代理任务
  • 可观察的事件,让开发者始终了解 代理在做什么以及为什么

目标很简单:让构建智能、响应式的 AI 代理直观、安全且强大,同时不牺牲灵活性。

Reactive Agents的核心原则

在设计框架时,我专注于以下几个关键原则:

  • Reactive Decision‑Making

    • 代理根据任务输入和中间结果作出响应,而不是遵循固定计划。
    • 内置的反射机制使它们能够在结果与预期不符时转变策略
  • Tool Integration and MCP Support

    • 代理可以执行自定义 Python 工具或利用MCP 服务器进行模块化工作流。
    • 这使得分布式、多工具管道在无需复杂编排的情况下得以实现。
  • Observability and Transparency

    • 每一次代理行为都会发出可观察事件
    • 开发者可以实时跟踪推理过程、工具使用以及决策路径。
  • Composability and Type Safety

    • 推理策略是模块化的,易于替换、扩展或组合。
    • 类型安全的 API 减少运行时错误,使开发更可预测。
  • Ease of Use

    • Builder 模式提供了简洁、最小样板代码的设置方式。
    • 快速的启动时间和广泛的模型支持让实验既快捷又有成就感。

设计响应循环

在框架的核心是 响应循环,它指引代理如何处理任务:

Receive Task → Reasoning Layer → Tool Execution → Observe Feedback → Reflect & Adapt → (repeat)
  1. 接收任务 – 代理从用户或系统获取输入。
  2. 推理层 – 决定使用哪些工具或策略。
  3. 工具执行 – 运行自定义或基于 MCP 的工具。
  4. 观察反馈 – 跟踪事件、结果和输出。
  5. 反思与适应 – 如有必要,更新策略,然后重复。

这种架构确保代理 不是静态的。它们 在运行过程中学习并适应,从而适用于各种代理任务。

实现亮点

在构建 Reactive Agents 时,几个设计选择尤为突出:

  • 构建者模式 – 简单、可读的代理创建。
  • 可组合策略 – 在不重写代理的情况下切换推理模块。
  • 可观察事件 – 使调试和洞察无缝进行。
  • 类型安全 API – 及早捕获错误,提高开发者信心。
  • MCP 集成 – 支持分布式代理架构和模块化工作流。

这些选择共同使框架区别于更简单的编排层或单体代理实现。

示例:最小化响应式代理

下面是一个 准确、符合文档的示例,展示了使用 自定义 Python 工具和 MCP 工具 的响应式代理:

import asyncio
from reactive_agents.agents import ReactAgentBuilder
from reactive_agents.tools.decorators import tool

# Define a simple custom tool
@tool(description="Greet a user")
async def greet(name: str) -> str:
    """Use this tool to greet the user by their provided name."""
    return f"Hello, {name}! Welcome to Reactive Agents."

async def main():
    agent = await (
        ReactAgentBuilder()
        .with_name("DemoAgent")
        .with_model("ollama:qwen3:4b")          # Example model string
        .with_tools(["brave-search", greet])   # Auto‑detects MCP tools vs custom tools
        .with_observable_events()              # Track events
        .build()
    )

    result = await agent.run(
        "Greet a new user and fetch latest news about AI."
    )
    print(result)

if __name__ == "__main__":
    asyncio.run(main())

此代码片段演示了 响应式推理、工具执行和可观察事件,同时保持对新手友好、易于理解。

构建框架过程中的经验教训

  • 提前为可观测性设计 – 没有事件跟踪,调试复杂的代理非常困难。
  • 使推理模块化 – 可组合的策略允许在不破坏现有代码的情况下进行实验。
  • 保持 API 直观 – 开发者应更多地花时间设计代理,而不是与设置纠缠。
  • 支持多种工具和提供商 – 灵活性对于真实世界的代理任务至关重要。

展望

Reactive Agents 是 alpha‑阶段,但已可用于生产。API 可能会演进,但 核心原则是稳定的:反应循环、可组合推理、可观测性和工具集成。

我希望这个框架能激励开发者 以全新方式探索代理式 AI,打造更智能的应用程序,这些应用不仅仅是响应,而是能够 动态地推理、行动并改进

参与

尝试一下,给仓库加星,或做出贡献:

GitHub:

buell/reactive-agents

Whether it’s extending reasoning strategies, adding tools, or improving observability, **your contributions help shape the next generation of reactive AI agents**.
Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...