LangChain调用Intel/dynamic_tinybert输入格式错误问题咨询
LangChain调用Intel/dynamic_tinybert的正确输入格式方案
问题根源
Intel/dynamic_tinybert是BERT系列预训练模型,和原示例里的FLAN-T5(序列到序列生成模型)输入逻辑完全不一样。FLAN-T5能直接用字符串或简单字典,但BERT类模型得严格遵循预训练时的输入结构,或者借助适配后的Pipeline来处理,不然就会报输入格式错误。
正确实现方法
1. 优先用HuggingFacePipeline(最稳妥)
BERT类模型一般要搭配任务对应的Pipeline(比如问答、文本分类)才能正常工作,直接用HuggingFaceEndpoint容易踩格式坑。示例代码:
from langchain.llms import HuggingFacePipeline from transformers import pipeline, AutoTokenizer, AutoModelForQuestionAnswering # 加载模型和分词器 model_name = "Intel/dynamic_tinybert" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForQuestionAnswering.from_pretrained(model_name) # 创建问答Pipeline qa_pipeline = pipeline( "question-answering", model=model, tokenizer=tokenizer, max_length=512, truncation=True ) # 包装成LangChain可用的LLM llm = HuggingFacePipeline(pipeline=qa_pipeline) # 执行问答任务,输入必须是带question和context的字典 result = llm.predict({ "question": "法国的首都是哪里?", "context": "法国是欧洲的一个国家,它的首都是巴黎。" }) print(result)
2. 非要用HuggingFaceEndpoint/HuggingFaceHub的话
得严格按Hugging Face推理API的要求构造输入:
- 问答任务:必须传包含
question和context的字典 - 注意:dynamic_tinybert默认只支持问答、文本分类,别拿来做翻译(除非是专门微调过的翻译版本)
示例代码:
from langchain.llms import HuggingFaceEndpoint llm = HuggingFaceEndpoint( repo_id="Intel/dynamic_tinybert", task="question-answering", huggingfacehub_api_token="你的API密钥" ) # 正确输入格式 result = llm.predict({ "question": "什么是人工智能?", "context": "人工智能(AI)是指由机器,尤其是计算机系统模拟人类智能过程的技术。" }) print(result)
通用排查注意事项
- 先查模型支持的任务:去Hugging Face模型主页看
Tasks标签,别拿问答模型去做翻译这类不兼容的任务。 - 输入字段必须和任务匹配:问答要传
question+context,文本分类传text,不能只丢个纯字符串。 - 别手动搞token:
input_ids这类字段交给LangChain或Pipeline处理就行,自己瞎构造容易出错。
内容的提问来源于stack exchange,提问作者Kingsley Uchunor
相关产品推荐
相关产品推荐

