如何在Langchain中使用检索器?

问题描述 投票:0回答:1

我查阅了很多文档,但对检索器部分感到困惑。

所以我正在使用用户的自定义数据构建一个聊天机器人。

  1. 用户将提供数据
  2. 数据应该更新到 Pinecone
  3. 然后用户可以用他们的数据聊天
  4. 可以有多个用户,每个用户都可以使用自己的数据聊天。

现在我正在遵循以下方法

  1. 将用户数据存储到 Pinecone 中
def doc_preprocessing(content):
    doc = Document(page_content=content)
    text_splitter = CharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=0
    )
    docs_split = text_splitter.split_documents([doc])
    return docs_split

def embedding_db(user_id, content):
    docs_split = doc_preprocessing(content)
    # Extract text from the split documents
    texts = [doc.page_content for doc in docs_split]
    vectors = embeddings.embed_documents(texts)

    # Store vectors with user_id as metadata
    for i, vector in enumerate(vectors):
        upsert_response = index.upsert(
            vectors=[
                {
                    'id': f"{user_id}",
                    'values': vector,
                    'metadata': {"user_id": str(user_id)}
                }
            ]
        )

这样它应该为给定的数据创建嵌入到松果中。

现在第二部分是与这些数据聊天。对于质量检查,我有以下

def retrieval_answer(user_id, query):
    text_field = "text"
    vectorstore = Pinecone(
        index, embeddings.embed_query, text_field
    )

    vectorstore.similarity_search(
        query,
        k=10,
        filter={
            "user_id": str(user_id)
        },
    )

    qa = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type='stuff',
        retriever=vectorstore.as_retriever(),
    )
    result = qa.run(query)
    print("Result:", result)
    return result

但我不断

Found document with no `text` key. Skipping.

当我进行 QA 时,它不是指存储在松果中的数据。它只是使用普通的 chatgpt。我不确定我在这里缺少什么。

python openai-api langchain pinecone
1个回答
0
投票

您需要使用模板创建提示,并在链中提及您检索到的文档作为上下文。或者像这样构建你的链:

rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()

更多详细信息可以在 langchain 文档中找到,访问 文档在这里:

https://python.langchain.com/docs/use_cases/question_answering/quickstart

© www.soinside.com 2019 - 2024. All rights reserved.