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

如何解决LangChain调用LoRA微调Llama模型的Pipeline推断错误?

问题描述

我用PEFT和LoRA对llama-7b-hf模型微调后,将模型上传到了HF仓库。现在尝试结合LangChain和Chroma向量数据库使用时,出现错误:Pipeline cannot infer suitable model classes from,同时在HF页面运行API也报相同错误。之前因为模型缺少config.json,直接复制了基础模型的config.json,怀疑是这个原因导致的问题。

相关代码如下:

from langchain.embeddings import HuggingFaceHubEmbeddings
from langchain import PromptTemplate, HuggingFaceHub, LLMChain
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
from langchain.vectorstores import Chroma

repo_id = "sentence-transformers/all-mpnet-base-v2"
embedder = HuggingFaceHubEmbeddings(
    repo_id=repo_id,
    task="feature-extraction",
    huggingfacehub_api_token="XXXXX",
)
comments = ["foo", "bar"]
embeddings = embedder.embed_documents(texts=comments)
docsearch = Chroma.from_texts(comments, embedder).as_retriever()
#docsearch = Chroma.from_documents(texts, embeddings)

llm = HuggingFaceHub(repo_id='lucas0/empath-llama-7b', huggingfacehub_api_token='XXXXX')
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=docsearch, return_source_documents=False)

q = input("input your query:")
result = qa.run(query=q)

print(result["result"])

我有两个疑问:

  1. 如何在不获取原始Llama权重的情况下生成正确的config.json?
  2. 是否存在无需使用向量数据库即可向自定义HF模型加载多条语句的方法?
解决方案

一、生成正确的config.json(无需原始Llama权重)

  • 利用PEFT库导出完整模型时自动生成配置:微调完成后,不要直接复制基础模型的config.json,而是用PEFT的merge_and_unload()方法合并LoRA权重到基础模型,再保存模型,此时会自动生成匹配的config.json。示例代码:
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer

# 加载基础模型和LoRA权重
base_model = AutoModelForCausalLM.from_pretrained("decapoda-research/llama-7b-hf")
peft_model = PeftModel.from_pretrained(base_model, "你的本地LoRA微调路径")

# 合并权重并保存
merged_model = peft_model.merge_and_unload()
merged_model.save_pretrained("合并后的模型路径")
tokenizer = AutoTokenizer.from_pretrained("decapoda-research/llama-7b-hf")
tokenizer.save_pretrained("合并后的模型路径")
  • 若已上传模型到HF仓库,可在仓库的config.json中手动补充关键字段:添加"model_type": "llama",同时确保architectures字段设置为["LlamaForCausalLM"],让Hugging Face的Pipeline能正确识别模型类型。

二、无需向量数据库加载多条语句的方法

直接通过LangChain的LLMChain结合自定义Prompt模板实现,把多条语句拼接成上下文传入Prompt,示例代码:

from langchain import PromptTemplate, HuggingFaceHub, LLMChain

# 定义包含多条语句的上下文
context = "\n".join(["foo", "bar"])
# 构建Prompt模板
prompt_template = """基于以下上下文回答问题:
{context}

问题:{question}
回答:"""

prompt = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
llm = HuggingFaceHub(repo_id='lucas0/empath-llama-7b', huggingfacehub_api_token='XXXXX')
llm_chain = LLMChain(prompt=prompt, llm=llm)

q = input("input your query:")
result = llm_chain.run(context=context, question=q)
print(result)

这种方式直接将所有语句作为上下文传入模型,无需依赖向量数据库,适合语句数量不多、上下文长度在模型窗口范围内的场景。

内容的提问来源于stack exchange,提问作者Lucas Azevedo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:35:20