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