langchain:如何在本地使用自定义部署的fastAPI嵌入模型?
我想在Langchain中建立一个检索器,并且想使用一个已经部署好的fastAPI嵌入模型。我该怎么做呢?
from langchain_community.vectorstores import DocArrayInMemorySearch
embeddings_model = requests.post("http://internal-server/embeddings/")
db = DocArrayInMemorySearch.from_documents(chunked_docs, embeddings_model)
retriever = db.as_retriever()
1 个回答
0
你可以创建一个自定义的嵌入类,这个类可以继承自 BaseModel
和 Embeddings
这两个类。下面是一个例子:
from typing import List
import requests
from langchain_core.embeddings import Embeddings
from langchain_core.pydantic_v1 import BaseModel
class APIEmbeddings(BaseModel, Embeddings):
"""Calls an API to generate embeddings."""
def embed_documents(self, texts: List[str]) -> List[List[float]]:
# TODO: Call API to generate embeddings
# requests.post("http://internal-server/embeddings/")
pass
def embed_query(self, text: str) -> List[float]:
# TODO: Call API to generate embeddings
# requests.post("http://internal-server/embeddings/")
pass
embed_documents()
和 embed_query()
是 Embeddings
类中的抽象方法,你必须实现它们。OllamaEmbeddings
类就是一个简单的例子,展示了如何创建一个自定义的嵌入类。
你可以像使用其他嵌入类一样使用这个自定义的嵌入类。
embeddings_model = APIEmbeddings()
db = DocArrayInMemorySearch.from_documents(chunked_docs, embeddings_model)
retriever = db.as_retriever()
参考资料