Files

2.9 KiB

Output Consistency for Multi-Campus Batch Processing

Lesson learned: 2026-06-30 — 跃龙路 vs 解放中路/星月等7校区

Root Cause: LLM Context Anchoring

LLM output style is heavily influenced by what's in the context window:

  • Consecutive processing (same session, same time window): previous campus outputs are still in context → LLM naturally "copies the style" → consistent output
  • Separated processing (different session, different time): previous outputs are gone → LLM generates with its own default style → drift

This is NOT a workflow bug or a rules problem. The rules were the same. The output format specification was the same. But the LLM produced different styles because the contextual anchor was different.

Maggie's concern (verbatim): "金额,风险,模版对比各列内容的审查和修改意见表达都不一样了...第一批里从解放中路到星月的审查逻辑和表达都是一致的,为什么到跃龙路又变掉了?"

Three-Layer Defense

Layer 1: Fixed Templates in Workflow Prompt (hardest constraint)

Embed complete output examples + "禁止" (prohibited) rules directly in the data-extractor role's procedure section. Example structure:

H列格式规范:
  风格: 段落式叙述
  结构: 【租金】→【付款推算】→【押金】→【物业费】→【违约金】
  禁止:
    - bullet符号(•、-、*)
    - "【大类·条款号】"合并标题
    - 过度拆分为逐行小条目

K列格式规范:
  风格: 先【整体评价】段落,再❗【需客户核实】编号列表
  禁止:
    - "10项风险(3高/5中/2低):"统计式开头
    - "1.【高·第十条】"标签格式
    - markdown表格列风险

L列格式规范:
  风格: 一句话说明+编号列表
  禁止:
    - "34处差异(16缺失/15修改/3新增)vs 07模版:"统计式开头
    - "【核心缺失】"分类小标题
    - "vs"分隔模版和合同

Updated in nantong-lease-audit.yaml v2 (hash: C77579MQ9QPKE).

Layer 2: Load Previous Campus Output as Reference

Before generating data for a new campus, read the most recent completed campus xlsx and extract H/K/L column content as style reference:

REF_XLSX=$(ls -t /path/to/campuses/*/*梳理*.xlsx 2>/dev/null | head -1)

Use openpyxl to read H/K/L values from the first data row, inject into the data-extractor prompt context.

Layer 3: Post-Processing Validation Script

Run scripts/output-style-check.py <row-data.json> after data extraction:

  • Checks 8 rules across H/K/L/J columns
  • Exit 0 = pass, exit 1 = fail (lists specific issues)
  • If fail → fix the specific issues before proceeding to xlsx generation

Key Insight

Rules alone are insufficient to prevent style drift. The LLM needs concrete examples in context at the moment of generation. Three layers provide redundancy: if Layer 1 is imperfectly followed, Layer 2 gives a fresh anchor, and Layer 3 catches what slips through.