我正在玩 HuggingFace 和那里的一些模型。我正在努力实现类似 RAG 的目标。看起来像是一个非常清晰的指南,包含所有所需的成分和食谱。但烹饪顺序是我需要帮助的地方。
我想做的事:
因此
我做了什么
考虑到这一点,这就是我在过去几天里所能做的事情(参见下面的 python 脚本)
但我一直遇到的问题是,到目前为止我遇到的每一篇文章/教程/文档都不能写 3 句话而不提及 OpenAI* 的内容 sigh
我不想使用任何 OpenAI(这可能吗?)
下面是我的Python脚本。
import os
from langchain.chains import LLMChain
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from huggingface_hub import InferenceClient
# <rant>
# Where to import what from seems to be a whack-a-mole sport with this
# langchain project. They can't seem to keep a module at a location
# even for a few version upgrades straight. Woow!
os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'hf_xx'
# os.environ["OPENAI_API_KEY"] = 'sk-xx' # I don't wanna use anything OpenAI*
import gradio as gr
# Load openchat model
openchat = InferenceClient(model="openchat/openchat_3.5", token='hf_xx')
documents = ["trainingData/pdfs.pdf"]
# Define embedding function
def extract_embedding(document):
# Extract embedding using OpenAIEmbeddings
embedding = OpenAIEmbeddings.embed_query(text=document)
return embedding
# Load document embeddings
document_embeddings = [extract_embedding(document) for document in documents]
# Load vectorstore index
index = FAISS.from_documents(documents=documents, embeddings=document_embeddings)
# Define LLM chain
llm_chain = LLMChain(llm=openchat)
# Create RagChain manually
def predict(docs, input):
# Retrieve relevant documents from index
retrieved_docs = index.query(input)
# Run LLM chain on retrieved documents
outputs = []
for doc in retrieved_docs:
output = llm_chain.predict(input=doc)
outputs.append(output)
return outputs
# Launch Gradio app
iface = gr.Interface(fn=predict, inputs="text", outputs="text").launch()
我离目标还有多远?我该如何走上正轨?
目前,当我运行上述脚本时,出现错误:
TypeError: OpenAIEmbeddings.embed_query() missing 1 required positional argument: 'self'
就像前面提到的,我不想在上面脚本中的任何地方使用 OpenAI,因此欢迎任何替代方案。
将不胜感激任何见解
是的。我一直遇到同样的问题,并且还有许多其他替代选择。
具体来说,您要求替换 OpenAI 的所有内容,因此您的脚本中有两个主要内容:嵌入模型和 LLM 本身。
对于嵌入模型,请查看langchain嵌入模块列表。我建议使用 langchain-huggingface 包中的 HuggingFaceEmbeddings,您可以在其中从 HF 集线器或本地存储库指定模型。由于这是您主要关心的问题,因此代码如下所示:
from langchain_huggingface import HuggingFaceEmbeddings
# Define embedding function
def extract_embedding(document: str, model_path="BAAI/bge-small-en-v1.5"):
"""Extract embedding using HF Embedding
with a default model from HF if no path is specify
"""
embed_model = HuggingFaceEmbedding(model_name=model_path)
embedding = embed_model.embed_query(text=document)
return embedding
对于 LLM 模型,您可以使用此开放 llm 列表中的任何模型,例如 T5、llama、Mistral 等。Ollama 是一个很棒的工具,可以提取他们支持的任何 llm 模型。