fischer-agentkit/AGENTS.md

15 KiB
Raw Blame History

Fischer AgentKit — 项目上下文

规则

  • Python >= 3.11,必须使用类型注解,所有数据模型使用 pydantic>=2.0
  • 使用 Ruff 进行 lint 和格式化:ruff check src/ && ruff format src/(目标 py311行宽 100
  • 测试:pytestasyncio_mode=auto标记integrationredispostgres
  • 禁止使用 any 类型 — 使用合适的 Pydantic 模型或 Unknown
  • API Key 比较必须使用 hmac.compare_digest(恒定时间比较)
  • 专家名称使用 _EXPERT_NAME_RE = re.compile(r"^[a-zA-Z0-9_-]{1,64}$") 校验
  • HandoffTransport 队列有界(maxsize=1024),关闭使用 sentinel 模式
  • 前端Vue 3 + TypeScript + Ant Design VuePinia stores禁止 require() 调用
  • 异步生成器安全:在 async def 中禁止在第一个 yield 之前使用 return — 改用 return; yield 模式(见 .trae/rules/project_rules.md
  • 所有回复必须是中文

技术栈

  • 后端Python 3.11+、FastAPI、Uvicorn、Pydantic v2、SQLAlchemy 2async
  • 前端Vue 3、TypeScript、Vite 5、Ant Design Vue 4、Pinia、Vue Router 4
  • 桌面端Tauri 2.xRust 外壳 + Python sidecar
  • 基础设施Redis总线/缓存/状态、PostgreSQL + pgvector情景记忆
  • CLITyper + Rich
  • 精确版本:见 pyproject.tomlPythonpackage.jsonNode

命令

# 后端
pip install -e ".[dev]"                # 安装开发依赖
agentkit gui --port 8002               # Web GUI前端 + API
agentkit serve --port 8001             # 仅 API 服务
agentkit chat                          # CLI 交互式聊天
agentkit init                          # 生成 agentkit.yaml
agentkit version / doctor / usage      # 工具命令
agentkit task submit/status/list/cancel # 任务管理
agentkit skill list/load/info          # 技能管理
agentkit pair --name X                 # 为外部系统生成 API Key
pytest                                 # 运行所有测试
pytest -m "not integration"            # 仅单元测试
ruff check src/ && ruff format src/    # Lint + 格式化

# 前端
cd src/agentkit/server/frontend
npm install                            # 安装依赖
npm run dev                            # Vite 开发服务器(代理 /api -> :8000
npm run build:frontend                 # 生产构建 -> ../static
npm run typecheck                      # TypeScript 检查

# 桌面端
cd src/agentkit/server/frontend
npm run tauri dev                      # Tauri 开发模式
npm run tauri build                    # Tauri 生产构建

# Docker
docker-compose up -d                   # AgentKit + Redis + PostgreSQL

架构

请求流程

用户输入
  ├─ @board 前缀 -> BoardRouter (experts/board_router.py) -> BoardOrchestrator多轮讨论
  ├─ @team 前缀  -> ExpertTeamRouter (experts/router.py) -> TeamOrchestrator流水线协作
  └─ 其他         -> RequestPreprocessor (chat/request_preprocessor.py)
       Layer 0: @skill:xxx 前缀 -> 显式技能选择SKILL_REACT 或技能配置的模式)
       Layer 1: 琐碎输入正则(~0ms0 tokens-> DIRECT_CHAT
                (问候、身份、事实问答、数学、翻译;由 _TOOL_CONTEXT_RE 守护)
       默认: -> REACTLLM 在 agent 循环中自主决定工具使用)
  -> ExecutionMode: DIRECT_CHAT / REACT / SKILL_REACT / REWOO / REFLEXION / PLAN_EXEC / TEAM_COLLAB
     chat handler 当前支持 DIRECT_CHAT、REACT、SKILL_REACT其余抛出 "not yet supported"

注意:旧的 3 层 CostAwareRouter(含 RegexRules / HeuristicClassifier / SemanticRouter / Vickrey Auction)已被 RequestPreprocessor 替换。IntentRouterrouter/intent.py)存在但未接入 chat 流程。AuctionHouseVickrey 拍卖)位于 marketplace/auction.py(属于 marketplace 子系统,非路由)。

Agent 层级

BaseAgent (core/base.py) — 抽象基类execute() 是 final 方法
  +-- ConfigDrivenAgent (core/config_driven.py) — YAML 驱动3 种任务模式
  +-- ReActEngine (core/react.py) — Think->Act->Observe
  +-- ReflexionAgent (core/reflexion.py) — 反思驱动
  +-- ReWOOAgent (core/rewoo.py) — 无观察规划
  +-- StandaloneAgent (core/standalone.py) — 独立运行器

