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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:05:11