You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Langchain RetrievalQA输出含冗余内容,如何仅保留答案?

问题分析与解决方案

核心问题

你的代码主要问题是提示模板未适配Mixtral-8x7B-Instruct-v0.1模型的指令格式。该模型为对话式指令模型,需要特定格式包裹输入指令才能正确识别任务、仅返回答案,否则会重复输出提示模板、上下文等冗余内容。另外代码中缺少retriever变量的定义,需补充从加载的向量库中获取检索器的逻辑。

实现仅显示答案的两种方法

方法一:适配模型指令格式(推荐)

修改Prompt模板为Mixtral要求的<s>[INST] 指令内容 [/INST]格式,从源头让模型只生成答案:

from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate

# 适配Mixtral Instruct模型的标准格式
prompt_template = """<s>[INST]Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.

{context}

Question: {question}
Answer in Indonesian:[/INST]"""
PROMPT = PromptTemplate(
    template=prompt_template, input_variables=["context", "question"]
)
chain_type_kwargs = {"prompt": PROMPT}
# 补充retriever变量定义(从加载的向量库中获取)
retriever = loaded_db.as_retriever()
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, chain_type_kwargs=chain_type_kwargs)
query = "Apa itu intervensi gizi spesifik?"
result = qa.run(query)
print(result)

方法二:字符串截取(临时方案)

若暂时不想调整prompt,可对返回结果做字符串截取提取答案:

query = "Apa itu intervensi gizi spesifik?"
full_output = qa.run(query)
# 提取"Answer in Indonesian:"之后的内容
answer = full_output.split("Answer in Indonesian:")[-1].strip()
print(f"Answer in Indonesian: {answer}")

效果验证

修改后运行代码,输出将仅保留预期的答案部分:
Answer in Indonesian: Intervensi gizi spesifik adalah upaya tertentu yang dilakukan untuk mengatasi masalah gizi yang spesifik, seperti intervensi PMT dan suplemen gizi, intervensi pengendalian dan penurunan gizi, serta intervensi kefarmasian dan alat kesehatan.

内容的提问来源于stack exchange,提问作者phluviophilee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:26:03