如何在RAG中用Solr作为LangChain检索器?含凭证及嵌入模型配置
基于LangChain+Solr搭建RAG服务的问题解决
一、远程嵌入模型的代码修正
你当前直接用requests.post获取嵌入的方式不符合LangChain要求,因为Solr vectorstore需要接收实现了LangChain Embeddings抽象接口的实例,而非requests响应对象。需要封装自定义类来调用远程嵌入服务:
from langchain.embeddings.base import Embeddings import requests from typing import List class RemoteEmbeddings(Embeddings): def __init__(self, api_url: str): self.api_url = api_url def embed_documents(self, texts: List[str]) -> List[List[float]]: # 根据远程服务的接口要求调整请求参数格式 response = requests.post(self.api_url, json={"texts": texts}) response.raise_for_status() return response.json()["embeddings"] def embed_query(self, text: str) -> List[float]: # 单文本嵌入,复用批量接口或调用单独查询接口(根据你的服务实现调整) return self.embed_documents([text])[0] # 初始化远程嵌入模型实例 embeddings_model = RemoteEmbeddings("http://server-insight/embeddings/")
二、Solr服务器凭证配置
针对eurelis-langchain-solr-vectorstore的Solr类,可通过core_kwargs传入认证信息,常见场景如下:
1. HTTP基本认证(用户名+密码)
from requests.auth import HTTPBasicAuth solr = Solr(embeddings_model, core_kwargs={ 'page_content_field': 'text_t', 'vector_field': 'vector', 'core_name': 'langchain', 'url_base': 'http://localhost:8983/solr', 'auth': HTTPBasicAuth("你的Solr用户名", "你的Solr密码") })
2. Bearer Token认证
solr = Solr(embeddings_model, core_kwargs={ 'page_content_field': 'text_t', 'vector_field': 'vector', 'core_name': 'langchain', 'url_base': 'http://localhost:8983/solr', 'headers': {"Authorization": "Bearer 你的Token内容"} })
完整修正代码
from langchain.embeddings.base import Embeddings import requests from typing import List from eurelis_langchain_solr_vectorstore import Solr from requests.auth import HTTPBasicAuth class RemoteEmbeddings(Embeddings): def __init__(self, api_url: str): self.api_url = api_url def embed_documents(self, texts: List[str]) -> List[List[float]]: response = requests.post(self.api_url, json={"texts": texts}) response.raise_for_status() return response.json()["embeddings"] def embed_query(self, text: str) -> List[float]: return self.embed_documents([text])[0] # 初始化嵌入模型 embeddings_model = RemoteEmbeddings("http://server-insight/embeddings/") # 初始化Solr向量存储(以基本认证为例) solr = Solr(embeddings_model, core_kwargs={ 'page_content_field': 'text_t', 'vector_field': 'vector', 'core_name': 'langchain', 'url_base': 'http://localhost:8983/solr', 'auth': HTTPBasicAuth("solr_user", "solr_pass") }) # 转为检索器 retriever = solr.as_retriever()
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

