zapmyco-core
环境无关的 AI Agent 运行时核心 —— ReAct 循环、工具抽象、事件系统。
zapmyco-core 是 zapmyco 的核心抽象层,可独立作为库嵌入到任意 Rust 项目,用于构建基于 Anthropic API 兼容接口的 Agent。
特性
- 零环境依赖:不读文件、不写终端、不碰环境变量,可嵌入 CLI / Web / 后台任务等任意环境
- 依赖注入:所有外部依赖通过
AgentConfig传入 - 事件驱动:所有输出通过
AgentEvent流发送,由调用方决定如何渲染 - 工具即 Trait:通过
AgentTooltrait 注册工具,不通过枚举硬编码,可自由扩展
快速开始
添加依赖:
[]
= "0.1"
= { = "1", = ["rt-multi-thread", "macros", "sync"] }
= "1"
= "0.1"
最小示例:
use Arc;
use ;
use mpsc;
use ;
// 1. 定义自定义工具:任何实现 `AgentTool` 的类型都可注册
;
async
核心概念
AgentConfig —— 依赖注入
所有外部依赖(模型、API Key、端点、工具、提示词等)通过 AgentConfig 传入,Core 层不读取任何外部配置。
let config = new
.with_system_prompt
.with_tools
.with_max_tool_rounds
.with_thinking;
AgentTool —— 工具即 Trait
实现 AgentTool trait 即可为 Agent 添加自定义工具,支持 Send + Sync,可跨 crate 边界使用:
agent_loop —— ReAct 循环
核心入口,驱动「推理 → 工具调用 → 继续/结束」的循环,返回 Result<(), AgentError>。
agent_loop.await?;
AgentEvent —— 事件流
Core 层通过 mpsc::Sender<AgentEvent> 向外输出所有状态变化:
| 事件 | 说明 |
|---|---|
TextChunk |
LLM 输出的文本片段(流式) |
ThinkingChunk |
Extended Thinking 思考过程 |
ToolInvocationStarted / ToolInvocationFinished |
工具调用开始 / 结束 |
TurnFinished |
一轮请求完成 |
TokenUsage |
Token 用量统计 |
Finished |
Agent 执行结束 |
ConversationMessage —— 对话历史
let mut messages = Vecnew;
messages.push;
messages.push;
messages.push;
错误处理
AgentError 覆盖核心循环的常见失败场景:
| 变体 | 说明 |
|---|---|
Api |
API 调用失败 |
ToolExecution |
工具执行失败 |
MaxRoundsReached |
达到最大工具调用轮次 |
ChannelClosed |
事件通道关闭 |
Conversion |
消息转换失败 |
设计原则
- 零环境依赖:不读文件、不写终端、不碰环境变量
- 依赖注入:所有外部依赖通过
AgentConfig传入 - 事件驱动:所有输出通过
AgentEvent流发送 - 工具即 Trait:通过
AgentTooltrait 注册,不通过枚举硬编码
文档
完整 API 文档见 docs.rs/zapmyco-core。