.agents/design/core/ai/agent-loop/requirements.md
状态:收口版
日期:2026-05-11
AgentV2 早期方案包含多层 agent、stepCall、continue plan、独立 stop verifier 等概念,导致上下文拼接、运行详情、流式输出、前端恢复和测试边界都比较复杂。
本轮目标是把 agent loop 收敛为一条可复用的主循环:
packages/service/core/ai/llm/agentLoop;stepCall UI。continue plan。update_plan 维护计划,并由本地 stop gate 保证计划完成后才能 final。ask_agent 在必要时追问用户,用户回答后继续原上下文,而不是重新生成一份独立计划。update_plan 记录证据或结果,才能最终回答。ask_agent,暂停当前 loop 并保存 pending context。stepCall 字段。plan_agent tool。Running/Pending 英文状态标签。update_plan 完成后只更新状态、证据和必要内容,不额外插入 step summary 气泡。answer_delta。| 编号 | 场景 | 验收点 | 状态 |
|---|---|---|---|
| A1 | 基础直接回答 | 无 plan、无 tool 时直接流式输出,刷新后 answer 恢复 | 已通过 |
| A2 | 显式计划模式 | 用户要求 plan 时必须先 update_plan(set_plan),不能直接 final | 已通过 |
| A3 | 复杂任务 plan | 生成 plan card,steps 非空,可持久化恢复 | 已通过 |
| A4 | plan 批量更新 | 一次 update_plan 可提交多个 step update | 已通过 |
| A5 | stop gate 未完成拦截 | pending/in_progress/needsReplan/blocked 无 blocker 时不能 final | 已通过 |
| A6 | runtime tool 后 plan 记录 | runtime tool 后必须再 update_plan 记录结果才能 final | 已通过 |
| A7 | ask_agent 追问 | 缺少强阻塞输入时返回 interactive ask | 已通过 |
| A8 | ask_agent resume | 用户回答后沿 pendingMainContext 继续,不重建独立 planner | 已通过 |
| A9 | ask 前 runtime tool 状态 | resume 后仍要求把 ask 前 runtime tool 结果写回 plan | 已通过 |
| A10 | 无效 ask_agent 参数 | 不返回空 answer,模型可继续修正 | 已通过 |
| A11 | replace_plan | 保留当前 planId,不重复生成 plan 卡;保留已完成证据 | 已通过 |
| A12 | runtime 工具冲突 | runtime tool 同名 ask_agent/update_plan 会被过滤 | 已通过 |
| A13 | SSE plan loading | update_plan 开始前出现 plan skeleton,成功后替换为 plan card | 已通过 |
| A14 | SSE answer 流式 | stop gate 拒绝的草稿和最终 answer 都按过程实时透传,刷新后只恢复最终 answer | 已通过 |
| A15 | responseNode | 主链路 LLM request 写入 nodeResponse,包含 tokens 和 requestId | 已通过 |
| A16 | records 恢复 | plan、toolcall、thinking、answer 刷新后可恢复 | 已通过 |
| A17 | 旧 stepCall | 新链路不写旧 stepCall 字段,前端不依赖旧 UI | 已通过 |
| A18 | App request 基础 | 前端 request 单测仍通过 | 已通过 |
| 编号 | 场景 | 说明 |
|---|---|---|
| R1 | dataset query extension requestId | 仍需确认 query extension requestId 透传到运行详情的完整链路 |
| R2 | Pro 计费 | 本地 OSS 无法覆盖真实扣费路径,需要在 Pro 环境专项验收 |
| R3 | 外部 OpenAI account | 需要确认内部 LLM 调用也走外部 key |
| R4 | 无效 update_plan UI 收尾 | plan skeleton 失败态仍可进一步优化 |
corepack pnpm --filter @fastgpt/service exec vitest run -c vitest.config.ts test/core/ai/llm/agentLoop test/core/workflow/dispatch/ai/agent/adapter
corepack pnpm --filter @fastgpt/global exec vitest run -c vitest.config.ts test/core/chat/adapt.test.ts test/core/chat/type.test.ts test/core/workflow/runtime/utils.test.ts
corepack pnpm --filter @fastgpt/app exec vitest run -c vitest.config.ts test/web/common/api/request.test.ts
git diff --check