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

QA场景下,如何使GenerateMixin的generate方法仅输出生成的tokens?

只返回生成tokens的实现方式
  • 在Hugging Face生态中,你提到的通过pipeline对象的call方法传入return_full_text=False,是QA等场景下仅返回模型生成内容的标准做法,能直接过滤掉提示token对应的文本。

  • 至于GenerateMixin.generate方法,它本身没有直接对应return_full_text的参数——作为底层生成方法,它默认返回包含提示+生成内容的完整token序列。如果要实现仅保留生成的tokens,需要手动做后续处理,步骤如下:

    1. 用模型对应的tokenizer对提示文本编码,得到input_ids,其长度就是提示部分的token数量。
    2. 从generate返回的sequences结果中,截取提示token长度之后的部分,再用tokenizer解码这部分token即可。

示例代码:

from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained("your-model-name")
model = AutoModelForCausalLM.from_pretrained("your-model-name")

prompt = "请解释什么是Transformer模型?"
# 编码提示文本
inputs = tokenizer(prompt, return_tensors="pt")

# 调用底层generate方法
outputs = model.generate(**inputs)

# 提取仅生成的内容
prompt_token_count = inputs["input_ids"].shape[1]
generated_tokens = outputs[0][prompt_token_count:]
generated_text = tokenizer.decode(generated_tokens, skip_special_tokens=True)

print(generated_text)

简单来说,Pipeline封装了截取逻辑,用起来更便捷;而generate方法更偏向底层灵活调用,需要手动处理才能得到纯生成内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:45:13