如何调试HuggingFace Pipeline发送给LLM的实际提示词?
调试文本生成Pipeline的最终提示词方法
以下几种方法可以帮你查看实际发送给LLM的提示词,验证tokenizer.default_chat_template的应用效果:
直接用Tokenizer生成最终提示
Pipeline处理输入时,会调用tokenizer的对话模板来格式化内容,你可以手动调用apply_chat_template生成最终提示,不用运行完整的生成流程:# 构造符合对话格式的输入(单轮对话也要用这种结构) messages = [{"role": "user", "content": "Some input prompt for the LLM"}] # 生成带模板的提示词,add_generation_prompt=True会加上模型要求的生成前缀(比如<|assistant|>) final_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) print(final_prompt)输出的内容就是Pipeline实际传给LLM的完整提示格式。
解码Token查看原始提示
如果想确认编码后的token对应的原始文本,可以通过以下方式解码:# 方式1:从Pipeline结果中提取输入token并解码 result = pipe("Some input prompt for the LLM", return_tensors="pt") # 分离输入token和生成的token input_tokens = result["input_ids"][0][:-len(result["generated_ids"][0])] decoded_prompt = tokenizer.decode(input_tokens, skip_special_tokens=False) print(decoded_prompt) # 方式2:手动编码对话输入后解码 messages = [{"role": "user", "content": "Some input prompt for the LLM"}] tokenized = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt") decoded_prompt = tokenizer.decode(tokenized[0], skip_special_tokens=False) print(decoded_prompt)这种方法能看到包含所有特殊标记(比如角色标签、结束符)的完整提示,适合验证模板是否正确添加了必要符号。
启用调试日志查看细节
给Transformers库开启DEBUG级别的日志,就能看到Pipeline处理提示的完整流程:import logging logging.basicConfig(level=logging.DEBUG) # 运行Pipeline,日志会输出提示处理的详细步骤 result = pipe("Some input prompt for the LLM")日志里会明确显示最终构造的提示文本,以及tokenizer的处理细节。
内容的提问来源于stack exchange,提问作者MarcoM
相关产品推荐
相关产品推荐

