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

如何设置max_new_tokens?8位量化Llama的RAG聊天机器人报错求助

RAG聊天机器人输入长度报错与卡住问题解决

问题根源

你碰到的ValueError是因为模型默认的max_length只有20,但RAG检索后拼接的上下文加查询总长度有1495,远超这个限制,导致模型没法正常生成内容,直接卡住了。

解决方法

核心是给模型配置max_new_tokens(官方推荐),同时补全pad token(Llama模型默认没有这个token),具体步骤如下:

1. 修改模型加载代码

在加载HuggingFacePipeline时,添加生成参数配置,把max_new_tokens设为合适的值(比如512、1024,根据你的需求调整),同时设置pad token:

# Configure and load the model
model_name = "NousResearch/Llama-2-7b-chat-hf"
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
# 生成参数配置
gen_kwargs = {
    "max_new_tokens": 512,  # 控制生成的回答长度,按需调整
    "temperature": 0.7,  # 可选,调小会让回答更严谨,调大更灵活
    "do_sample": True,
    # Llama默认没有pad token,用eos_token替代
    "pad_token_id": AutoTokenizer.from_pretrained(model_name).eos_token_id
}
llm = HuggingFacePipeline.from_model_id(
    model_id=model_name,
    task="text-generation",
    model_kwargs={"trust_remote_code": True, "quantization_config": bnb_config},
    pipeline_kwargs=gen_kwargs  # 把生成参数传给pipeline
)

2. 可选优化:调整文本分块

你当前的分块chunk_size=700、chunk_overlap=450可能导致单块文本过长,检索多块后总长度容易接近Llama-2 7B的4096上下文上限。可以适当调小分块:

docs = split_doc(pages, 500, 100)

3. 替换后代码验证

把上面的修改整合到原代码里,运行时模型会按照max_new_tokens控制生成的回答长度,不会再触发输入长度超限的报错,也能正常完成查询响应。

为什么选max_new_tokens?

max_length是输入+生成的总token数,而max_new_tokens只管生成的新token数量,更适合RAG场景——毕竟检索到的上下文长度不固定,用这个参数能避免总长度超过模型上限的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:11:08