V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
huc2
V2EX  ›  问与答

本地部署的小 LLM 模型不会自动停止输出,怎么解决?

  •  
  •   huc2 · 20 天前 · 783 次点击

    想用 langchain + huggingface 上的一些小模型做一些 rag 的测试,随便尝试了 2 个 Qwen/Qwen2-7B-Instructmicrosoft/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 里面没有指定什么时候结束的吗?有没有什么解决办法。

    2 条回复    2024-08-27 15:43:33 +08:00
    xmumiffy
        1
    xmumiffy  
       20 天前
    没办法 以前 openai3.5 也会这样
    huc2
        2
    huc2  
    OP
       20 天前
    @xmumiffy 现在的 gpt4o 和 claude 这种自回归模型是因为模型大了,数据好了所以能聪明地判断什么时候结束了吗?还有一个我有点好奇的是,像他们这种模型做 Instruct 或着那种 对话交流 训练的时候,A 一句话,B 一句话,也是简单的把话拼接在一起吗,比如

    A: .......
    B: ......
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:15 · PVG 03:15 · LAX 12:15 · JFK 15:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.