专家团队模式(流水线)

ExpertConfig继承 AgentConfig-> Expert通过 AgentPool 包装 ConfigDrivenAgent
ExpertTeam管理专家、共享工作区、团队状态FORMING→PLANNING→EXECUTING→SYNTHESIZING→COMPLETED
TeamOrchestrator流水线执行 — Lead 将任务分解为带 depends_on 的 PlanPhase拓扑排序并行分层
PlanPhaseid、name、assigned_expert、task_description、depends_on、statusPENDING/RUNNING/COMPLETED/FAILED
TeamPlan带依赖的阶段topological_sort() 返回执行层Kahn 算法)
ExpertTeamRouter@team 前缀路由、@team:dev_team 模板展开、名称校验、MAX_EXPERTS=10
HandoffTransportInProcessasyncio.Queue+ Redis Pub/Sub — 仅用于事件广播

流水线流程

  1. @team 前缀触发团队模式(或 @team:dev_team 用模板,@team:expert1,expert2 显式指定)
  2. ExpertTeam.create_team() 将状态置为 PLANNING
  3. Lead Expert 通过 LLM 将任务分解为阶段(失败时回退为单阶段)
  4. topological_sort() 将阶段排成层(同层并行,层间串行)
  5. 每个阶段通过 AgentPool.create_agent 创建隔离的 ConfigDrivenAgent上下文隔离KTD3
  6. 阶段输出通过 SharedWorkspace 传递({plan_id}/phase/{phase_id}/output
  7. Lead 综合结果BEST 策略)
  8. 所有阶段都失败时:回退到单 agent 模式

事件序列team_formedplan_updatephase_startedexpert_stepexpert_resultphase_completedteam_synthesisteam_dissolved

团队模板configs/experts/dev_team.yamlbound_skills 字段存储成员列表tech_lead、frontend_engineer、backend_engineer、qa_engineer、code_reviewer

生命周期FORMING -> PLANNING -> EXECUTING -> SYNTHESIZING -> COMPLETED -> DISSOLVED 失败时:回退到单 agent 模式lead 或第一个活跃专家)。

模块映射

层级 模块 用途
API server/cli/ FastAPI 路由 + Typer CLI
认证 server/auth/ JWT + RBAC + 终端安全6 层白名单)
服务 core/chat/skills/experts/ Agent 引擎、路由、技能、专家团队
数据 memory/session/bus/ 持久化、会话、消息
工具 llm/tools/evolution/quality/mcp/ LLM 网关、工具、自进化、质量、MCP
客户端 client/ ConfigSync、RemoteLLMProvider 集成

关键子系统

  • LLM 网关llm/):基于 LiteLLM 统一适配层U15 迁移),保留原 6 个 provider 命名作为别名OpenAI/Anthropic/Gemini/Doubao/Wenxin/Yuanbao支持任意 OpenAI 兼容 API如 DashScope/DeepSeek含 fallback、语义缓存、用量追踪、RemoteLLMProviderclient→server 代理,带 401 刷新重试)
  • 记忆memory/4 层SOUL/USER/MEMORY/DAILY、WorkingMemoryRedis、EpisodicMemoryPG+pgvector、SemanticMemoryHTTP RAG
  • 进化evolution/Reflector、PromptOptimizer遗传算法、PitfallDetector、ABTester
  • 工具tools/21 个内置 + MCP 扩展组合SequentialChain/ParallelFanOut/DynamicSelector
  • 流水线orchestrator/PipelineEngine、SagaOrchestrator、DynamicPipeline、HandoffManager
  • 总线bus/MemoryBus进程内、RedisBus分布式
  • 认证server/auth/JWTaccess 15min + refresh 7dHS256、API Key恒定时间比较、3 级 RBACmember/operator/admin + 权限位、6 层终端安全blocklist→shell-ops→builtin→global→user→session→danger、bcrypt 密码哈希rounds=12

服务端路由28 个模块)

