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

无需OpenAI的HuggingFace RAG问答聊天应用实现求助

问题分析与解决方案

一、当前代码错误原因及修正

你遇到的TypeError: OpenAIEmbeddings.embed_query() missing 1 required positional argument: 'self'错误,是因为直接调用了OpenAIEmbeddings类的方法,而非类实例的方法。类的实例方法必须先创建类对象才能调用,错误写法示例:

# 错误:直接调用类方法
OpenAIEmbeddings.embed_query("your query")

正确的调用逻辑(即使后续替换模型,这个实例化逻辑通用):

from langchain.embeddings import OpenAIEmbeddings

# 先创建类实例
embeddings = OpenAIEmbeddings()
# 再调用实例方法
query_embedding = embeddings.embed_query("your query")

不过既然你要完全弃用OpenAI服务,直接替换为HuggingFace生态的嵌入模型即可。

二、非OpenAI的嵌入替代方案(基于HuggingFace)

1. LangChain集成HuggingFaceEmbeddings

这是最适配RAG开发的方案,支持HuggingFace Hub上绝大多数开源嵌入模型,如sentence-transformers/all-MiniLM-L6-v2、BAAI/bge-small-en-v1.5等。示例代码:

from langchain.embeddings import HuggingFaceEmbeddings

# 初始化嵌入模型,可指定本地缓存路径避免重复下载
embedding_model_name = "sentence-transformers/all-MiniLM-L6-v2"
embeddings = HuggingFaceEmbeddings(
    model_name=embedding_model_name,
    cache_dir="/path/to/your/local/model/cache"
)

# 生成查询向量
query_embedding = embeddings.embed_query("your query")
# 生成文档向量列表
doc_embeddings = embeddings.embed_documents(["document text 1", "document text 2"])

2. 直接使用Transformers库调用嵌入模型

如果不想依赖LangChain,可直接用HuggingFace Transformers库加载模型:

from transformers import AutoTokenizer, AutoModel
import torch

# 加载模型与分词器
model_name = "BAAI/bge-small-en-v1.5"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

# 自定义嵌入生成函数
def get_embedding(text):
    inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
    with torch.no_grad():
        outputs = model(**inputs)
    # 取<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>token输出作为最终嵌入向量
    embedding = outputs.last_hidden_state[:, 0, :].squeeze().numpy()
    return embedding

# 使用示例
query_embedding = get_embedding("your query")

3. 远程调用HuggingFace Inference Endpoints的嵌入模型

如果想把嵌入模型也部署在HuggingFace平台,通过VPS远程推理,可使用HuggingFace Inference Client:

from huggingface_hub import InferenceClient

client = InferenceClient(
    model="sentence-transformers/all-MiniLM-L6-v2",
    token="your_huggingface_access_token"
)

# 获取查询嵌入
query_embedding = client.feature_extraction("your query")
# 获取多文档嵌入
doc_embeddings = client.feature_extraction(["document text 1", "document text 2"])

三、适配你的RAG架构的注意事项

  • 自定义文档索引:用上述嵌入模型生成文档向量后,可存储在本地向量数据库(如Chroma、FAISS),全程无需依赖外部服务。
  • 远程LLM推理:继续使用HuggingFace客户端调用部署在Hub上的开源大模型(如Llama 2、Mistral),确保整个流程完全脱离OpenAI服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:13:24