今天主要给大家介绍一下如何使用 LangChain 快速构建 RAG 应用

01 LangChain、LangSmith、RAG 简介

LangChain 是一个用于开发由大语言模型(LLM)驱动的应用程序的开源框架,通过模块化设计帮助开发者高效集成大语言模型与外部工具、数据源及业务流程。

LangChain 主要有以下核心功能与组件:

  1. 模型(Models):统一接口调用文本生成、嵌入模型。
  2. 链(Chains):将多步骤任务组合为工作流。
  3. 代理(Agents):动态调用工具(搜索引擎/API/代码执行器),实现自主决策。
  4. 记忆(Memory):管理对话历史与任务状态(短期缓存或长期数据库存储)。
  5. 检索增强(RAG):结合外部数据源(文档/数据库)实时补充模型知识。
  6. 提示模板(Prompts):动态生成优化提示词,提升模型输出质量。

LangChain 已经从 SDK 发展到 Agent 一站式开发平台,现阶段已成为构建 AI 应用的核心基础设施。

LangSmith 是一个用于构建生产级 LLM 应用程序的平台。 通过提供可视化监控和评估 LLM 应用原型的平台,LangSmith 提升了开发者效率,且支持独立运行。

LangSmith 有以下核心功能:

  1. Tracing:记录追踪 LLM 生成内容和调用情况;
  2. Monitoring:通过 LangSmith 平台可视化 Tracing 记录各项指标;
  3. Datasets:为 LLM 应用原型提供各类数据集及其管理功能;
  4. Evaluation:LLM 应用性能、多样性、准确性等各项评估,需要 Datasets 支持。

RAG(Retrieval-Augmented Generation,检索增强生成) 技术是一种结合信息检索与文本生成的混合技术框架。

RAG 通过引入外部知识库,利用检索模块(Retriever)从大量文档中提取相关信息,并将这些信息传递给生成模块(Generator),生成更准确且有用的回答,从而弥补大模型在处理领域问题和实时任务时的不足。

RAG 是 LangChain 典型的应用场景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

02 构建 RAG 应用

我们使用 LangChain 构建 RAG 应用,主要分为以下几个步骤:

  1. 加载文档:将原始数据加载到 LangChain 中;
  2. 文档分割:将加载的文档分割成较小的块,以适应模型的上下文窗口,并更容易进行向量嵌入和检索;
  3. 存储嵌入:将分割后的文档内容嵌入到向量空间,并存储到向量数据库中,以便后续检索;
  4. 检索文档:通过查询向量数据库,检索与问题最相关的文档片段;
  5. 生成回答:将检索到的文档片段与用户问题组合,生成并返回答案。

我们在构建 RAG 应用中,会使用通义千问作为大语言模型服务,使用 LangSmith 可视化监控和评估 RAG 应用。

因此我们需要分别去阿里云百炼平台获取通义千问的 API Key,去 LangSmith 获取 API Key,然后以环境变量的方式设置到系统中。

在阿里云百炼平台创建 API Key,然后将其值设置到系统环境变量 DASHSCOPE_API_KEY 中。

在 LangSmith 创建 API Key。

然后将其值设置到系统环境变量 LANGCHAIN_API_KEY 中,同时还需要在系统环境变量中设置 LANGCHAIN_TRACING_V2 的值为 true。

export LANGCHAIN_TRACING_V2=true

我们在正式开发代码前,还需要安装 RAG 应用依赖的 python 库:

pip install langchain langchain_community langchain_chroma beautifulsoup4 openai dashscope -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

等安装完成依赖的 python 库后,我们就可以开始正式进行开发。

我们需要导入必要的库和获取环境变量值:

import os

import bs4
from langchain_community.chat_models import ChatTongyi
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import PromptTemplate
from langsmith import traceable

# 从环境变量中获取阿里云百练的 API Key
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
# 阿里云百练的官网地址
DASHSCOPE_API_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"

步骤1:加载文档

# 使用 WebBaseLoader 从网页加载内容,并仅保留标题、标题头和文章内容
bs4_strainer = bs4.SoupStrainer(class_=("post-title", "post-header", "post-content"))
loader = WebBaseLoader(
    web_paths=("https://lilianweng.github.io/posts/2025-05-01-thinking/",),
    bs_kwargs={"parse_only": bs4_strainer},
)
docs = loader.load()

步骤2:文档分割

# 使用 RecursiveCharacterTextSplitter 将文档分割成块,每块1000字符,重叠200字符
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000, chunk_overlap=200, add_start_index=True
)
all_splits = text_splitter.split_documents(docs)

步骤3:存储嵌入

# 使用 Chroma 向量存储和 DashScopeEmbeddings(model="text-embedding-v1") 模型,将分割的文档块嵌入并存储
vector_store = Chroma.from_documents(
    documents=all_splits,
    embedding=DashScopeEmbeddings(model="text-embedding-v1")
)

步骤4:检索文档

