使用 LangChain、pgvector、Anthropic Claude 3.5 Haiku 和 voyage-3-large 构建 RAG 聊天机器人

什么是 RAG

检索增强生成(Retrieval-Augmented Generation,简称 RAG)正引领生成式 AI,尤其是对话式 AI 的新潮流。它将预训练的大语言模型(LLM,如 OpenAI 的 GPT)与存储于向量数据库(如 MilvusZilliz Cloud)中的外部知识源相结合,从而让模型输出更准确、更具上下文相关性,并且能够及时融合最新信息。 一个完整的 RAG 系统通常包含以下四大核心组件:

  • 向量数据库:用于存储与检索向量化后的知识;
  • 嵌入模型:将文本转为向量表示,为后续的相似度搜索提供支持;
  • 大语言模型(LLM):根据检索到的上下文和用户提问生成回答;
  • 框架:负责将上述组件串联成可用的应用。

核心组件说明

本教程将带你在 Python 环境下,借助以下组件一步步搭建一个初级的 RAG 聊天机器人:

  • LangChain: 一个开源框架,帮助你协调大语言模型、向量数据库、嵌入模型等之间的交互,使集成检索增强生成(RAG)管道变得更容易。
  • Pgvector: 一个面向 PostgreSQL 的开源扩展,可高效存储和查询高维向量数据,适用于机器学习和 AI 应用。该扩展专为处理嵌入数据而设计,支持使用 HNSW 和 IVFFlat 等算法进行快速的近似最近邻(ANN)搜索。但由于它只是传统搜索的向量搜索附加组件,而非专门构建的向量数据库,因此在可扩展性、可用性以及其他企业级应用所需的高级功能方面存在不足。因此,如果您需要更具扩展性的解决方案,或不想管理自己的基础设施,我们推荐使用 Zilliz Cloud,这是一个基于开源项目 Milvus构建的全托管向量数据库服务,并提供支持最多 100 万个向量的免费套餐。)
  • Anthropic Claude 3.5 Haiku: 这个模型在Claude 3的基础上增强了对细腻语言的理解和生成能力。它在创意写作、对话式人工智能和复杂查询处理方面表现卓越。最适合那些对回应的清晰度和深度要求较高的任务,Claude 3.5在效率与深刻见解之间取得了良好的平衡。
  • Voyage-3-Large: 此模型旨在用于生成任务,提供增强的创造力和上下文理解。经过对多样化数据集的强大训练,它在生成连贯的叙事和对话方面表现出色,非常适合用于讲故事、内容创作以及需要富有想象力输出的互动体验等应用。

完成本教程后,你将拥有一个能够基于自定义知识库回答问题的完整聊天机器人。

注意事项: 使用专有模型前请确保已获取有效 API 密钥。

实战:搭建 RAG 聊天机器人

第 1 步:安装并配置 LangChain

%pip install --quiet --upgrade langchain-text-splitters langchain-community langgraph

第 2 步:安装并配置 Anthropic Claude 3.5 Haiku

pip install -qU "langchain[anthropic]"
import getpass
import os

if not os.environ.get("ANTHROPIC_API_KEY"):
  os.environ["ANTHROPIC_API_KEY"] = getpass.getpass("Enter API key for Anthropic: ")

from langchain.chat_models import init_chat_model

llm = init_chat_model("claude-3-5-haiku-latest", model_provider="anthropic")

第 3 步:安装并配置 voyage-3-large

pip install -qU langchain-voyageai
import getpass
import os

if not os.environ.get("VOYAGE_API_KEY"):
  os.environ["VOYAGE_API_KEY"] = getpass.getpass("Enter API key for Voyage AI: ")

from langchain-voyageai import VoyageAIEmbeddings

embeddings = VoyageAIEmbeddings(model="voyage-3-large")

第 4 步:安装并配置 pgvector

pip install -qU langchain-postgres
from langchain_postgres import PGVector

vector_store = PGVector(
    embeddings=embeddings,
    collection_name="my_docs",
    connection="postgresql+psycopg://...",
)

