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

如何修复LangChain中出现的‘AttributeError: 'str' object has no attribute 'query'’错误?

如何修复LangChain中出现的‘AttributeError: 'str' object has no attribute 'query'’错误?

嘿,我来帮你搞定这个问题!你遇到的这个错误根源其实很明确,咱们一步步捋清楚怎么修复。

错误的核心原因

你在初始化PineconeVectorStore的时候犯了一个关键小错误:把Pinecone索引的名称字符串("index-1")直接传给了index参数,但LangChain的PineconeVectorStore需要的是一个实际的Pinecone Index对象,而不是字符串名称。这就导致后续retriever尝试调用query方法时,实际上是在对一个字符串对象执行操作——字符串哪来的query方法呀,自然就抛出这个报错了。

具体修复步骤

1. 先获取实际的Pinecone Index对象

你需要先通过Pinecone客户端连接到你的索引,拿到真正的Index实例:

import pinecone

# 初始化Pinecone客户端
pinecone.init(api_key=pc_key)
# 传入索引名称,获取实际的Index对象
pc_index = pinecone.Index("index-1")

2. 修正PineconeVectorStore的初始化代码

把之前传字符串的地方换成刚拿到的pc_index对象:

from langchain.vectorstores import PineconeVectorStore
from langchain.embeddings.openai import OpenAIEmbeddings

# 注意这里的index参数现在是pc_index对象,不是字符串了
retriever = PineconeVectorStore(
    pinecone_api_key=pc_key,
    index=pc_index,
    embedding=OpenAIEmbeddings()
).as_retriever()

顺便提一句:你之前变量名写成了retriver,建议改成retriever(拼写正确点,避免后续自己看代码懵)

3. 调整QA链的context处理逻辑

另外,你原来的QA链里直接把retriever赋值给context,这样可能会导致retriever返回的文档列表无法被prompt模板直接使用。咱们把它改成先让retriever处理问题,再把返回的文档格式化成字符串:

from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 定义一个格式化文档的小函数,把文档列表转成拼接后的字符串
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

# 重构后的QA链
qa_chain = (
    {
        # 让输入的question先经过retriever检索文档,再格式化
        "context": RunnablePassthrough() | retriever | format_docs,
        "question": RunnablePassthrough(),
    }
    | review_template
    | model
    | StrOutputParser()
)

测试修复效果

现在你再调用qa_chain.invoke("你的问题"),应该就能正常从Pinecone向量库检索到相关文档,然后生成符合你预期的用户回答了。

备注:内容来源于stack exchange,提问作者Denuwan Kalubowila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:43:10