feat(agent,report): 会话持久化与画像注入、报告反馈与预约留资——PM/开发双Agent迭代1-3
CI / lint / typecheck / import-linter / tests / secrets (push) Canceled after 0s

- agent: ag_conversation/ag_message 表(迁移0007),上下文组装注入最近报告画像摘要
  (report.profile.latest_profile_summary 经 apps 层闭包注入,同层不互调),历史带最近
  AGENT_HISTORY_TURNS=10 轮;POST/GET /agent/conversations 与消息历史接口
- agent 修复:ChatRequest.conversation_id 改 str(雪花ID超2^53,JS Number丢精度);
  _build_context 挪进 reserve commit 后同一 try,异常走 refund 兜底
- report: rp_feedback(维度反馈 upsert,认同率/修正率 SQL 可算,T-P3-21 最小版——
  L1 记忆未建,不回写结论)+ rp_reservation(预约留资幂等,T-P3-22,预约率口径
  行数/full_report.card_view 去重曝光,门槛≥8%),迁移0008
- 测试:全量 606 passed;ruff/mypy/lint-imports 全绿;E2E 真实 deepseek-v4-flash 验证
  画像注入与历史携带
This commit is contained in:
xsl
2026-09-11 21:50:58 +08:00
parent 00ef56b08b
commit 7bcbb8d40b
25 changed files with 1860 additions and 25 deletions
+47
View File
@@ -7,6 +7,7 @@ Wire 响应统一走 ok() 信封(架构文档 §9.2),这里的模型只描
from __future__ import annotations
from datetime import datetime
from typing import Literal
from pydantic import BaseModel, Field
@@ -57,3 +58,49 @@ class ReportItem(BaseModel):
)
created_at: datetime
completed_at: datetime | None
# ---------------------------------------------------------------------------
# T-P3-21:维度级结论反馈
# ---------------------------------------------------------------------------
FeedbackVerdict = Literal["accurate", "inaccurate"]
class FeedbackCreateRequest(BaseModel):
dimension_key: str = Field(
min_length=1, max_length=64, description="报告 result.diagnosis.dimensions 的 key"
)
verdict: FeedbackVerdict = Field(description="准(accurate)/ 不准(inaccurate)")
correction: str | None = Field(
default=None, max_length=200, description="verdict=inaccurate 时的可选修正,≤200 字"
)
class FeedbackUpsertResponse(BaseModel):
dimension_key: str
verdict: str
updated: bool = Field(description="true=同维度已有反馈被覆盖更新;false=新建")
class FeedbackItem(BaseModel):
dimension_key: str
verdict: str
correction: str | None
created_at: datetime
# ---------------------------------------------------------------------------
# T-P3-22:预约留资(topic 预留通用性,首期 full_report)
# ---------------------------------------------------------------------------
class ReservationCreateRequest(BaseModel):
topic: str = Field(min_length=1, max_length=32)
class ReservationResponse(BaseModel):
topic: str
created: bool = Field(description="false=已存在(幂等命中,HTTP 仍 200)")
created_at: datetime
class ReservationListResponse(BaseModel):
topics: list[str]