# 可开启模块接入与并行推进说明 本文说明当前 TMCRA 包中已经保留的两个可开启接入口: - Embedder 接入口 - LLM planner 接入口 同时说明 S500 基线测试中使用过的并行推进方式,方便后续在部署、评估或消融实验中复用。 ## 1. 当前主链路 冻结 S500 基线的核心链路是: ```text dialogue -> writer layer -> graph memory -> learned node/path scorer -> evidence selection -> answer layer ``` 其中: - 写入层负责把对话转成记忆节点、事件单元、profile 信号、时间信号。 - 图记忆层保存节点、路径和隧穿关系。 - `node_scorer.pt` 和 `path_scorer.pt` 负责学习式节点/路径打分。 - evidence selection 把候选记忆整理成紧凑证据。 - 回答层 LLM 根据证据生成最终回复。 Embedder 和 LLM planner 都是可开启增强模块,不应该替代主图模型。它们更适合作为辅助通道、对比实验或高成本部署路径。 ## 2. Embedder 接入口 Embedder 当前有三类接入位置。 ### 2.1 写入阶段索引 写入阶段可以为新写入的记忆建立 embedding 索引,后续召回时作为辅助候选来源。 相关配置: ```bash export TMCRA_EMBEDDER_MODEL_PATH="BAAI/bge-m3" export TMCRA_EMBEDDER_DEVICE="cuda" export TMCRA_EMBEDDER_MODEL_MAX_LENGTH="512" export TMCRA_WRITE_EMBEDDER_INDEX_MODE="bge_m3" export TMCRA_WRITE_EMBEDDER_INDEX_MAX_TERMS="96" ``` 作用: - 在 writer 写入记忆节点后,为节点文本建立语义索引。 - 不改变原图结构。 - 不替代 node/path scorer,只是给召回增加一条语义候选通道。 ### 2.2 召回前候选补充 召回前可以先用 embedder 找到一批候选 event id,再交给图召回和 scorer 做后续排序。 相关配置: ```bash export TMCRA_EMBEDDER_PRE_RECALL_MODE="bge_m3" export TMCRA_EMBEDDER_PRE_RECALL_K="16" export TMCRA_EMBEDDER_INDEX_RECALL_MODE="bge_m3" export TMCRA_EMBEDDER_INDEX_RECALL_K="24" ``` 作用: - 帮助召回阶段扩大候选范围。 - 对语义相近但图路径弱的记忆提供补充入口。 - 适合测试 query 与 memory 表达不完全一致的场景。 ### 2.3 召回后融合加权 召回后可以把 embedder 命中的 event 与主图模型结果融合,让高语义相关的节点获得有限 boost。 相关配置: ```bash export TMCRA_EMBEDDER_FUSION_MODE="on" export TMCRA_EMBEDDER_FUSION_WEIGHT="0.35" export TMCRA_EMBEDDER_FUSION_SCORE_FLOOR="0.62" export TMCRA_EMBEDDER_FUSION_TOP_K="16" export TMCRA_EMBEDDER_FUSION_SELECT_K="4" export TMCRA_EMBEDDER_FUSION_MAX_BOOST="0.42" ``` 作用: - 给语义相似候选增加有限分数。 - 避免 embedder 直接重排主证据。 - 适合作为主图 scorer 的辅助召回层。 ## 3. LLM Planner 接入口 LLM planner 当前主要有三类接入方式。它们都位于召回之后或 query 进入召回之前,用于增强证据组织能力。 ### 3.1 Evidence-unit planner Evidence-unit planner 在召回后运行,用 LLM 把候选窗口整理成 evidence unit。 相关配置: ```bash export TMCRA_EVIDENCE_UNIT_PLANNER_MODE="on" export TMCRA_EVIDENCE_UNIT_PLANNER_BASE_URL="" export TMCRA_EVIDENCE_UNIT_PLANNER_MODEL="" export TMCRA_EVIDENCE_UNIT_PLANNER_API_KEY="" export TMCRA_EVIDENCE_UNIT_PLANNER_MAX_CANDIDATES="10" export TMCRA_EVIDENCE_UNIT_PLANNER_CHARS="1100" export TMCRA_EVIDENCE_UNIT_PLANNER_MAX_TOKENS="760" export TMCRA_EVIDENCE_UNIT_PLANNER_REORDER="0" ``` 如果不单独设置 planner 的 base/model/key,它会继承回答层配置: ```bash export TMCRA_ANSWER_BASE_URL="" export TMCRA_ANSWER_MODEL="" export TMCRA_ANSWER_API_KEY="" ``` 作用: - 标注候选窗口里的 answer unit、positive evidence、temporal anchor、current value、old value、constraint、negative evidence。 - 帮助最终回答层理解“这批证据应该怎么用”。 - 默认更适合做证据整理,不建议让它直接替代图召回。 ### 3.2 LLM channel planner LLM channel planner 在最终证据进入回答层前运行,用 LLM 区分 main evidence、coverage evidence、support evidence 和 suppress evidence。 相关配置: ```bash export TMCRA_LLM_CHANNEL_PLANNER_MODE="on" export TMCRA_LLM_CHANNEL_PLANNER_MAX_WINDOWS="16" export TMCRA_LLM_CHANNEL_PLANNER_WINDOW_CHARS="520" export TMCRA_LLM_CHANNEL_PLANNER_MAX_TOKENS="700" ``` 作用: - 让 coverage 证据补充主事实,而不是替代主事实。 - 对 count/sum/ratio/duration/multi-unit 问题特别有用。 - 成本高于纯模型 scorer,适合高质量模式或实验开关。 冻结 S500 基线记录中,该项为: ```text llm_channel_planner=off ``` ### 3.3 Query graph builder Query graph builder 在召回前运行,把用户问题转成 query graph,再扩展为 sidecar retrieval queries。 相关配置: ```bash export TMCRA_QUERY_GRAPH_BUILDER_MODE="on" export TMCRA_QUERY_GRAPH_BASE_URL="" export TMCRA_QUERY_GRAPH_MODEL="" export TMCRA_QUERY_GRAPH_API_KEY="" export TMCRA_QUERY_GRAPH_MAX_TOKENS="700" export TMCRA_QUERY_GRAPH_SIDECAR_RETRIEVAL_MODE="on" export TMCRA_QUERY_GRAPH_SIDECAR_MAX_QUERIES="6" export TMCRA_QUERY_GRAPH_SIDECAR_TOP_K="4" ``` 作用: - 把问题拆成 task intent、required units、operation、tunnel needs。 - 对复杂 multi-session、temporal、profile 问题提供更明确的召回方向。 - 适合做对比实验,观察“问题建图后再召回”是否提升候选命中。 ## 4. 本地模型 planner 与 LLM planner 的区别 当前代码里也有本地模型 planner 接口,例如: ```bash export TMCRA_ANSWER_WINDOW_PLANNER_MODE="on" export TMCRA_ANSWER_WINDOW_PLANNER_MODEL_PATH="" export TMCRA_UNIFIED_OPERATION_PLANNER_MODE="on" export TMCRA_UNIFIED_OPERATION_PLANNER_MODEL_PATH="" export TMCRA_INJECTION_PLANNER_MODE="guided" export TMCRA_INJECTION_PLANNER_MODEL_PATH="" ``` 这些是本地模型接入口,不是 LLM planner。区别是: - LLM planner:调用外部或本地 LLM,成本更高,适合验证能力上限。 - 本地模型 planner:成本更低,更适合产品化,但需要专项训练和稳定性验证。 建议流程是: ```text 先用 LLM planner 验证能力是否有效 -> 再把有效行为蒸馏/训练进本地图模型或 planner head ``` ## 5. 并行推进方案 S500 基线采用过分片并行方式: ```text 500 samples -> 10 shards -> 50 samples per shard ``` 每个 shard 独立运行: ```text input_shard_N.json -> shard_N/ -> predictions/debug/summary ``` 核心并行原则: - 每个 shard 独立进程。 - 每个 shard 独立输出目录。 - writer key pool 按 shard index 轮转。 - 主模型权重只读共享。 - 最终合并 predictions、samples_debug、judge 结果。 冻结 S500 记录中的关键运行配置: ```text samples=500 shards=10 per_shard=50 writer=DeepSeek v4 Flash answer_layer=GPT5.4 llm_channel_planner=off history_mode=controlled_answer_plus_distractors ``` ### 5.1 复用的并行模板 推荐的并行模板: ```bash export TMCRA_RETRIEVAL_MODE="hybrid_node_scored" export TMCRA_REQUIRE_LEARNED_SCORER="1" export TMCRA_NODE_MODEL_DEVICE="cuda" export TMCRA_NODE_MODEL_PATH="models/action_frame_tunnel_graph548_tunnel_fusion_train_20260524_042557/node_scorer.pt" export TMCRA_PATH_MODEL_PATH="models/action_frame_tunnel_graph548_tunnel_fusion_train_20260524_042557/path_scorer.pt" export TMCRA_WRITER_MODEL="deepseek-chat" export TMCRA_WRITER_MAX_TOKENS="512" export TMCRA_WRITER_TIMEOUT_SECONDS="180" export TMCRA_WRITER_TEMPERATURE="0" export TMCRA_WRITER_INPUT_MODE="delta" export TMCRA_WRITER_MAX_PROPOSALS="2" export TMCRA_ANSWER_MAX_TOKENS="512" ``` 单 shard 执行形态: ```bash python code/run_lme_s10_native_tmcra.py \ --data "/input_shard_N.json" \ --repo "" \ --service-root "" \ --out "/shard_N" \ --limit 50 \ --top-k 10 \ --max-distractor-sessions 5 \ --max-distractor-chunks 1 \ --max-answer-chunks 4 \ --chunk-chars 7000 ``` ### 5.2 推进顺序 建议按下面顺序推进,不要一次把所有模块全打开: 1. **Baseline scorer-only** - embedder off - LLM channel planner off - query graph builder off - 用于确认 frozen baseline 是否稳定。 2. **Embedder pre-recall A/B** - 只打开写入索引和召回前候选补充。 - 观察候选命中率、召回延迟、错误类型是否变化。 3. **Embedder fusion A/B** - 在 pre-recall 稳定后打开 fusion。 - 控制 boost,不允许 embedder 直接压过主图 scorer。 4. **Evidence-unit planner A/B** - 打开 LLM evidence-unit planner。 - 观察 answer 层是否更会使用召回证据。 5. **LLM channel planner A/B** - 只在 multi/aggregation/temporal 错误集中验证。 - 重点观察 coverage 证据是否补充主事实,而不是替换主事实。 6. **Query graph builder A/B** - 用于验证“问题建图后再召回”的上限。 - 如果有效,再考虑训练进 query-understanding 或 graph scorer。 ### 5.3 并行规模建议 并行数不要只看 API 数量,还要看: - GPU 显存 - CPU 内存 - writer 延迟 - answer 层延迟 - graph ingest/SQLite 写入开销 - 每 shard 平均 writer calls 建议从小到大: ```text 5 shards smoke -> 10 shards stable -> 20 shards stress -> 30 shards only if no memory/API/IO issue ``` 如果出现错误率升高、内存下降明显、API 402/429、chunk error 或 shard 卡住,应先降并行,再补跑缺失样本。 ## 6. 推荐实验矩阵 最小可解释矩阵: | 实验 | Embedder | LLM planner | 目的 | | --- | --- | --- | --- | | baseline | off | off | 固定主图模型基线 | | embedder-pre | pre-recall on | off | 测候选扩展是否提升 | | embedder-fusion | pre-recall + fusion on | off | 测语义融合是否提升 | | evidence-unit | off | evidence-unit on | 测回答前证据整理 | | channel-planner | off | channel planner on | 测 main/coverage 分离 | | query-graph | off | query graph on | 测问题建图召回 | | combined-light | pre-recall on | evidence-unit on | 测较低成本组合 | | combined-heavy | pre-recall + fusion on | evidence-unit + channel planner on | 测能力上限 | 每一组都应保留: - predictions - samples_debug - judge output - by-task accuracy - writer calls - retrieval latency - answer latency - per-sample error type 这样后续可以判断问题来自召回、证据选择、planner、回答层,还是并行运行不稳定。