[Bug]: Citation Query Engine Refine Templates are missing “existing answer” and “new answer” verbiage.

在使用 LlamaIndex 的 CitationQueryEngine 进行检索增强生成时,当系统需要基于已有的答案和新的文档上下文进行精炼时触发。该问题并非运行时报错,而是一个逻辑结构问题,导致输出的答案质量可能不如预期的“精炼”效果。

[Bug]: Citation Query Engine Refine Templates are missing "existing answer" and "new answer" verbiage.

[Bug]: Citation Query Engine Refine Templates are missing “existing answer” and “new answer” verbiage.

快速结论:该问题出现在使用 LlamaIndex 的 Citation Query Engine 进行文档精炼(Refine)时。报错提示精炼模板(Citation Refine Template)的结构与其他标准的 Refine 模板不一致,缺少了明确的“原始答案”(existing_answer)和“新答案”的标签分隔,导致 LLM 可能无法有效区分新旧答案。优先排查并修改模板中末尾的标签命名。

问题场景

在使用 LlamaIndex 的 CitationQueryEngine 进行检索增强生成时,当系统需要基于已有的答案和新的文档上下文进行精炼时触发。该问题并非运行时报错,而是一个逻辑结构问题,导致输出的答案质量可能不如预期的“精炼”效果。

报错原文

Issue in CITATION_REFINE_TEMPLATE structure:
Template ends with "Answer: " instead of "Refined Answer: " or "New Answer: ".
Compare to standard templates like CHAT_REFINE_PROMPT:
"Original Answer: {existing_answer}"
"New Answer:"

原因分析

这是 LlamaIndex 核心库中的一个模板设计缺陷。在 CITATION_REFINE_TEMPLATE 中,虽然模板变量 {existing_answer} 被包含在文本中,但它被嵌入在指令块内部,而非像其他标准 Refine 模板(如 DEFAULT_REFINE_PROMPTCHAT_REFINE_PROMPT)那样,在末尾使用清晰的结构标签(如 "New Answer:""Refined Answer:")来明确提示 LLM。这种模糊的标签使得 LLM 难以理解模型应当基于旧答案进行修改,而更像是在从头生成一个新答案,从而违反了“精炼”的核心逻辑。

环境排查

  • 确认使用的 LlamaIndex 版本:llama-index-core 0.14.23
  • 检查 citation_query_engine.py 文件中的 CITATION_REFINE_TEMPLATE 定义。
  • 对比 default_prompts.py 中的 DEFAULT_REFINE_PROMPTchat_prompts.py 中的 CHAT_REFINE_PROMPT 的标签结构。

解决步骤

  1. 定位到 llama_index/core/query_engine/citation_query_engine.py 文件中 CITATION_REFINE_TEMPLATE 的定义。
  2. 找到模板字符串的末尾部分,当前写法为:
    "Query: {query_str}\n"
    "Answer: "
  3. (可优先尝试)将末尾的 "Answer: " 修改为更明确的 "Refined Answer: ""New Answer: ",以确保与 existing_answer 变量形成结构性区分。
  4. (可选)将 {existing_answer} 在其自己的独立行中展示,以确保标签的清晰度,例如:
    "Original Answer: {existing_answer}\n"
    "Refined Answer: "

注意:此修改属于代码级调整,如果使用包管理器安装,可能需要手动修补或等待官方修复。

验证方法

在调整模板后,使用 CitationQueryEngine 对同一问题执行两次精炼操作:第一次生成初始答案,第二次通过 retrieverefine 流程检查输出。观察输出的末尾是否明确包含“Refined Answer: ”或“New Answer: ”标签,并且答案内容确实基于上一次的 existing_answer 进行优化,而非完全独立生成。

参考来源

run-llama/llama_index #22218

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10860

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注