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

构建自定义数据库聊天机器人遇VectorStoreIndex属性错误求助

问题解决:VectorStoreIndex无documents属性及聊天机器人记忆功能实现

问题背景

构建首个基于自有数据库的聊天机器人时,代码最后环节触发错误:AttributeError: 'VectorStoreIndex' object has no attribute 'documents',多次修改无法解决向量索引加载及记忆功能添加的问题。

报错原因

LlamaIndex的VectorStoreIndex对象本身并不暴露documents和embeddings属性,你错误地尝试直接访问这些属性来转换为LangChain的VectorStore,同时代码存在重复加载索引、混淆LlamaIndex与LangChain组件逻辑的问题。

修正后的完整代码

import os
from llama_index import SimpleDirectoryReader, GPTVectorStoreIndex, LLMPredictor, PromptHelper
from llama_index import ServiceContext, StorageContext, load_index_from_storage
from llama_index.langchain_helpers.chain_wrapper import LlamaIndexRetriever
from langchain import OpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
import gradio as gr

# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = "你的API密钥"
llm_name = "gpt-3.5-turbo"

def create_index(path):
    max_input = 4096
    num_output = 4096
    tokens = 200
    chunk_size = 500

    # 配置PromptHelper
    promptHelper = PromptHelper(max_input, num_output, chunk_overlap_ratio=0.1, chunk_size_limit=1024)
    # 配置LLM预测器
    llmPredictor = LLMPredictor(llm=OpenAI(temperature=0, model_name=llm_name, max_tokens=tokens))
    # 加载文档(合并CSV和PDF,可根据实际路径调整)
    docs = SimpleDirectoryReader(path).load_data()
    # 创建服务上下文
    service_context = ServiceContext.from_defaults(llm_predictor=llmPredictor, prompt_helper=promptHelper)
    # 创建并持久化向量索引
    vectorIndex = GPTVectorStoreIndex.from_documents(documents=docs, service_context=service_context)
    vectorIndex.storage_context.persist(persist_dir="store_test")

# 加载已持久化的索引
storage_context = StorageContext.from_defaults(persist_dir="/Users/renia/Praca_dyplomowa/Python_script/store_test")
vectorIndex = load_index_from_storage(storage_context)

# 创建LlamaIndex到LangChain的兼容检索器
retriever = LlamaIndexRetriever(index=vectorIndex)

# 配置对话记忆
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

# 创建对话检索链
llm = OpenAI(temperature=0, model_name=llm_name)
qa_chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=retriever,
    memory=memory
)

# 定义聊天机器人响应函数
def chatbot_response(message, history):
    # 调用对话链获取结果
    result = qa_chain({"question": message})
    return result["answer"]

# 创建Gradio聊天界面
gr.ChatInterface(
    chatbot_response,
    title="Iron Ladies Chatbot",
    description="Ask the Iron Ladies chatbot any question!",
    theme="dark",
    examples=[
        ["Tell me about Iron Ladies.", "The Iron Ladies is a team of powerful female superheroes :)"],
        ["What are their powers?", "Each member of the Iron Ladies has unique superpowers."],
        ["Who is the leader?", "The leader of the Iron Ladies is Maja - natural born leader :D."],
    ]
).launch()

关键修改说明

  • 移除错误的属性访问:删除了尝试访问VectorStoreIndex.documents的to_vector_store函数,改用LlamaIndex官方提供的LlamaIndexRetriever实现与LangChain的兼容,无需手动提取文档和嵌入向量。
  • 简化索引加载逻辑:去掉重复的索引加载代码,只保留一次从持久化目录加载索引的逻辑。
  • 正确实现对话记忆:使用LangChain的ConversationBufferMemory配合ConversationalRetrievalChain,自动管理对话历史,无需手动处理记忆拼接。
  • 优化响应函数:直接调用对话链的接口获取结果,避免手动拆分响应内容的冗余逻辑。

内容的提问来源于stack exchange,提问作者Renata Ka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:51:32