feat: 回忆录证据血缘与内部评测可追溯,顺带对齐本地评测台与 CI

数据库与模型:新增多版迁移(章节证据快照、对话血缘、记忆事实/时间线 lineage 等),把「成稿 ↔ 对话/记忆」的溯源信息落到表结构里。
业务链路:会话与 WS、回忆录/故事流水线、记忆写入与 enrichment 等跟着接上线索与快照;新增章节证据快照与评测侧 EvalTraceService 等模块,方便组评审用的证据包。
内部评测:自动化 run 与手工 memoir 评审共用可追溯证据;rubric/ judge 相关脚本与文档有配套调整。
app-eval-web:Memoir/实验详情里能展开看证据摘要与 evidence_trace(含对话轮次 id);Vite 代理与 development.sh 注入的 API 端口与当前默认内部评测端口一致,避免改端口后页面连错服务。
工程杂项:GitHub Actions / 仓库说明有更新;各适配器与支付/配额/plan 等多处为小改动或跟随主改动的收尾;新增/扩充了?
This commit is contained in:
Kevin
2026-04-08 15:37:09 +08:00
parent 6772e1269c
commit 309a051038
109 changed files with 4125 additions and 858 deletions

View File

@@ -0,0 +1,65 @@
"""可追溯评测Chapter/Story 证据闭包模型strict / partial / fallback"""
from __future__ import annotations
from typing import Literal
from pydantic import BaseModel, Field
LineageTier = Literal["strict", "partial", "fallback"]
class EvidenceFormatMeta(BaseModel):
"""Prompt 裁剪与可审计元数据formatter 产出)。"""
truncated: bool = False
dropped_sections: list[str] = Field(default_factory=list)
included_token_estimate: int = 0
transcript_chars_included: int = 0
structured_evidence_chars_included: int = 0
class ChapterEvidenceBundle(BaseModel):
"""章节评测证据闭包Phase Asource_segments 为主链,标记 partial"""
user_id: str
chapter_id: str
segment_ids: list[str] = Field(default_factory=list)
conversation_ids: list[str] = Field(default_factory=list)
memory_chunk_ids: list[str] = Field(default_factory=list)
memory_fact_ids: list[str] = Field(default_factory=list)
timeline_event_ids: list[str] = Field(default_factory=list)
summary_ids: list[str] = Field(default_factory=list)
lineage_tier: LineageTier
notes: list[str] = Field(default_factory=list)
augmented_with_chapter_context: bool = False
# DialogueLineage.model_dump() — user/assistant message ids (multi-turn)
dialogue_lineage: dict | None = None
class StoryEvidenceBundle(BaseModel):
"""故事评测证据闭包StoryEvidenceLink 优先,缺失则回退 chapter source_segments。"""
user_id: str
story_id: str
segment_ids: list[str] = Field(default_factory=list)
conversation_ids: list[str] = Field(default_factory=list)
memory_chunk_ids: list[str] = Field(default_factory=list)
memory_fact_ids: list[str] = Field(default_factory=list)
timeline_event_ids: list[str] = Field(default_factory=list)
summary_ids: list[str] = Field(default_factory=list)
lineage_tier: LineageTier
notes: list[str] = Field(default_factory=list)
augmented_with_chapter_context: bool = False
story_link_evidence_count: int = 0
fallback_chapter_ids: list[str] = Field(default_factory=list)
dialogue_lineage: dict | None = None
class FormattedMemoirEvidence(BaseModel):
"""供 `EvalJudgeService` 组 prompt 的格式化结果 + 汇总说明。"""
source_transcript: str = ""
structured_evidence: str = ""
format_meta: EvidenceFormatMeta = Field(default_factory=EvidenceFormatMeta)
evidence_summary: str = ""