Skip to content
🔗 分享本题
查看我的学习进度 →

链式验证动漫知识图:先生成初稿,再提出验证问题,使用独立证据核验,最后根据证据重写答案

记忆点:先答、再问、独立查、按证据改;模型自证不等于事实核验。

💡 答案要点

CoVe = 让模型先写草稿,再自己出验证题,验证后再重写,形成闭环

CoVe vs CoT 的本质区别

维度CoT(逐步思考)CoVe(链式验证)
目标提高推理准确性减少幻觉/事实错误
流程生成→输出答案生成→质疑→验证→修正
自反思❌ 没有自我批判✅ 核心是自批评
适用场景数学/逻辑推理知识类问答/RAG生成

CoVe 四步流程

展开 Python 代码示例(47 行)
python
class ChainOfVerification:
    def __init__(self, llm):
        self.llm = llm

    def run(self, query, context=""):
        # Step 1: 基线响应 —— 生成初稿
        initial_response = self.generate_initial(query, context)
        
        # Step 2: 规划验证 —— 模型自己找初稿中的可疑点
        verification_questions = self.plan_verifications(query, initial_response)
        
        # Step 3: 执行验证 —— 独立回答每个验证问题(不参考初稿)
        verification_answers = []
        for vq in verification_questions:
            answer = self.llm.call(f"用已知事实回答:{vq}")
            verification_answers.append(answer.strip())
        
        # Step 4: 最终重写 —— 基于验证结果修正初稿
        final = self.rewrite_using_verification(
            query, verification_questions, verification_answers
        )
        return final
    
    def plan_verifications(self, query, draft):
        """让模型找出初稿中可能出错的地方"""
        prompt = f"""
        问题:{query}
        当前回答:{draft}
        
        请列出 3-5 个可以验证这个回答准确性的具体问题。
        例如:某个日期是否正确?某个实体是否存在关系?某个数字是否合理?
        只列问题,不要回答。
        """
        return self.llm.generate(prompt).split("\n")[:5]
    
    def rewrite_using_verification(self, query, v_questions, v_answers):
        """用验证结果重写最终回答"""
        evidence_parts = [f"V{i}: {q}{a}" for i, (q, a) in enumerate(zip(v_questions, v_answers), 1)]
        prompt = f"""
        问题:{query}
        
        以下是验证过程中的发现:
        {' '.join(evidence_parts)}
        
        请用这些验证证据重写最终回答。如果某项证据与初稿矛盾,以验证证据为准。如果有信息无法确认,请明确说明。
        """
        return self.llm.generate(prompt)

论文结论应该怎么引用

CoVe 原论文由 Meta AI 等团队作者提出,在 Wikidata 列表问答、MultiSpanQA 和长文本生成等任务上报告了幻觉下降。不同任务使用的指标并不相同,不能把未经核对的数据拼成一张统一“准确率提升表”,也不能直接外推到自己的 RAG 系统。

原论文: Chain-of-Verification Reduces Hallucination in Large Language Models

何时使用 CoVe(面试加分点)

✅ 值得用的场景:

  • 对外发布的事实性内容(百科、新闻摘要)
  • 医疗/法律等高风险领域
  • 下游会依赖此输出的关键链路
  • 长列表(日期/地点/数量容易出错)

❌ 不值得用的场景:

  • 日常聊天(cost/took too long)
  • 创意写作(不需要事实校验)
  • 实时性要求极高的场景(CoVe 延迟高,额外3次LLM调用)

与 RAG 结合效果更强

python
# CoVe + Retrieval 组合拳
# 第1遍验证:模型用内部知识自查
internal_v = verify_with_internal_knowledge(draft)

# 第2遍验证:检索外部文档做交叉验证
external_docs = search(query)
external_v = verify_with_retrieved_docs(draft, external_docs)

# 综合两层验证结果来修正
final = reconcile_and_rewrite(internal_v, external_v)

# 效果必须在自己的标注集上评估,不能预设固定下降比例

30 秒回答

“CoVe 先生成草稿,再规划验证问题;验证问题需要独立回答,避免被原草稿锚定,最后根据验证结果重写。它增加了调用次数和延迟,而且模型自证不等于外部事实核验。高风险场景应把验证问题交给检索、数据库或规则工具,并在自己的评测集上比较事实性、拒答率、延迟和成本。”