在 AI 领域,Retrieval-Augmented Generation(简称 RAG)已经成为生成式 AI 应用的重要技术,尤其是在对话式 AI 中。它结合了预训练大语言模型(LLM)如 OpenAI 的 GPT 和外部知识库(存储在向量数据库中,比如 Milvus 和 Zilliz Cloud),能够生成更加精准、上下文相关的回复,并且保持信息的实时性。
一个完整的 RAG 管道通常由四个基本组件组成:向量数据库、嵌入模型、LLM 和框架。
今天,我们就来一步步教大家如何用 Python 构建一个简单的 RAG 聊天机器人!如果你对 AI 技术感兴趣,或者正在寻找提升对话式 AI 性能的方法,这篇文章一定会让你收获满满。
我们会用到哪些关键技术组件?
在本次教程中,我们将使用以下工具和技术:
- LangChain
可以帮助你轻松编排 LLM、向量存储、嵌入模型等之间的交互,从而简化 RAG 管道的集成过程。 - Milvus
Milvus 是一款开源的向量数据库,专为高效存储、索引和搜索大规模向量嵌入而优化,非常适合 RAG、语义搜索和推荐系统等应用场景。当然,如果你不想自己管理基础设施,也可以选择 Zilliz Cloud,这是一个基于 Milvus 构建的全托管向量数据库服务,还提供免费套餐,支持多达 100 万个向量。 - Fireworks AI Llama 3.1 8B Instruct
这个模型拥有 80 亿参数,擅长通过高级推理能力提供精确的指令和指导。无论是教育工具、虚拟助手还是互动内容生成,它都能生成连贯且多领域的响应,特别适合需要个性化交互的场景。 - Cohere embed-multilingual-v2.0
这款嵌入模型专注于生成高质量的多语言嵌入,能够有效实现跨语言理解和检索。它的优势在于捕捉多种语言中的语义关系,非常适合多语言搜索、推荐系统和全球内容分析等应用。
第一步:安装并设置 LangChain
首先,我们需要安装 LangChain 相关依赖。打开你的终端,输入以下命令:
%pip install --quiet --upgrade langchain-text-splitters langchain-community langgraph
第二步:安装并设置 Fireworks AI Llama 3.1 8B Instruct
接下来,我们安装 Fireworks AI 的相关依赖。执行以下代码:
pip install -qU "langchain[fireworks]"
import getpass
import os
if not os.environ.get("FIREWORKS_API_KEY"):
os.environ["FIREWORKS_API_KEY"] = getpass.getpass("Enter API key for Fireworks AI: ")
from langchain.chat_models import init_chat_model
llm = init_chat_model("accounts/fireworks/models/llama-v3p1-8b-instruct", model_provider="fireworks")
注意:你需要提前获取 Fireworks AI 的 API 密钥哦!
推荐大家去用硅基流动的API,Qwen 7B是免费的~
第三步:安装并设置 Cohere embed-multilingual-v2.0
接着,我们安装 Cohere 的嵌入模型依赖。运行以下代码:
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-v2.0")
第四步:安装并设置 Milvus
现在,我们来安装 Milvus 向量数据库。执行以下代码:
pip install -qU langchain-milvus
from langchain_milvus import Milvus
vector_store = Milvus(embedding_function=embeddings)
第五步:构建 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)
# 定义问答提示模板
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 = "nn".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()
测试聊天机器人
好啦,聊天机器人已经搭建完成!让我们来测试一下吧:
response = graph.invoke({"question": "Milvus 支持哪些数据类型?"})
print(response["answer"])
示例输出
Milvus 支持多种数据类型,包括稀疏向量、二进制向量、JSON 和数组。此外,它还能处理常见的数值和字符类型,适用于不同的数据建模需求。这使得用户可以高效地管理非结构化或多模态数据。
优化
当我们构建 RAG 系统时,优化是确保性能和效率的关键。下面是一些针对各个组件的优化建议,帮助你打造更智能、更快、更灵敏的 RAG 应用。
LangChain 优化技巧
你可以通过减少冗余操作来优化 LangChain,比如合理设计链和代理的结构,利用缓存避免重复计算。模块化设计也能让你灵活更换模型或数据库,从而快速扩展系统。
Milvus 优化技巧
Milvus 是一个高效的向量数据库,优化它的性能可以从以下几个方面入手:
- 使用 HNSW(层次化导航小世界)索引来平衡速度和准确性;
- 根据使用模式对数据进行分区,提升查询性能;
- 批量插入向量以减少数据库锁竞争;
- 调整维度大小,找到适合你硬件和用例的最佳平衡点。
Fireworks AI Llama 3.1 8B Instruct 优化技巧
这款模型性价比很高,适合中等复杂度的 RAG 应用。你可以通过限制上下文长度、调整温度参数(建议 0.1-0.3)、以及缓存高频查询来优化其性能。
Cohere embed-multilingual-v2.0 优化技巧
这个多语言嵌入模型非常适合跨语言 RAG 场景。你可以通过预处理文本去除噪声、压缩嵌入、以及批处理操作来提升效率。
如何零基础入门 / 学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?
”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人」
,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
全套AGI大模型学习大纲+路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。