开发指南
开发环境搭建
系统要求
- 操作系统: macOS 12+ / Windows 10+ (WSL2) / Linux (Ubuntu 22.04+)
- Node.js: >= 18.0.0
- Python: >= 3.11
- Rust: >= 1.75
- 包管理器: pnpm >= 8.0.0
- Git: >= 2.30.0
推荐工具
- IDE: VSCode / WebStorm / RustRover
- 浏览器: Chrome / Edge / Safari(最新版)
- 容器: Docker Desktop(用于沙箱化执行和引擎部署)
- API 调试: Postman / curl / HTTPie
项目架构
技术栈
| 层级 | 技术 |
|---|---|
| 桌面端 | Tauri v2 + Rust + React |
| Web 端 | React + TypeScript |
| 核心引擎 | Rust / TypeScript / Python |
| 调度引擎 | TypeScript |
| 引擎适配器 | TypeScript / Python |
| MCP Server | TypeScript |
| 增强引擎 | TypeScript |
| 数据存储 | SQLite + FTS5 + 向量库 |
| AI 网关 | SkyGate(Rust) |
| 容器化 | Docker |
目录结构
agido/
├── apps/ # 应用层
│ ├── desktop/ # 桌面端(Tauri v2)
│ ├── web/ # Web 端(React)
│ └── cli/ # 命令行工具
├── packages/ # 共享包
│ ├── core/ # Agido Native 核心引擎
│ │ ├── dialog/ # L1 对话层
│ │ ├── execution/ # L2 执行层
│ │ ├── memory/ # L3 记忆层
│ │ ├── collaboration/ # L4 协作层
│ │ ├── evolution/ # L5 进化层
│ │ └── perception/ # L6 感知层
│ ├── scheduler/ # 统一调度引擎
│ │ ├── intent/ # 意图识别
│ │ ├── decomposition/ # 任务分解
│ │ ├── routing/ # 引擎路由
│ │ ├── aggregation/ # 结果聚合
│ │ └── context/ # 上下文同步
│ ├── adapters/ # 引擎适配器
│ │ ├── openclaw/ # OpenClaw 适配器
│ │ ├── hermes/ # Hermes Agent 适配器
│ │ ├── openhuman/ # OpenHuman 适配器
│ │ ├── dify/ # Dify 适配器
│ │ ├── coze/ # Coze 适配器
│ │ ├── autogen/ # AutoGen 适配器
│ │ └── crewai/ # CrewAI 适配器
│ ├── mcp-server/ # MCP Server
│ ├── enhanced/ # 增强引擎
│ │ ├── orchestration/ # 智能编排(DAG)
│ │ ├── health/ # 健康感知
│ │ └── knowledge/ # 知识融合
│ └── shared/ # 共享工具
├── server/ # 服务端
│ ├── gateway/ # API 网关
│ └── mcp/ # MCP Server
├── docs/ # 文档
└── scripts/ # 脚本开发规范
代码规范
- 使用 ESLint + Prettier 进行代码格式化
- TypeScript 严格模式启用
- Rust 使用 clippy + rustfmt
- 组件命名使用 PascalCase
- 函数命名使用 camelCase
- 引擎适配器遵循
EngineAdapter接口规范
Git 规范
类型(scope): 简短描述
详细描述(可选)
Footer(可选)类型说明:
feat: 新功能fix: 修复docs: 文档style: 格式refactor: 重构perf: 性能优化test: 测试chore: 构建/工具
示例:
feat(scheduler): 添加负载感知路由策略
- 根据引擎负载智能分发任务
- 支持自定义负载阈值
- 添加负载趋势预测
Closes #123分支管理
main: 主分支,稳定版本develop: 开发分支feature/*: 功能分支hotfix/*: 紧急修复release/*: 发布分支
引擎适配器开发
EngineAdapter 接口
所有引擎适配器必须实现 EngineAdapter 接口:
typescript
interface EngineAdapter {
name: string
version: string
initialize(config: EngineConfig): Promise<void>
destroy(): Promise<void>
execute(task: Task): Promise<TaskResult>
healthCheck(): Promise<HealthStatus>
getCapabilities(): EngineCapabilities
getTools(): MCPTool[]
}示例:创建新引擎适配器
typescript
import { EngineAdapter, Task, TaskResult, HealthStatus, EngineConfig, EngineCapabilities, MCPTool } from '@agido/core'
export class MyEngineAdapter implements EngineAdapter {
name = 'my-engine'
version = '1.0.0'
private config: EngineConfig | null = null
async initialize(config: EngineConfig): Promise<void> {
this.config = config
}
async destroy(): Promise<void> {
this.config = null
}
async execute(task: Task): Promise<TaskResult> {
const startTime = Date.now()
try {
const result = await this.doExecute(task)
return {
success: true,
data: result,
duration: Date.now() - startTime,
engine: this.name
}
} catch (error) {
return {
success: false,
error: error.message,
duration: Date.now() - startTime,
engine: this.name
}
}
}
async healthCheck(): Promise<HealthStatus> {
return {
status: 'healthy',
latency: 0,
errorRate: 0,
resourceUsage: { cpu: 0, memory: 0 }
}
}
getCapabilities(): EngineCapabilities {
return {
dialog: true,
execution: true,
memory: true,
collaboration: false,
evolution: false,
perception: false
}
}
getTools(): MCPTool[] {
return [
{
name: 'my_engine_query',
description: 'Query my engine',
parameters: {
type: 'object',
properties: {
query: { type: 'string', description: 'Query string' }
},
required: ['query']
}
}
]
}
private async doExecute(task: Task): Promise<any> {
// 实现具体执行逻辑
}
}注册适配器
typescript
import { Scheduler } from '@agido/scheduler'
import { MyEngineAdapter } from './my-engine-adapter'
const scheduler = new Scheduler()
scheduler.registerAdapter(new MyEngineAdapter(), {
priority: 5,
capabilities: ['dialog', 'execution'],
fallback: 'agido-native'
})调试技巧
桌面端调试
bash
# 开发模式
pnpm dev:desktop
# 调试 Tauri 主进程
RUST_LOG=debug pnpm dev:desktop
# 调试渲染进程
# 使用 Chrome DevTools (F12)Web 端调试
bash
# 开发模式
pnpm dev:web
# 使用 React DevTools 和 Chrome DevToolsMCP Server 调试
bash
# 启动 MCP Server
pnpm dev:mcp
# 使用 MCP Inspector 测试
npx @modelcontextprotocol/inspector http://localhost:3001引擎健康调试
bash
# 查看所有引擎健康状态
curl http://localhost:3000/api/v1/enhanced/health/engines
# 查看路由建议
curl "http://localhost:3000/api/v1/enhanced/health/routing-suggestion?task=dialog"测试
单元测试
bash
# 运行所有测试
pnpm test
# 运行指定模块测试
pnpm test -- packages/core
# 覆盖率报告
pnpm test:coverageE2E 测试
bash
# 运行 E2E 测试
pnpm test:e2e
# headed 模式
pnpm test:e2e -- --headed引擎集成测试
bash
# 测试所有引擎适配器
pnpm test:engines
# 测试指定引擎
pnpm test:engines -- --engine openclaw性能优化
调度引擎优化
- 路由缓存:频繁路由的任务类型缓存路由结果
- 预热连接:引擎适配器启动时预热连接池
- 批量执行:相同引擎的多个任务批量提交
- 超时控制:每个引擎任务设置合理超时
记忆系统优化
- 索引优化:FTS5 索引 + 向量索引联合查询
- 分层缓存:热记忆内存缓存,冷记忆磁盘存储
- 增量同步:仅同步变更的记忆条目
- 压缩存储:长期记忆自动压缩摘要
MCP Server 优化
- 连接复用:HTTP Keep-Alive + WebSocket 长连接
- 流式响应:DAG 编排结果流式返回
- 并发控制:限制同时执行的 DAG 数量
- 资源隔离:每个 DAG 执行沙箱隔离
部署
Docker 部署
bash
# 构建镜像
docker build -t agido:latest .
# 运行容器
docker run -d -p 3000:3000 -p 3001:3001 agido:latestDocker Compose 部署(含引擎)
bash
# 启动所有服务
docker compose up -d
# 查看状态
docker compose psKubernetes 部署
bash
# 应用配置
kubectl apply -f k8s/
# 查看状态
kubectl get pods -n agido常见问题
Q: 引擎适配器连接超时?
A: 检查:
- 引擎服务是否启动
- 网络连接是否正常
- 防火墙是否放行端口
- 超时配置是否合理
Q: DAG 编排执行失败?
A: 检查:
- 各节点引擎是否健康
- 节点间数据依赖是否正确
- 失败回滚策略是否配置
- 查看执行快照定位问题
Q: 记忆同步冲突?
A: 检查:
- 多引擎是否同时写入同一记忆
- 冲突消解策略是否配置
- 同步频率是否过高