使用 LangChain、Milvus、Cohere Command 和 Cohere embed-multilingual-v3.0 构建 RAG 聊天机器人

什么是 RAG

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

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

核心组件说明

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

  • LangChain: 一个开源框架,帮助你协调大语言模型、向量数据库、嵌入模型等之间的交互,使集成检索增强生成(RAG)管道变得更容易。
  • Milvus: 一个开源的向量数据库,专门用于高效地存储、索引和搜索大规模向量嵌入,非常适合用于检索增强生成(RAG)、语义搜索和推荐系统等场景。如果您需要更具扩展性的解决方案,或不想管理自己的基础设施,我们推荐使用 Zilliz Cloud,这是一个基于开源项目 Milvus构建的全托管向量数据库服务,并提供支持最多 100 万个向量的免费套餐。
  • Cohere Command: Cohere Command是一种强大的语言模型,专为面向任务的应用设计,强调效率和可扩展性。它在生成上下文响应方面表现出色,能够执行自然语言处理任务,如文本生成、摘要和查询回答。非常适合希望增强客户互动和自动化工作流程的企业,通过准确和相关的输出来提高效率。
  • Cohere embed-multilingual-v3.0: 这个模型提供高质量的多语言文本嵌入,能够有效理解不同语言之间的语义。它的优势在于捕捉细微的含义并促进跨语言的搜索和分析。非常适用于全球客户支持、内容推荐和多语言数据分析等应用,提升了多语言沟通和洞察提取的能力。

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

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

实战:搭建 RAG 聊天机器人

第 1 步:安装并配置 LangChain

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

第 2 步:安装并配置 Cohere Command

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

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

from langchain.chat_models import init_chat_model

llm = init_chat_model("command", model_provider="cohere")

第 3 步:安装并配置 Cohere embed-multilingual-v3.0

pip install -qU langchain-cohere
import getpass
import os

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

from langchain_cohere import CohereEmbeddings

embeddings = CohereEmbeddings(model="embed-multilingual-v3.0")

第 4 步:安装并配置 Milvus

pip install -qU langchain-milvus
from langchain_milvus import Milvus

vector_store = Milvus(embedding_function=embeddings)

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

Milvus 优化建议

Milvus 作为一个高效的向量数据库,在 RAG 系统的检索任务中发挥着关键作用。要优化其性能,应确保构建合适的索引,以平衡速度和准确性;对于响应时间至关重要的场景,可考虑使用 HNSW(Hierarchical Navigable Small World)进行高效的最近邻搜索。根据使用模式对数据进行分区,有助于提升查询性能并减少加载时间,从而提高系统的可扩展性。根据查询频率定期监控并调整缓存设置,以避免数据检索时出现延迟。向量插入时采用批处理模式,可以减少数据库锁争用,提高整体吞吐量。此外,通过调整向量的维度来优化模型参数:更高的维度可以提升检索准确性,但可能增加搜索时间,因此需根据具体用例和硬件条件找到最佳平衡点。

Cohere Command 优化建议

Cohere Command 是一款通用语言模型,可以通过提示工程、有效检索和结构化响应控制来优化 RAG 工作流程。为了提高准确性,使用 Cohere 的重新排序功能在将检索到的文档传入模型之前进行筛选和优先排序。保持输入提示简洁且结构化,减少标记开销,同时确保模型有明确的上下文。通过调整温度(0.1–0.3 以确保事实准确性)和 top-p 采样等参数来优化响应质量,以控制创造力水平。通过结合密集和稀疏检索方法实施混合搜索技术,以提高召回率和精准度。为了成本效益的扩展,缓存频繁查询的响应,并为常见知识领域预计算嵌入。在需要实时生成的场景中流式传输响应,尽量减少延迟,同时确保用户参与度。通过 Cohere 的分析工具监控 API 使用情况和延迟,以根据性能趋势微调检索策略。

Cohere embed-multilingual-v3.0 优化建议

Cohere embed-multilingual-v3.0 旨在支持多语言,使其在全球 RAG 系统中非常有用。为优化性能,需要通过处理语言特有的细节(如分词和特殊字符)来预处理多语言输入,以保持不同语言之间的一致性。实现语言检测模型以过滤和路由查询到合适的语言嵌入,从而提高速度和相关性。使用如 FAISS 或 HNSW 等索引结构加快跨多语言数据集的搜索速度。采用量化等技术压缩嵌入,以优化存储,同时确保质量。为了处理可扩展性,利用分布式存储系统高效管理多语言嵌入。持续重新训练和更新嵌入,以反映新语言或不断演变的语言模型。

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

RAG 成本计算器

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

立即使用 RAG 成本计算器

Calculate your RAG cost Calculate your RAG cost

收获与总结

你学到了什么?

哇,我们一起 embarked 了多么精彩的旅程!你不仅探索了如何整合尖端技术,还为自己装备了一个强大的工具包,以构建自己的 RAG(检索与生成)系统。通过将 LangChain 作为一个稳健的框架结合在一起,你现在知道如何无缝链接所有组件,使你的系统高效运作。你实施的 Milvus 向量数据库实现了闪电般的搜索速度,让你能够在一瞬间检索到相关信息,确保用户能即时收到最相关的答案。

我们还不能忘记 Cohere LLM 的魔力,它为你的应用注入了对话智能,使互动显得自然且引人入胜。与嵌入模型 Cohere embed-multilingual-v3.0 搭配使用,你学会了创建丰富的语义表示,从而使你的系统能够以前所未有的方式理解上下文和细微差别。

在本教程中,我们还强调了一些优化技巧,甚至分享了一个免费的成本计算器,以帮助你智能地管理和扩展项目。那么,你还在等什么呢?赶快行动!开始构建、优化和创新你自己的 RAG 应用。无限的可能性等待着你,而你新学到的技能将为你的成功铺平道路。让你的创造力翱翔,利用你的实现产生影响。祝你构建愉快!

欢迎反馈!

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

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

大规模向量数据库

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

免费试用 Zilliz Cloud

继续阅读

AI Assistant