想用 langchain + huggingface 上的一些小模型做一些 rag 的测试,随便尝试了 2 个 Qwen/Qwen2-7B-Instruct
和 microsoft/Phi-3.5-mini-instruct
,但我发现他们好像都不知道什么时候应该停止输出。下面举了一些例子
模型和 prompt 的代码,检索器的就不放了:
llm_model = AutoModelForCausalLM.from_pretrained(
model_name, device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
pipe = pipeline(
"text-generation",
model=llm_model,
tokenizer=tokenizer,
max_new_tokens=512,
return_full_text=False,
do_sample=False,
temperature=None,
top_k=None,
top_p=None,
)
prompt = ChatPromptTemplate.from_template(
"你是问答任务的助手。使用以下检索到的相关规定来回答问题。如果你不知道答案,就说你不知道。\n\n"
"问题:{input} \n\n"
"上下文:\n{context}\n\n"
"回答:"
)
这个 prompt 我是希望他在回答后面直接回答就可以了,很直接,但是这些模型有时候就很蠢。比如它会往后面补充:
根据上下文,..........
问题:.....
答案:.....
问题:.....
答案:.....
问题:.....
答案:......
就十分容易出现上面这种情况,明明直接回答就好了,但是它一定要把能用的 token 用完才结束,这些小模型的输出 token 里面没有指定什么时候结束的吗?有没有什么解决办法。
1
xmumiffy 122 天前
没办法 以前 openai3.5 也会这样
|