第 5 步:正式构建 RAG 聊天机器人

在设置好所有组件之后,我们来搭建一个简单的聊天机器人。我们将使用 Milvus介绍文档 作为私有知识库。你可以用你自己的数据集替换它,来定制你自己的 RAG 聊天机器人。

import bs4
from langchain import hub
from langchain_community.document_loaders import WebBaseLoader
from langchain_core.documents import Document
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langgraph.graph import START, StateGraph
from typing_extensions import List, TypedDict

# 加载并拆分博客内容
loader = WebBaseLoader(
    web_paths=("https://milvus.io/docs/overview.md",),
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            class_=("doc-style doc-post-content")
        )
    ),
)

docs = loader.load()

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
all_splits = text_splitter.split_documents(docs)

# 索引分块
_ = vector_store.add_documents(documents=all_splits)

# Define prompt for question-answering
prompt = hub.pull("rlm/rag-prompt")


# 定义应用状态
class State(TypedDict):
    question: str
    context: List[Document]
    answer: str


# 定义应用步骤
def retrieve(state: State):
    retrieved_docs = vector_store.similarity_search(state["question"])
    return {"context": retrieved_docs}


def generate(state: State):
    docs_content = "\n\n".join(doc.page_content for doc in state["context"])
    messages = prompt.invoke({"question": state["question"], "context": docs_content})
    response = llm.invoke(messages)
    return {"answer": response.content}


# 编译应用并测试
graph_builder = StateGraph(State).add_sequence([retrieve, generate])
graph_builder.add_edge(START, "retrieve")
graph = graph_builder.compile()

测试聊天机器人

Yeah! You've built your own chatbot. Let's ask the chatbot a question.

response = graph.invoke({"question": "What data types does Milvus support?"})
print(response["answer"])

示例输出

Milvus 支持多种数据类型,包括稀疏向量、二进制向量、JSON 和数组。此外,它还支持常见的数值类型和字符类型,使其能够满足不同的数据建模需求。这使得用户能够高效地管理非结构化或多模态数据。

优化小贴士

在搭建 RAG 系统时,合理调优能显著提升性能与效率。下面为各组件提供一些实用建议:

LangChain 优化建议

为了优化 LangChain,需要通过高效地构建链路和代理来减少工作流程中的冗余操作。使用缓存避免重复计算,从而加快系统速度,并尝试采用模块化设计,确保模型或数据库等组件能够轻松替换。这将提供灵活性和效率,使您能够快速扩展系统,而无需不必要的延迟或复杂性。

pgvector 优化建议

为了优化 pgvector 在检索增强生成(RAG)设置中的表现,可以考虑使用 GiST 或 IVFFlat 索引向量,以显著加快搜索查询并提高检索性能。确保在查询执行过程中利用并行化,使得多个查询能够同时处理,尤其是在处理大数据集时。通过调整向量存储大小并在可能的情况下使用压缩嵌入来优化内存使用。为了进一步提升查询速度,可以实现预过滤技术,在查询之前缩小搜索空间。定期重建索引,以确保其与新数据保持同步。通过微调向量化模型来减少维度,同时不牺牲准确性,从而提升存储效率和检索时间。最后,仔细管理资源分配,利用水平扩展处理更大的数据集,并将计算密集型操作卸载到专用处理单元,以保持在高流量期间的响应能力。

Anthropic Claude 3.5 Haiku 优化建议

Claude 3.5 Haiku 相较于其前身,提供了更高的效率和准确性,使其非常适合对延迟敏感的 RAG 工作流程。通过利用结构化提示,优化以减少标记浪费,同时保持清晰度。使用自适应检索策略,使得更简单的查询接收到更少的上下文文档,避免过度计算。实现基于嵌入的重新排名,确保只有最相关的信息传递给模型,从而提高速度和响应质量。通过缓存高流量查询并采用响应摘要技术,减少 API 调用,以简化输出。调整温度和核采样,确保响应保持事实准确并结构良好,通常将温度保持在 0.1-0.2 以确保严格准确。优化大规模检索任务的批处理,降低多个单独查询的开销。将 Claude 3.5 Haiku 与更高端模型战略性结合使用,以实现生产 RAG 系统中成本效益的扩展。

