Skip to main content
CrateDB 是一款分布式、可扩展的 SQL 数据库,可近实时地存储和分析海量数据, 即使面对复杂查询也能胜任。它兼容 PostgreSQL,基于 Lucene,并继承自 Elasticsearch。

安装与设置

设置 CrateDB

有两种方式可以快速开始使用 CrateDB。或者,选择其他 [CrateDB 安装方式]。

在本地计算机上启动 CrateDB

示例:使用 Docker 或 Podman 在禁用安全功能的情况下运行单节点 CrateDB 实例。不建议在生产环境中使用。
docker run --name=cratedb --rm \
  --publish=4200:4200 --publish=5432:5432 --env=CRATE_HEAP_SIZE=2g \
  crate:latest -Cdiscovery.type=single-node

在 CrateDB Cloud 上部署集群

CrateDB Cloud 是一项托管的 CrateDB 服务。注册免费试用

安装客户端

安装最新版本的 langchain-cratedb 包和本教程所需的其他包。
pip install -U langchain-cratedb langchain-openai unstructured

文档

有关 CrateDB 封装的更详细介绍,请参阅[使用 LangChain 与 CrateDB]。另请参阅 [CrateDB 的所有功能],了解 CrateDB 提供的其他功能。

功能

CrateDB 的 LangChain 适配器提供了将 CrateDB 用作向量存储、文档加载器和聊天消息存储的 API。

向量存储

使用 CrateDB 的向量存储功能,围绕 FLOAT_VECTORKNN_MATCH 进行相似性搜索等操作。另请参阅 [CrateDBVectorStore 教程]。 确保您已配置有效的 OpenAI API 密钥。
export OPENAI_API_KEY=sk-XJZ...
from langchain_community.document_loaders import UnstructuredURLLoader
from langchain_cratedb import CrateDBVectorStore
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter

loader = UnstructuredURLLoader(urls=["https://github.com/langchain-ai/langchain/raw/refs/tags/langchain-core==0.3.28/docs/docs/how_to/state_of_the_union.txt"])
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

# 连接到本地自管理 CrateDB 实例
CONNECTION_STRING = "crate://?schema=testdrive"

store = CrateDBVectorStore.from_documents(
    documents=docs,
    embedding=embeddings,
    collection_name="state_of_the_union",
    connection=CONNECTION_STRING,
)

query = "What did the president say about Ketanji Brown Jackson"
docs_with_score = store.similarity_search_with_score(query)

文档加载器

使用基于 SQLAlchemy 的文档加载器 CrateDBLoader 从 CrateDB 数据库表加载文档。另请参阅 [CrateDBLoader 教程]。 在您的应用中使用文档加载器:
import sqlalchemy as sa
from langchain_community.utilities import SQLDatabase
from langchain_cratedb import CrateDBLoader

# 连接到本地自管理 CrateDB 实例
CONNECTION_STRING = "crate://?schema=testdrive"

db = SQLDatabase(engine=sa.create_engine(CONNECTION_STRING))

loader = CrateDBLoader(
    'SELECT * FROM sys.summits LIMIT 42',
    db=db,
)
documents = loader.load()

聊天消息历史

使用 CrateDB 存储聊天消息。 另请参阅 [CrateDBChatMessageHistory 教程]。 在您的应用中使用聊天消息历史:
from langchain_cratedb import CrateDBChatMessageHistory

# 连接到本地自管理 CrateDB 实例
CONNECTION_STRING = "crate://?schema=testdrive"

message_history = CrateDBChatMessageHistory(
    session_id="test-session",
    connection=CONNECTION_STRING,
)

message_history.add_user_message("hi!")

完整缓存

标准/完整缓存可以避免在提供的提示与已遇到的提示完全相同时调用 LLM。 另请参阅 [CrateDBCache 示例]。 在您的应用中使用完整缓存:
import sqlalchemy as sa
from langchain.globals import set_llm_cache
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_cratedb import CrateDBCache

# 配置缓存
engine = sa.create_engine("crate://crate@localhost:4200/?schema=testdrive")
set_llm_cache(CrateDBCache(engine))

# 调用 LLM 对话
llm = ChatOpenAI(
    model_name="gpt-4.1",
    temperature=0.7,
)
print()
print("Asking with full cache:")
answer = llm.invoke("What is the answer to everything?")
print(answer.content)

语义缓存

语义缓存允许用户根据用户输入与之前缓存输入之间的语义相似性检索缓存的提示。它也可以避免在不需要时调用 LLM。 另请参阅 [CrateDBSemanticCache 示例]。 在您的应用中使用语义缓存:
import sqlalchemy as sa
from langchain.globals import set_llm_cache
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_cratedb import CrateDBSemanticCache

# 配置嵌入
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 配置缓存
engine = sa.create_engine("crate://crate@localhost:4200/?schema=testdrive")
set_llm_cache(
    CrateDBSemanticCache(
        embedding=embeddings,
        connection=engine,
        search_threshold=1.0,
    )
)

# 调用 LLM 对话
llm = ChatOpenAI(model_name="gpt-4.1")
print()
print("Asking with semantic cache:")
answer = llm.invoke("What is the answer to everything?")
print(answer.content)