Mistral-7B-Instruct-v0.2生成回答被截断,OpenAI正常,求原因
问题:Mistral-7B-Instruct-v0.2生成回答被提前截断,OpenAI模型正常
问题描述
开发一款Web应用,可根据用户上传文档提供的上下文回答问题。使用Mistral-7B-Instruct-v0.2模型时,生成的回答会被提前截断无法完成;而使用OpenAI模型时,回答可正常完整输出。
相关代码
template=""" ### [INST] Instruccion: Responde en español a las preguntas del usuario según el contexto. Si no encunetras una respuesta adecuada en el contexto, responde que no tienes información suficiente. {context} ### question: {question} (responde en castellano) [/INST] """ # 原代码存在重复定义template的问题,后续内容覆盖了完整模板 template=""" <s>[INST] """ prompt = PromptTemplate( input_variables=['context','question'], template = template ) vector = Chroma(client=db, collection_name="coleccion4", embedding_function=embeddings) retriever = vector.as_retriever(search_type="similarity", search_kwargs={"k":3}) llm = HuggingFaceHub( repo_id="mistralai/Mistral-7B-Instruct-v0.2", model_kwargs = {"temperature":0.4}, huggingfacehub_api_token = apikey_huggingFace ) respuesta = rag_chain.invoke(user_question)
模型响应对比
OpenAI模型完整响应:

Mistral模型截断响应:

可能的原因分析
- 生成参数未配置输出长度:调用Mistral模型时,
model_kwargs仅设置了temperature,未指定max_new_tokens参数。HuggingFace Hub默认的输出长度限制可能较小,导致内容被提前截断;而OpenAI模型默认输出长度阈值更高,因此能生成完整回答。 - Prompt格式错误:代码中重复定义
template,后续的简短模板覆盖了完整指令模板,导致传入模型的Prompt不符合Mistral-7B-Instruct的对话格式要求(正确格式应为<s>[INST] 指令 + 上下文 + 问题 [/INST])。格式异常会让模型无法识别任务边界,提前终止生成。 - 上下文窗口容量限制:Mistral-7B-Instruct-v0.2的上下文窗口为8K tokens,若检索到的
context过长,加上Prompt和已生成内容总长度接近或超过该阈值,模型会触发截断机制;而OpenAI的GPT系列模型拥有更大的上下文窗口(16K及以上),能容纳更长的内容。 - HuggingFace Hub部署限制:Hub上的模型部署可能存在默认输出长度限制,免费调用额度下的输出长度会被约束,导致回答无法完整生成。
内容的提问来源于stack exchange,提问作者Botellita Taponzito
相关产品推荐
相关产品推荐

