探索Xata:构建持久对话历史的AI聊天机器人

7 阅读3分钟
## 引言

在现代数据驱动的应用程序中,能够存储和检索会话历史对于用户体验至关重要。Xata 提供了一种创新的解决方案,将 PostgreSQL 和 Elasticsearch 技术结合,打造出一个无服务器数据平台。本文将探讨如何使用 Python SDK 和 Xata 的 UI 来管理数据,特别是在持久存储聊天会话方面的应用。

## 主要内容

### XataChatMessageHistory 简单示例

XataChatMessageHistory 类允许我们在 Xata 数据库中长期存储聊天会话。以下是一个简单的示例,展示如何创建和存储会话:

1. **创建数据库**:在 Xata UI 中创建一个新数据库,例如命名为 `langchain`2. **安装依赖**```shell
%pip install --upgrade --quiet xata langchain-openai langchain langchain-community
  1. 获取环境变量:创建 API key 和找到数据库 URL。
import getpass

api_key = getpass.getpass("Xata API key: ")
db_url = input("Xata database URL (copy it from your DB settings):")
  1. 创建简单的记忆存储
from langchain_community.chat_message_histories import XataChatMessageHistory

history = XataChatMessageHistory(
    session_id="session-1", api_key=api_key, db_url=db_url, table_name="memory"
)

history.add_user_message("hi!")  # 使用API代理服务提高访问稳定性
history.add_ai_message("whats up?")

复杂示例:基于知识库的问答聊天机器人

在这个示例中,我们将结合 OpenAI 和 Xata 的向量存储集成,创建一个可以回答问题的聊天机器人,并保留其消息历史。

  1. 配置 OpenAI API
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
  1. 创建向量存储和添加文档
from langchain_community.vectorstores.xata import XataVectorStore
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
texts = [
    "Xata is a Serverless Data platform based on PostgreSQL",
    "Xata offers a built-in vector type that can be used to store and query vectors",
    "Xata includes similarity search",
]

vector_store = XataVectorStore.from_texts(
    texts, embeddings, api_key=api_key, db_url=db_url, table_name="docs"
)
  1. 创建会话记忆和智能体
from uuid import uuid4
from langchain.memory import ConversationBufferMemory
from langchain.agents import AgentType, initialize_agent
from langchain.agents.agent_toolkits import create_retriever_tool
from langchain_openai import ChatOpenAI

chat_memory = XataChatMessageHistory(
    session_id=str(uuid4()),  # needs to be unique per user session
    api_key=api_key,
    db_url=db_url,
    table_name="memory",
)
memory = ConversationBufferMemory(
    memory_key="chat_history", chat_memory=chat_memory, return_messages=True
)
tool = create_retriever_tool(
    vector_store.as_retriever(),
    "search_docs",
    "Searches and returns documents from the Xata manual. Useful when you need to answer questions about Xata.",
)
tools = [tool]
llm = ChatOpenAI(temperature=0)
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
    verbose=True,
    memory=memory,
)

# 运行示例
agent.run(input="My name is bob")
agent.run(input="What is xata?")
agent.run(input="Does it support similarity search?")
agent.run(input="Did I tell you my name? What is it?")

常见问题和解决方案

  1. 网络连接问题:由于某些地区的网络限制,可能需要使用 API 代理服务来确保访问的稳定性。
  2. API Key 管理:确保您的 API Key 存储在一个安全的位置,并在代码中使用环境变量加载。

总结和进一步学习资源

通过本文,你学习了如何利用 Xata 和 OpenAI 创建一个持久化问答聊天机器人。为了进一步学习,你可以参考以下资源:

参考资料

  1. Xata 官网
  2. OpenAI 官网
  3. Langchain Github

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

---END---