voyage-3-large 优化建议

voyage-3-large 提供了增强的推理能力,非常适合需要深度上下文理解的复杂 RAG 任务。通过实施多步骤排名系统来优化检索,优先考虑高度相关的文档,同时过滤掉低质量信息。使用结构化提示,清晰划定上下文和用户查询,以改善理解。调整温度(0.1–0.3)并微调 top-k 和 top-p 设置,以维持准确性并防止过度变化。利用并行推理和请求批处理来提高处理效率。利用缓存来应对高频查询,以降低成本和延迟。在多模型设置中,部署 voyage-3-large 处理复杂推理任务,同时对较不复杂的查询使用较小的模型,以有效平衡成本和性能。

通过系统性实施这些优化方案,RAG 系统将在响应速度、结果准确率、资源利用率等维度获得全面提升。 AI 技术迭代迅速,建议定期进行压力测试与架构调优,持续跟踪最新优化方案,确保系统在技术发展中始终保持竞争优势。

RAG 成本计算器

估算 RAG 成本时,需要分析向量存储、计算资源和 API 使用等方面的开销。主要成本驱动因素包括向量数据库查询、嵌入生成和 LLM 推理。RAG 成本计算器是一款免费的在线工具,可快速估算构建 RAG 的费用,涵盖切块(chunking)、嵌入、向量存储/搜索和 LLM 生成。能帮助你发现节省费用的机会,最高可通过无服务器方案在向量存储成本上实现 10 倍降本。

立即使用 RAG 成本计算器

Calculate your RAG cost Calculate your RAG cost

收获与总结

通过深入这个教程,你已经解锁了从零开始构建 RAG 系统的魔力,使用最前沿的工具!你学习了 LangChain 如何作为粘合剂,无缝地协调组件之间的数据流,同时简化复杂的工作流程。通过集成 pgvector 作为你的向量数据库,你亲眼目睹了 PostgreSQL 如何高效地转变成一个强大的存储和检索嵌入的工具,使相似性搜索变得快速且可扩展。接着是 Anthropic Claude 3.5 Haiku,它以闪电般的速度和成本效益给你留下深刻印象,将检索到的上下文转化为连贯、类人响应。别忘了 voyage-3-large,这个嵌入模型将原始文本转化为丰富的数值表示,确保你的系统理解语言的细微差别。这些工具共同创建了一个不仅仅是功能性的而是智能的 RAG 管道,能够精确且深入地回答问题。

但等等,还有更多!你还获得了一些优化性能的专业建议,比如调整嵌入的块大小或微调检索策略,以平衡速度和准确性。教程甚至提供了一个 免费 RAG 成本计算器,帮助你在不牺牲质量的情况下预算资源。现在你已经看到这些组件是如何结合在一起的,想象一下可能性:定制的聊天机器人、研究助手,甚至是 AI 驱动的知识库,量身定制以满足你的需求。你不再只是按照步骤操作——你已经具备了创新的能力。那么,接下来是什么呢?调整代码,尝试新的数据集,推动你的 RAG 系统达到极限。智能应用的未来将在你的手中构建,你拥有让它成真的工具。让我们开始吧!🚀

欢迎反馈!

我们很期待听到你的使用心得与建议! 🌟 你可以:

  • 在下方留言;
  • 加入 Milvus Discord 社区,与全球 AI 爱好者一起交流。 如果你觉得本教程对你有帮助,别忘了给 Milvus GitHub 仓库点个 ⭐,这将激励我们不断创作!💖

大规模向量数据库

Zilliz Cloud 是一个专为大规模应用构建的全托管向量数据库,完美适配您的 RAG 应用。

免费试用 Zilliz Cloud

继续阅读

AI Assistant