# 使用 VectorStoreRetriever 从向量存储中检索与查询最相关的文档
retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 3})

步骤5:生成回答

llm = ChatTongyi(model="qwen-max")
# 自定义提示词模板
template = """Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Use three sentences maximum and keep the answer as concise as possible.
Always say "thanks for asking!" at the end of the answer.

{context}

Question: {question}

Helpful Answer:"""
rag_prompt = PromptTemplate.from_template(template)


# 定义格式化文档的函数
defformat_docs(docs):
return"\n\n".join(doc.page_content for doc in docs)


# 使用 LangChain Expression Language (LCEL) 构建 RAG Chain
rag_chain = (
        {"context": retriever | format_docs, "question": RunnablePassthrough()}
        | rag_prompt
        | llm
        | StrOutputParser()
)

# 流式生成回答
for chunk in rag_chain.stream("Why We Think?"):
    print(chunk, end="", flush=True)

最后完整的代码(rag_app.py)如下:

import os

import bs4
from langchain_community.chat_models import ChatTongyi
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import PromptTemplate
from langsmith import traceable

# 从环境变量中获取阿里云百练的 API Key
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
# 阿里云百练的官网地址
DASHSCOPE_API_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"


@traceable(project_name="langchain_rag_app")
defrun_rag():
# 1. 加载文档
# 使用 WebBaseLoader 从网页加载内容,并仅保留标题、标题头和文章内容
    bs4_strainer = bs4.SoupStrainer(class_=("post-title", "post-header", "post-content"))
    loader = WebBaseLoader(
        web_paths=("https://lilianweng.github.io/posts/2025-05-01-thinking/",),
        bs_kwargs={"parse_only": bs4_strainer},
    )
    docs = loader.load()

# 2. 文档分割
# 使用 RecursiveCharacterTextSplitter 将文档分割成块,每块1000字符,重叠200字符
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000, chunk_overlap=200, add_start_index=True
    )
    all_splits = text_splitter.split_documents(docs)

# 3. 存储嵌入
# 使用 Chroma 向量存储和 DashScopeEmbeddings(model="text-embedding-v1") 模型,将分割的文档块嵌入并存储
    vector_store = Chroma.from_documents(
        documents=all_splits,
        embedding=DashScopeEmbeddings(model="text-embedding-v1")
    )

# 4. 检索文档
# 使用 VectorStoreRetriever 从向量存储中检索与查询最相关的文档
    retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 3})

# 5. 生成回答
    llm = ChatTongyi(model="qwen-max")
# 自定义提示词模板
    template = """Use the following pieces of context to answer the question at the end.
    If you don't know the answer, just say that you don't know, don't try to make up an answer.
    Use three sentences maximum and keep the answer as concise as possible.
    Always say "thanks for asking!" at the end of the answer.

    {context}

    Question: {question}

    Helpful Answer:"""
    rag_prompt = PromptTemplate.from_template(template)

# 定义格式化文档的函数
defformat_docs(docs):
return"\n\n".join(doc.page_content for doc in docs)

# 使用 LangChain Expression Language (LCEL) 构建 RAG Chain
    rag_chain = (
            {"context": retriever | format_docs, "question": RunnablePassthrough()}
            | rag_prompt
            | llm
            | StrOutputParser()
    )

# 流式生成回答
for chunk in rag_chain.stream("Why We Think?"):
        print(chunk, end="", flush=True)


if __name__ == '__main__':
    run_rag()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

03 使用 RAG 应用

我们可以使用 IDE 工具(如:PyCharm)运行 RAG 应用:

运行完成 RAG应用后,我们还可以进入 LangSmith 平台查看 RAG 应用的调用日志记录:

结语

相信你现在已经知道如何使用 LangChain 快速构建 RAG 应用。建议你不妨亲自动手去实践,使用 LangChain 去构建出一个自己的 RAG 应用。

大模型算是目前当之无愧最火的一个方向了,算是新时代的风口!有小伙伴觉得,作为新领域、新方向人才需求必然相当大,与之相应的人才缺乏、人才竞争自然也会更少,那转行去做大模型是不是一个更好的选择呢?是不是更好就业呢?是不是就暂时能抵抗35岁中年危机呢?

答案当然是这样,大模型必然是新风口!

那如何学习大模型 ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。但是具体到个人,只能说是:

最先掌握AI的人,将会比较晚掌握AI的人有竞争优势。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

但现在很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是,基于此我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习路线完善出来!

在这里插入图片描述

在这个版本当中:

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型路线+学习教程已经给大家整理并打包分享出来, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型学习资源包》免费分享(安全咨料,放心领取)👈

一、大模型经典书籍(免费分享)

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源

在这里插入图片描述

二、640套大模型报告(免费分享)

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、大模型系列视频教程(免费分享)

在这里插入图片描述

四、2025最新大模型学习路线(免费分享)

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码免费领取

👉CSDN大礼包🎁:全网最全《LLM大模型学习资源包》免费分享(安全资料,放心领取)👈

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