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

Langchain对接Weaviate向量数据库报错ValueError求助

LangChain集成Weaviate报错ValueError的解决方法

问题分析

报错信息明确指出:Unknown argument "nearText" on field "Products" of type "GetObjectsObj",核心原因有两个:

  • Weaviate v1.19及以上版本已弃用nearText查询参数,替换为nearVector(需要手动传入文本向量);
  • 你的Weaviate类Products未启用文本嵌入模块(比如text2vec-openai),导致无法识别nearText查询逻辑。

解决方案

方案1:给Weaviate类启用text2vec-openai模块

登录Weaviate控制台,检查Products类的Schema配置,确保包含以下内容(启用OpenAI自动生成文本向量):

{
  "classes": [
    {
      "class": "Products",
      "vectorizer": "text2vec-openai",
      "properties": [
        {
          "name": "description",
          "dataType": ["string"]
        }
      ]
    }
  ]
}

启用模块后,Weaviate会自动为description字段生成向量,nearText查询就能正常使用了。

方案2:手动生成向量,用nearVector查询

如果不想依赖Weaviate的自动向量生成,可通过LangChain的OpenAIEmbeddings手动生成查询向量,再用nearVector进行检索:

from langchain.embeddings import OpenAIEmbeddings

# 初始化嵌入模型
embeddings = OpenAIEmbeddings(openai_api_key=OPEN_API_KEY)
# 生成查询文本对应的向量
query_vector = embeddings.embed_query("top rated watches")

# 创建检索器时指定nearVector参数
retriever = vectorstore.as_retriever(
    search_kwargs={
        "nearVector": {"vector": query_vector},
        "k": 4  # 控制返回的相关结果数量
    }
)

方案3:指定LangChain Weaviate的搜索类型

直接在初始化Weaviate向量存储或创建检索器时,指定使用near_vector搜索类型:

# 初始化向量存储时指定
vectorstore = Weaviate(client, "Products", "description", search_type="near_vector")

# 或者创建检索器时指定
retriever = vectorstore.as_retriever(search_type="near_vector", search_kwargs={"vector": query_vector})

方案4:降级Weaviate版本(不推荐)

如果不想修改代码,可将Weaviate降级到v1.18及以下版本,这些版本仍支持nearText参数,但长期来看不建议依赖旧版本的兼容性。

修改后的完整代码示例

from langchain.vectorstores.weaviate import Weaviate
from langchain.llms import OpenAI
from langchain.chains import RetrievalQAWithSourcesChain
import weaviate
from langchain.prompts.prompt import PromptTemplate
from langchain.embeddings import OpenAIEmbeddings

OPEN_API_KEY="sk-..."

# 连接Weaviate服务
auth_config = weaviate.auth.AuthApiKey(api_key="api_key")
client = weaviate.Client(
    url="https://abc.weaviate.network",
    auth_client_secret=auth_config,
    additional_headers={
        "X-OpenAI-Api-Key": OPEN_API_KEY
    }
)

vectorstore = Weaviate(client, "Products", "description")

# 生成查询文本的向量
embeddings = OpenAIEmbeddings(openai_api_key=OPEN_API_KEY)
query = "top rated watches"
query_vector = embeddings.embed_query(query)

# 初始化LLM
llm = OpenAI(model_name="text-davinci-003", temperature=0,
             max_tokens=200, openai_api_key=OPEN_API_KEY)

# 自定义Prompt模板
template = """
Return product and price information 
--------------------
{summaries}
"""
prompt = PromptTemplate(
    input_variables=["summaries"],
    template=template,
)

# 创建带nearVector参数的检索器
retriever = vectorstore.as_retriever(
    search_kwargs={
        "nearVector": {"vector": query_vector},
        "k": 4
    }
)

# 构建Chain并执行查询
chain = RetrievalQAWithSourcesChain.from_chain_type(llm=llm, retriever=retriever,
                                                     return_source_documents=False,
                                                     chain_type_kwargs={"prompt": prompt})

result = chain(query, return_only_outputs=True)
print(result)

内容的提问来源于stack exchange,提问作者Syed Mujeeb H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:15:00