Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,9 +224,9 @@ Scheduler 的独立单工作线程执行 Maintenance,不占学习、模型探
```mermaid
flowchart LR
A[有效自我认知记忆与当前手写条目] --> B[确定性选材、依据与出处快照]
B --> C[persona_generate v21]
B --> C[persona_generate v23]
C --> W[独立手写审查:仅许可删除]
W --> D[确定性预筛与分批事实检查 v34]
W --> D[确定性预筛与分批事实检查 v36]
D --> R{逐句检查}
R -->|有问题| S[确定性选择完整绑定记忆或删句]
S --> T[复查替换句;事实通过后独立评程度]
Expand All @@ -244,7 +244,7 @@ flowchart LR

`admin.py` 的路由 lifespan 在服务 Store/Gateway 建立后创建 `PersonaJobs`,退出时在线程中等待执行器关闭,然后才关闭底层资源。任务先在短写事务核对当前版本、排除已有 queued/running 任务、记录请求和冻结设置,再提交单线程执行器。HTTP 请求不等待模型。`persona_attempts` 持久保存状态、材料、输出及结果;读取接口只投影安全的任务元数据,生成输出就绪后显示 checking。服务启动把未完成任务记为 interrupted 失败,不自动重试。数据层同步生成也走同一任务准入,避免与管理请求并行生成。

现行 `PROMPT_VERSIONS` 为生成 `persona_generate_v21`、检查/复查 `persona_check_v34`;独立程度与手写审查分别使用 `DEGREE_PROMPT_VERSION=persona_degree_v1`、`HANDWRITTEN_PROMPT_VERSION=persona_handwritten_v1`。程度判定计入当前初检或复查,手写审查计入初检,均不另建用途预算。早期生成 v10、检查 v14、专用修复 v9 及 `persona_sentence_repair` 是历史方案,保留的旧提示词与原始输出不代表当前调用路径;证据笔记也不作为独立检查证据。生成通常提炼 3—6 个自动句,非硬截断上限,不输出 `evidence_note`,全部实际生成句仍接受检查。
现行 `PROMPT_VERSIONS` 为生成 `persona_generate_v23`、检查/复查 `persona_check_v36`;独立程度与手写审查分别使用 `DEGREE_PROMPT_VERSION=persona_degree_v1`、`HANDWRITTEN_PROMPT_VERSION=persona_handwritten_v2`。程度判定计入当前初检或复查,手写审查计入初检,均不另建用途预算。早期生成 v10、检查 v14、专用修复 v9 及 `persona_sentence_repair` 是历史方案,保留的旧提示词与原始输出不代表当前调用路径;证据笔记也不作为独立检查证据。生成通常提炼 3—6 个自动句,非硬截断上限,不输出 `evidence_note`,全部实际生成句仍接受检查。

事实与全文比较已经分离:所有初检/复查事实批均由 `_fact_payload` 构造,`task=check_facts_and_rules`,移除 `previous` 与 `candidate_text`,首批也不接收旧稿或完整比较稿。逐句 `evidence_refs` 绑定共享的 `evidence_by_ref` 去重池,只含本句当前冻结的依据;模板仅附对应原句核对设定口吻,不重复传整份旧背景。来源原话与归属供事实证明;有来源摘录时,`current_revision_text` 只提供当前范围及更正约束,不能补证原话没有的动作或完成状态。事实通过后,以独立 `task=degree_only` 比较上一当前版 `previous` 与组装稿 `candidate_text`,使用程度 v1,不重新判断事实;事实批中的幅度占位值不用于发布。存在事实拒绝时先修复/删句,再针对最终组装稿判程度;复查后仍删句时按后述规则保守覆盖。

Expand All @@ -254,11 +254,17 @@ flowchart LR

`_bound_source_issues` 只读取本句对应 ID/修订的证据:全为游戏入口时要求游戏/联机限定,原话有明确现实/线下范围才可保留同一范围,不据入口猜测世界归属。肯定的“……完/完成”结果断言(包括无“了”的写法)需本句原话中同一谓词的完成措辞,其他分句的否定或偏好词不能豁免,摘要不能覆盖原话;没有消息摘录的既有记忆才回退正文。按分词边界排除“完整/完全/完善”,能力、假装与比较否定范围不按已完成结果拦截。这些是必要表面条件,不是人物、完成状态、否定或语义蕴涵的证明。

确定程度和限定属于主张本身:生成与检查提示词要求保留不确定语气、条件、频率或数量与适用范围,低频不能写成常态。条件和频率没有新增的确定性判定,由模型逐焦点核对;活动范围走 `scope_check`,量词的比较范围走 `quantifier_checks`。不确定语气另有确定性检查:`UNCERTAINTY` 是认识情态词这一封闭语法类,不含话题、人物或样本词。`_uncertainty_issues` 在预筛中逐分句比对:每条绑定记忆里与该分句词项最接近的子句(本人原话或当前正文,他人发言与引用不算)若都是不确定说法,候选分句又没有保留语气,就进入同一修复/复查路径;记忆里有一条肯定的独立说法则交给语义检查。`_validate_clause_checks` 对模型实际引用的片段再用 `_proof_uncertainty_issues` 判定一次。只含情态词的片段(“好像吧”)约束相邻子句;“不可能”不属于不确定。这同样是必要条件,不证明候选的语气足够。

情态只约束同一命题:焦点的大部分内容词落在该子句(至少两个共同词,且占焦点一半以上),才算该子句的情态关于这个焦点。单独引用的一个子句由引用本身绑定;同一引文含多个子句或按当前正文兜底时都要有这个关联,关联不足就不判,交给语义核对。汇报请求的焦点(`REQUEST_ACTS` 封闭语法类)只受含同一请求动词的子句约束,“不确定谁先做的”不约束因此发出的请求;不确定子句内 `CLAIM_LINKS` 连接词之后是结果,不属于被怀疑的内容。候选侧 `_hedge_kept` 只承认确实够到本焦点的语气:本焦点自带,或左侧有语气且其间没有带自身主语或以连接词开头的分句;紧邻的纯情态片段照常约束。别处无关的“好像”不再豁免后面的主张。候选写“不能判/判不了/说不清”(`EPISTEMIC_LIMIT`,只读候选)本身已保留不确定。

量词的比较范围:`SCOPED_QUANTIFIERS` 是第一次、首次、唯一、只、全部、每次、从不、总是这类封闭语法词表,同 #107 的做法,不含话题词或人名;按完整分词匹配,否定形式(不是每次)、量词“只”(这只)和书名号内的字不算。`_check_payload` 给含量词的自动句焦点标 `quantifiers`,与 `scope_check_required` 无关,有界亲历同样要查。检查 v36 对其中 supported=true 的焦点返回 `quantifier_checks`,每个量词一项,结构沿用 `scope_check`,另加 `candidate_quantifier`、`source_quantifier`。`_validate_quantifier_scope` 核对字段完整、每个量词都有对应项、候选量词和范围短语都在本焦点内、来源量词和范围短语在本句绑定来源(本人原话或当前正文)的同一分句里。来源量词有范围而候选为空,范围只是日期或“那次”,只是入口名(来源原文把该入口作为范围时除外),或取自别的分句,都按问题进入同一修复/复查路径。来源范围与候选范围不要求逐字相同(“在这里”与该处的具体名称可以等价),是否等价、比较范围是否被扩大由模型判断。字段缺失按结构错误重问,已判不支持的焦点不要求这个对象。这仍是必要条件,不证明量词的语义范围相同。

检查保留否定短路:按序前缀中有效的否定可拒绝整句,未查焦点保存在 `unchecked_clause_indices`、`short_circuits`;省略冗余停止标记的否定前缀会记规整诊断,显式无效标记仍走结构校验。已验证的正向前缀若只缺后续焦点,可只补查该句缺失焦点一次;重复或额外焦点分别校验,已有不利结论不会被后来的正向结果覆盖。已被证据/日期/范围防护拒绝的句子可停止后续窗口。所有最终保留的自动句必须覆盖并通过全部焦点,不能把未查部分默认为支持。

初检和复查统一处理 JSON 不能解析、根对象错误、字段缺失、类型/枚举无效、理由缺失、焦点或句子数量/顺序错误:只重问受影响的句、批或程度判定一次,共用原阶段预算,整批重问已覆盖的行不再逐层追加结构重问。仍无效时,句级结论按不支持处理,批级字段损坏影响该批;漏句、多句或乱序只采用能按有效且唯一的句子编号对齐的部分,其余保守拒绝,绝不把错位结论套到别句。程度结构仍无效时标记 `degree_assessment.status=conservative` 并按 large 处理。单纯结构损坏不会使整次事实检查“不完整”;原始错误、重问结果、保守拒绝及已有不利结论均保留在结构诊断中。仅根对象恰有一个 `answer` 对象时展开一层并记录 `unwrap_single_answer`,不递归解包或从冲突字段中挑结果。

生成后由 `_review_handwritten` 独立审查每条手写句,`task=handwritten_review`,与初检共用 900 秒阶段预算;生成模型仍须逐字携带原句,代码恢复未获许可而被遗漏或改归属的手写项。审查只允许两种删除许可:后来的有效记忆明确更正同一事实/认识(不同侧面、较弱证据或判断不清均不许可),或原句本身确实规定角色回复行为。代码校验更正记忆在手写之后写入或实际修订、逐字引文及绑定,指令许可须逐字引用该手写原句。证据按请求大小分页,单页必须独立给出完整许可,不合并不同页面来加强许可;无效输出只重问该页一次,仍无效则保留。当前自动流程只实现提议删除,不改写手写句,也不生成替代事实;未获许可的原句继续受保护,普通事实检查不能代替删除许可。
生成后由 `_review_handwritten` 独立审查每条手写句,`task=handwritten_review`,与初检共用 900 秒阶段预算;生成模型仍须逐字携带原句,代码恢复未获许可而被遗漏或改归属的手写项。审查只允许两种删除许可:后来的有效记忆明确更正同一事实/认识(不同侧面、较弱证据或判断不清均不许可),或原句本身确实规定角色回复行为。代码校验更正记忆在手写之后写入或实际修订、逐字引文及绑定,指令许可须逐字引用该手写原句。审查范围不受生成的 6000 token 预算限制:`_select` 按重要度与保留强度排序,容易把较新的更正排除,因此 `_generation_material` 另把超出预算、在手写之后写入、且与手写句有共同内容词的记忆(每句按相关度最多 `HANDWRITTEN_MAX_OVER_BUDGET=40` 条)存入 `material.handwritten_evidence`,只供审查,不进入生成或普通检查;发布与确认时 `_stale` 同样按这些记忆的出处指纹复核删除依据。候选按共同词数、时间由新到旧排序后按请求大小分页,单页必须独立给出完整许可,不合并不同页面来加强许可;每句最多审查 `HANDWRITTEN_REVIEW_MAX_PAGES=2` 页,未审查的数量记入 `handwritten_review.unreviewed_memories`。无效输出只重问该页一次,重问附上具体错误(`format_retry`),仍无效则保留。作为更正依据的逐字引文含不确定语气时不许可删除。当前自动流程只实现提议删除,不改写手写句,也不生成替代事实;未获许可的原句继续受保护,普通事实检查不能代替删除许可。

手写出处以“版本 ID+该版本 A 引用”追踪,复用 `base_version_id`、`rollback_of` 及 `material.handwritten_changes` 的确切删除映射,校验原句、引用唯一性和保留数量;组装时逐个消费实际保留项并维持同文项的相对顺序。分次加入同文句后只删较早项,剩余项仍沿较晚的引入版本取 `written_at`;回滚沿真正恢复的目标版本追溯。对应不唯一,或历史/删除记录不足以建立可靠对应时,写入时间为未知,不以更正记忆授权删除;句子自身为指令的独立许可不依赖记忆时间。触发条目、依据、动作及理由保存在 `handwritten_changes`,审查与保守保留另记 `handwritten_review`。获准删除强制为 large:`all_manual`、`small_medium_auto` 等待确认,`all_auto` 自动发布并保留可回滚的版本记录。若独立程度判定在结构重问后仍无效,事实及确定性检查通过时,前两种模式按大变化待确认;`all_auto` 拒绝本次候选、保留当前版,下次照常尝试,不新增人工关卡。

Expand Down
Loading