7.0 KiB
Agent Chat Gap Closure Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: 按未完成 Task 顺序补齐 Agent Chat Core 缺口,形成可运行、可测试、可审计的后端链路。
Architecture: 复用已完成的数据层与路由骨架,在 core/agent_chat 补齐编排、成本与多模态能力,并通过 v1/agent_chat/service.py 统一持久化与事件顺序。全流程以 session.id + messages.seq 作为一致性锚点,保证事件输出与落库一致。
Tech Stack: FastAPI, SQLAlchemy, Pydantic, pytest, CrewAI, AG-UI adapter, DashScope SDK, Supabase Storage。
Task 1: 补齐 Spike 结论文档
Files:
- Create:
docs/plans/2026-02-25-agent-chat-crewai-ag-ui-spike-notes.md
Step 1: 写失败校验(文档存在性)
test -f docs/plans/2026-02-25-agent-chat-crewai-ag-ui-spike-notes.md
Step 2: 运行并确认失败
Run: test -f docs/plans/2026-02-25-agent-chat-crewai-ag-ui-spike-notes.md
Expected: non-zero exit code。
Step 3: 写最小文档实现
- CrewAI 版本探测结论
- AG-UI 官方 CrewAI 集成可用性结论
- DashScope FunASR usage 字段策略
- 不可用时的最小兜底映射策略
Step 4: 运行并确认通过
Run: test -f docs/plans/2026-02-25-agent-chat-crewai-ag-ui-spike-notes.md
Expected: zero exit code。
Task 5: 补齐编排与成本追踪
Files:
- Create:
backend/src/core/agent_chat/events.py - Create:
backend/src/core/agent_chat/cost_tracker.py - Create:
backend/src/core/agent_chat/orchestrator.py - Test:
backend/tests/unit/core/agent_chat/test_cost_tracker.py - Test:
backend/tests/unit/core/agent_chat/test_orchestrator_pipeline.py
Step 1: 写失败测试
def test_normalize_usage_and_cost_aggregation():
assert False
def test_orchestrator_runs_three_stages_in_order():
assert False
Step 2: 运行并确认失败
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_cost_tracker.py backend/tests/unit/core/agent_chat/test_orchestrator_pipeline.py -v
Expected: FAIL。
Step 3: 写最小实现
class CostTracker:
def add_usage(self, usage: dict) -> None: ...
def total(self) -> dict: ...
class AgentChatOrchestrator:
async def run(self, command):
# intent -> execution -> organization
...
Step 4: 运行并确认通过
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_cost_tracker.py backend/tests/unit/core/agent_chat/test_orchestrator_pipeline.py -v
Expected: PASS。
Task 6: 补齐 AG-UI 适配层缺口
Files:
- Create:
backend/src/core/agent_chat/agui_adapter.py - Modify:
backend/src/core/agent_chat/event_bridge.py - Modify:
backend/src/v1/agent_chat/service.py - Test:
backend/tests/unit/core/agent_chat/test_agui_adapter.py - Test:
backend/tests/integration/test_agent_chat_event_persistence.py
Step 1: 写失败测试
def test_agui_adapter_maps_internal_events_to_protocol_events():
assert False
Step 2: 运行并确认失败
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_agui_adapter.py backend/tests/integration/test_agent_chat_event_persistence.py -v
Expected: FAIL。
Step 3: 写最小实现
class AguiAdapter:
def to_command(self, request): ...
def to_protocol_event(self, event): ...
Step 4: 运行并确认通过
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_agui_adapter.py backend/tests/integration/test_agent_chat_event_persistence.py -v
Expected: PASS。
Task 7: 补齐多模态输入编排
Files:
- Create:
backend/src/core/agent_chat/multimodal.py - Modify:
backend/src/core/agent_chat/storage_adapter.py - Modify:
backend/src/core/agent_chat/tools/asr_fun_asr.py - Test:
backend/tests/unit/core/agent_chat/test_multimodal.py
Step 1: 写失败测试
def test_multimodal_validates_and_builds_attachment_context():
assert False
Step 2: 运行并确认失败
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_multimodal.py -v
Expected: FAIL。
Step 3: 写最小实现
class MultimodalProcessor:
async def build_context(self, attachments): ...
Step 4: 运行并确认通过
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_multimodal.py backend/tests/unit/core/agent_chat/test_storage_adapter.py backend/tests/unit/core/agent_chat/test_asr_fun_asr_tool.py -v
Expected: PASS。
Task 8: 补齐会话审计与 recent 规则
Files:
- Modify:
backend/src/v1/agent_chat/service.py - Modify:
backend/src/v1/agent_chat/router.py - Test:
backend/tests/unit/core/agent_chat/test_session_title_strategy.py - Test:
backend/tests/integration/test_agent_chat_session_recent_selection.py - Test:
backend/tests/integration/test_agent_chat_session_persistence.py
Step 1: 写失败测试
def test_title_generated_from_first_user_message():
assert False
def test_recent_session_selected_by_last_activity_at_desc():
assert False
Step 2: 运行并确认失败
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_session_title_strategy.py backend/tests/integration/test_agent_chat_session_recent_selection.py backend/tests/integration/test_agent_chat_session_persistence.py -v
Expected: FAIL。
Step 3: 写最小实现
def build_session_title(first_message: str) -> str: ...
Step 4: 运行并确认通过
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat/test_session_title_strategy.py backend/tests/integration/test_agent_chat_session_recent_selection.py backend/tests/integration/test_agent_chat_session_persistence.py -v
Expected: PASS。
Task 9: 补齐 E2E 与运行文档闭环
Files:
- Create:
backend/tests/e2e/test_agent_chat_flow.py - Create:
backend/tests/e2e/test_agent_chat_recent_session_home.py - Modify:
docs/runtime/runtime-runbook.md
Step 1: 写失败 E2E 用例
def test_agent_chat_text_image_audio_document_flow():
assert False
Step 2: 运行并确认失败
Run: PYTHONPATH=backend/src uv run pytest backend/tests/e2e/test_agent_chat_flow.py -v
Expected: FAIL。
Step 3: 写最小实现与文档补充
- bootstrap gate 执行顺序
- agent_chat 验证命令
Step 4: 全量验证
Run: make runtime-bootstrap-gate
Expected: bootstrap 通过。
Run: PYTHONPATH=backend/src uv run pytest backend/tests/unit/core/agent_chat -v
Expected: PASS。
Run: PYTHONPATH=backend/src uv run pytest backend/tests/integration -k agent_chat -v
Expected: PASS。
Run: PYTHONPATH=backend/src uv run pytest backend/tests/e2e/test_agent_chat_flow.py backend/tests/e2e/test_agent_chat_recent_session_home.py -v
Expected: PASS。
Run: PYTHONPATH=backend/src uv run pip check
Expected: no broken requirements。