Erpilot
开发中只读操作自动执行,低风险操作批量确认,资金相关操作单笔审批——动账动货的事,必须请示东家。
会请示的 ERP 智能体:agent 应用开发求职作品集项目。运行在 mini-ERP(商品 / 库存 / 订单)上,FastMCP 工具层 + 分级人工审批(HITL)+ 全程评测驱动。
项目概览
- 问题
- 大模型 API 只会“发消息、收消息”,业务系统要的是可控执行:工具调用、人工审批、可评测、可回放。
- 对象
- agent 应用开发岗位的求职作品集;演示场景是 mini-ERP(商品 / 库存 / 订单)的掌柜助手。
- 范围
- 单主管 agent + 15~20 个 MCP 工具、分级 HITL 审批、评测体系、React 前端;多 agent 与 RAG 延后决策。
产品体验
对话流程
- 用一句业务问题提问(订单 / 库存 / 报价)
- agent 拆解为多步工具调用,文本流式输出
- 工具时间线逐个点亮,并行动作如实呈现
- 答复收口,展示 token 与成本
过程回放
- 每次运行 trace 自动落盘 traces/*.jsonl
- 上游故障与异常一并留痕(run_error)
- erpilot replay 把 trace 还原成可读对话
核心能力
手写 agent loop
流式事件模型 + 工具循环 + 防护(max_steps / 超时 / 错误回填)+ 上下文压缩,不依赖框架,44 项单测覆盖。
并行工具调用
同一轮多个工具并发执行:完成序转发、调用序回填,前端时间线靠 call_id 精确配对。
可回放 trace
JSONL 六类记录逐行落盘,异常也留痕;erpilot replay 把 trace 还原成可读对话。
三条入口一个协议
CLI(rich 渲染)、FastAPI SSE、React 流式页挂同一条事件流,前后端类型镜像同步维护。
系统实现
Python 3.12 承载全部 agent 逻辑:agent_core 手写事件驱动的 agent loop(M6 起以 LangGraph 重构编排),FastMCP 把 ERP 能力暴露为工具,FastAPI + SSE 对接前端;React + TypeScript 提供流式对话、工具时间线与审批卡片;评测 runner 独立成包,PostgreSQL + pgvector 与 Langfuse 按里程碑接入。
验证与结果
- 2026-09-29:M1 第 1–3 周真实链路验收通过——单工具任务 2 步收口,多步任务 3 步完成(第 2 轮模型自发并行调用两工具),成本约 ¥0.0003。
- 44 项单元测试走传输层 mock,不消耗 token;ruff / pytest / tsc + vite build 进 CI 门禁。
- trace 覆盖成功与异常路径:上游端点故障(APIError / 502 upstream_error)均被 run_error 完整留痕。
开发日志
M1 收口:本地 trace + 三条入口 + 首篇文章发布
trace 六类记录逐行落盘(run_start / step_start / step_end / tool_call / run_end / run_error),异常留痕后原样抛出;typer + rich CLI 支持 chat 与 replay;FastAPI SSE 链路与 React 流式页(fetch + ReadableStream 手解 SSE)打通,前后端协议镜像同步;ADR-0002 手写 loop 优先、ADR-0003 本地 JSONL trace 先行。测试增至 44 项。首篇系列文章《手写 Agent Loop》在 Vie 发布,并沉淀撰写规则:禁虚构经历与数据、客观口吻、代码片段与仓库逐行 diff。
PythonFastAPIReactM1 第 3 周:并行工具调用 + 错误回填策略 v1 + 上下文压缩
同一轮多个 tool_calls 用 asyncio.as_completed 并发执行(完成序转发、调用序回填);工具报错回填为结构化 JSON,瞬态错误按重试策略自动重试、确定性错误立即回填让模型改道;上下文压缩 v1:超长截断 + 整轮丢弃,裁剪边界不落在工具交换中间。3 步真实链路验收通过,第 2 轮模型自发并行调用两工具(≈¥0.0003)。
PythonasyncioM1 第 2 周:工具调用循环 + 防护 + 结构化输出
Tool 协议:Pydantic 参数模型自动生成 OpenAI tools schema(递归剥 title);AgentLoop 主循环:schema 注入 → 解析 tool_calls → 校验 → 执行 → 回填 → 再生成;max_steps 防死循环 + 单工具超时;结构化输出走提示词注入 schema + Pydantic 强校验。单工具任务 2 步真实链路验收通过。
PythonPydanticM1 第 1 周:LLM client 流式 + usage / 成本计量
AsyncOpenAI 流式补全,事件模型保证恰好以一个终止事件结束;GLM-5.3 Flash 价目表成本估算;传输层 mock(httpx2.MockTransport)11 项单测不烧真实 token。
PythonOpenAI SDK项目启动:uv workspace 脚手架与选型定案
四包骨架(agent_core / mcp_erp / erp_store / evals)+ CI 就绪;ADR-0001 定技术栈:Python 3.12 + FastAPI + FastMCP + PostgreSQL + LiteLLM(GLM-5.3 Flash)+ React,对齐行业真实 agent 栈。
uvFastAPIPostgreSQL