设计 Helium Agent
Helium Agent 是一个使用 Python 构建的轻量级 AI Agent。它在终端中运行,旨在实现极简的复杂度。
以下是构建过程中的核心设计决策:
• 架构
系统采用扁平化架构。我避免使用沉重的框架和深层的依赖树。我使用像 <action> 这样的 XML 标签,而不是 OpenAI 的函数调用(function calling)。这使得 Agent 与模型无关。你可以使用任何 LLM。
• 通过依赖注入实现可组合性
我使用一个名为 AgenticLoop 的简单循环。它接受两个输入:模型调用器(model caller)和工具执行器(tool executor)。这一选择支持四种不同的模式:
- 通用聊天
- 编码工作流
- 子 Agent
- 自定义技能 我不使用子类或复杂的模式。只需两个简单的函数。
• 状态管理 Helium 是一个单用户工具。我使用模块级单例(module-level singletons)来管理对话历史和记忆。全局状态是表示单个用户会话最简单的方式。它能防止过度设计。
• 安全门禁 (Safety Gates) 我为工具执行采用了一个三层系统:
- 安全 (Safe):自动执行读取文件或搜索等任务。
- 风险 (Risky):对于写入文件等任务,需要用户许可。
- 条件 (Conditional):检查 bash 脚本等命令以检测危险。 这可以防止产生幻觉的模型删除你的文件。
• 通信 我使用原始 HTTP 请求,而不是 OpenAI SDK。这减少了依赖并保持了代码的透明度。你可以清楚地看到发送到 API 的具体内容。
• 技能系统 技能(Skills)仅仅是 Markdown 文件。你可以通过编写带有 YAML frontmatter 的文本文件来添加新技能。没有复杂的注册 API。这使得插件系统对任何人来说都易于使用。
• 经验教训
- 依赖注入提供了低成本的可组合性。
- 系统提示词(System Prompt)就是你的 API。请将其视为一等公民级别的代码。
- 如果你需要使用延迟导入(lazy imports)来修复循环依赖,说明你的模块边界划分错误。应该去修复架构。
简单性具有扩展性。请为你的特定用例选择最简单的解决方案。
来源:https://dev.to/debmalyasen34/designing-helium-agent-1b39
可选学习社区:https://t.me/GyaanSetuAi
