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

localGPT调用Llama2模型返回多个重复答案的问题求助

问题原因排查与解决方法

核心原因

  1. 提示词模板不兼容:localGPT默认提示词和Llama-2的[INST]对话格式冲突,模型被触发持续生成多轮对话内容。
  2. 生成参数未限制:未设置停止词、最大生成长度,模型会不断续写对话轮次,直到达到token上限。
  3. Chain类型误用:如果使用ConversationalRetrievalChain,未正确维护对话历史,导致重复触发回答生成。

解决方法

1. 适配Llama-2格式的提示词

重新定义提示词,明确要求模型返回单个答案,避免触发多轮对话:

from langchain.prompts import PromptTemplate

# 构建符合Llama-2要求的提示词模板
llama2_prompt = PromptTemplate(
    template="[INST]根据给定上下文回答问题,仅返回单个最终答案,禁止生成多轮对话:\n问题:{question}\n上下文:{context}[/INST]",
    input_variables=["question", "context"]
)

# 重新初始化QA链,替换默认提示词
qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    chain_type_kwargs={"prompt": llama2_prompt}
)

2. 设置生成控制参数

加载模型时添加停止词和最大生成token限制,强制模型停止生成:

from langchain.llms import CTransformers

llm = CTransformers(
    model="YanaS/llama-2-7b-langchain-chat-GGUF",
    model_type="llama",
    config={
        "max_new_tokens": 512,  # 限制单次生成的token数
        "temperature": 0.1,     # 降低随机性,减少冗余
        "stop": ["[/INST]", "```"]  # 遇到这些标记立即停止生成
    }
)

3. 更换Chain类型

如果之前用的是对话式Chain,改用普通的RetrievalQA,避免对话历史累积导致重复生成:

# 替换原有对话链初始化逻辑,使用普通检索QA链
qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever
)

4. 手动过滤结果(兜底方案)

如果以上方法无效,在获取结果后手动截取第一个有效答案:

res = qa(query)
raw_answer = res["result"]
# 按[INST]分割,取第一部分作为最终答案
answer = raw_answer.split("[INST]")[0].strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:13:37