前缀 模块 用途
/api/v1/agents agents.py Agent CRUD
/api/v1/tasks tasks.py 任务提交/查询/取消
/api/v1/skills skills.py 技能注册/列表
/api/v1/chat chat.py Chat REST + WebSocket
/api/v1/ws ws.py WebSocket 通道
/api/v1/llm llm.py LLM 用量
/api/v1/llm/chat llm_gateway.py LLM 网关代理JWT 认证SSE 流式)
/api/v1/health health.py 健康检查
/api/v1/metrics metrics.py 指标
/api/v1/evolution evolution.py + evolution_dashboard.py 自进化 API
/api/v1/memory memory.py 记忆管理
/api/v1/portal portal.py Portal
/api/v1/kb kb_management.py 知识库
/api/v1/skill-mgmt skill_management.py 技能管理
/api/v1/workflows workflows.py 工作流
/api/v1/terminal terminal.py 本地终端client sidecar PTY
/api/v1/terminal/server terminal_server.py 服务端终端server PTY + 管理员审批)
/api/v1/terminal terminal_whitelist.py 白名单/黑名单/审计日志管理
/api/v1/settings settings.py 设置
/api/v1/auth auth.py 登录/刷新/登出/me
/api/v1/system system.py 系统资源(需 SYSTEM_CONFIG 权限)
/api/v1/config config_sync.py 配置版本 + 同步(轮询)
/api/v1/bitable bitable.py 多维表格 companion 服务
/api/v1/calendar calendar.py 日历服务(事件/提醒/同步)
/api/v1/documents documents.py 文档管理
/api/v1/admin admin.py 管理员操作
/api/v1/experts experts.py 专家团队管理
/api/v1/mcp mcp_publish.py MCP 发布

WebSocket Chat 协议

Client -> Servermessagereplyconfirmation_replycancelping Server -> Clientconnectedtokenthinkingstepfinal_answerskill_matchconfirmation_requestconfirmation_resultask_humanerrorpong 专家团队事件:

  • 生命周期:team_formedplan_updatephase_startedphase_completedphase_failedteam_dissolved
  • 专家执行(流式):expert_stepthinking/tool_call/tool_result 步骤payload 携带 expert_id/expert_name/expert_color/content/step)、expert_result_chunktoken 增量)、expert_result_chunk_reset(重试前清空)、expert_result终结status=completed|error
  • 综合(流式):team_synthesis_chunk(增量 chunk携带 synthesis_id)、team_synthesis(终结,携带 synthesis_id + status=completed|error|cancelled
  • PLAN_EXEC (U4)phase_changedphase_violation

synthesis_id 去重契约:后端在 team_synthesis_chunkteam_synthesis 事件中注入稳定标识 {plan_id}:synthesis,前端用它精确匹配 streaming milestone避免重试/并发时孤儿 milestone。

execute_stream() 取消契约ConfigDrivenAgent.execute_stream() 注册 CancellationToken_active_tokens(与 BaseAgent.execute() 一致),使 cancel_task() 能协作式取消流式任务。

前端页面

  • /agent/chat — 专家团队聊天视图
  • /agent/code — 代码/工作流
  • /agent/monitor — 进化看板
  • /computer-use — 桌面控制
  • /login — 登录页JWT 认证)
  • 终端面板 — 本地 + 服务端终端,含白名单管理器

配置优先级

CLI 参数 > agentkit.yaml > 环境变量(${VAR:-default}> .env > 硬编码默认值

配置查找:--config 路径 > ./agentkit.yaml > ~/.agentkit/agentkit.yaml三个路径都不存在时使用硬编码默认值CLI 仍可启动)

约定

  • 技能配置:configs/skills/*.yaml16 个预设,统一为 SkillConfig
  • 技能分类:agent_template执行引擎react/direct/rewoo/reflexion/plan_exec/goal_drivenvs business_skill(领域技能)。通过 server/routes/skill_management.py 中的 _ENGINE_TEMPLATE_NAMES 分类。前端按 category 字段分组 — SkillsView 双栏布局,SkillCard/SkillsTab 显示类型标签(引擎/技能)和基于分类的图标
  • LLM 配置:agentkit.yaml llm 段(与服务端配置统一)
  • 流水线配置:configs/pipelines/*.yaml
  • 专家模板:configs/experts/*.yaml15 个模板 — 5 编程专家 + 9 商业/思想领袖 + 1 团队模板 dev_team通过 ExpertTemplateRegistry 注册
  • 团队模板:bound_skills 字段存储成员列表(如 dev_team.yaml 列出 tech_lead、frontend_engineer、backend_engineer、qa_engineer、code_reviewer
  • 所有 Pydantic 模型使用 model_config = ConfigDict(...) 而非 class Config
  • 测试文件:tests/unit/tests/integration/
  • 前端 storesPinia每个领域一个chat、team、settings
  • 前端组件:src/agentkit/server/frontend/src/components/
  • 知识库:docs/solutions/ — 已记录的问题解决方案bug 修复、最佳实践、架构模式按类别组织YAML frontmatter 可搜索(moduletagsproblem_type)。在已记录的领域内实现或调试时相关。
  • 领域词汇:CONCEPTS.md — 项目共享领域词汇表(实体、命名流程、状态概念),在熟悉代码库或讨论领域概念时相关。

边界

  • 未经明确请求不得修改 pyproject.toml 版本
  • 禁止直接推送到 main — 使用 feature 分支
  • 集成测试需要 DockerRedis + PostgreSQL
  • 桌面端构建需要 Rust 工具链 + PyInstaller