news 2026/9/3 5:08:11

Day 76:【99天精通Python】AI 进阶 - LangChain 入门 - 给 AI 挂载“外脑“

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 76:【99天精通Python】AI 进阶 - LangChain 入门 - 给 AI 挂载“外脑“

Day 76:【99天精通Python】AI 进阶 - LangChain 入门 - 给 AI 挂载"外脑"

前言

欢迎来到第76天!

在昨天的课程中,我们直接调用了 OpenAI 的 API。虽然它很聪明,但它有两个致命缺点:

  1. 知识滞后:它只知道训练截止日期之前的事情(比如 GPT-3.5 截止到 2021 年)。
  2. 私有数据盲区:它不知道你公司的内部文档,也不知道你昨天写的日记。

为了解决这个问题,我们需要LangChain
LangChain 是目前最火的 LLM 开发框架。它可以把大模型(大脑)与外部数据源(书籍、PDF、数据库)连接起来,实现RAG (检索增强生成)。简单说,就是让 AI 先去翻书,翻到了再回答你。

本节内容:

  • LangChain 核心概念
  • 模型 (Model) 与 提示词模板 (PromptTemplate)
  • 链 (Chain) 的概念
  • 加载本地文档 (Loader)
  • 向量数据库与检索 (VectorStore & Retriever)
  • 实战练习:本地文档问答机器人

一、环境准备

LangChain 更新极快,建议安装最新版。

pipinstalllangchain langchain-openai chromadb pypdf

二、Model 与 Prompt

2.1 初始化模型

LangChain 封装了各种模型的接口,让我们切换模型像换衣服一样简单。

fromlangchain_openaiimportChatOpenAI# 初始化模型 (支持换成文心一言、通义千问等,只要有对应类)llm=ChatOpenAI(api_key="sk-...",base_url="...",temperature=0.7)# 直接调用# resp = llm.invoke("你是谁?")# print(resp.content)

2.2 提示词模板 (PromptTemplate)

我们不希望每次都手写 “请帮我翻译…”,我们可以定义一个模板,挖好坑填参数。

fromlangchain_core.promptsimportChatPromptTemplate# 定义模板prompt=ChatPromptTemplate.from_template("请将下面的文字翻译成{language}:{text}")# 填充参数messages=prompt.format_messages(language="法语",text="你好,世界")# print(messages)

三、链 (Chain):LangChain 的灵魂

Chain 把 Prompt、Model 和 OutputParser 串联起来。
LangChain 使用LCEL (LangChain Expression Language)语法,用|管道符连接。

fromlangchain_core.output_parsersimportStrOutputParser# 1. Promptprompt=ChatPromptTemplate.from_template("给我讲一个关于{topic}的笑话")# 2. Modelmodel=ChatOpenAI(api_key="...")# 3. Parser (把对象转为纯字符串)parser=StrOutputParser()# 4. 组装链条chain=prompt|model|parser# 5. 运行res=chain.invoke({"topic":"程序员"})print(res)

四、RAG 实战:让 AI 读懂你的 PDF

RAG 的流程是:

  1. 加载 (Load):读取 PDF/Txt 文件。
  2. 切分 (Split):把长文章切成小块(Chunk)。
  3. 嵌入 (Embed):把文字变成向量(一串数字),存入向量数据库。
  4. 检索 (Retrieve):用户提问 -> 找最相似的片段。
  5. 生成 (Generate):把片段 + 问题扔给 AI -> 生成答案。

4.1 加载与切分

fromlangchain_community.document_loadersimportPyPDFLoaderfromlangchain_text_splittersimportRecursiveCharacterTextSplitter# 1. 加载 PDFloader=PyPDFLoader("my_paper.pdf")# 请准备一个 PDF 文件docs=loader.load()# 2. 切分 (每块 1000 字符,重叠 200)text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200)splits=text_splitter.split_documents(docs)print(f"切分成了{len(splits)}个片段")

4.2 向量化存储 (Chroma)

我们需要一个Embedding 模型来计算向量。OpenAI 提供了text-embedding-3-small

fromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_community.vectorstoresimportChroma# 初始化 Embedding 模型embedding=OpenAIEmbeddings(api_key="...")# 创建向量数据库 (并在内存中存储)vectorstore=Chroma.from_documents(documents=splits,embedding=embedding)# 创建检索器 (Retriever)retriever=vectorstore.as_retriever()

4.3 构建 RAG 链

fromlangchain.chainsimportcreate_retrieval_chainfromlangchain.chains.combine_documentsimportcreate_stuff_documents_chain# 1. 定义 RAG 的 Prompt# {context} 是检索出来的文档片段,{input} 是用户问题rag_prompt=ChatPromptTemplate.from_template(""" 基于以下上下文回答问题: <context> {context} </context> 问题:{input} """)# 2. 文档处理链 (把检索到的文档塞进 Prompt)document_chain=create_stuff_documents_chain(llm,rag_prompt)# 3. 最终检索链 (检索 + 生成)retrieval_chain=create_retrieval_chain(retriever,document_chain)# 4. 提问response=retrieval_chain.invoke({"input":"这篇文章的主要结论是什么?"})print(response["answer"])

五、持久化向量数据库

上面的代码每次运行都要重新读取 PDF 和计算向量(费钱又费时)。我们可以把向量数据库保存到硬盘。

# 保存到 ./db 目录vectorstore=Chroma.from_documents(documents=splits,embedding=embedding,persist_directory="./chroma_db")# 下次直接加载vectorstore=Chroma(persist_directory="./chroma_db",embedding=embedding)

六、常见问题

Q1:Embedding 是什么?

Embedding 是把文字变成向量(数字列表)。意思相近的词,在向量空间距离更近(如"猫"和"狗"近,和"桌子"远)。这是 RAG 检索的核心原理。

Q2:中文支持怎么样?

OpenAI 的 Embedding 对中文支持不错。如果要用国产的,可以替换为 HuggingFace 或 智谱AI 的 Embedding 类。

Q3:Token 限制?

RAG 的好处就是不需要把整本书发给 AI,只发相关的几段,大大节省了 Token。


七、小结

RAG 流程

Document (文档)

Splitter (切分)

Embedding (向量化)

VectorStore (向量库)

User Question

Retriever (检索)

Prompt (问题+上下文)

LLM (生成)

Answer

关键要点

  1. LangChain是胶水,把 LLM 和各种工具粘在一起。
  2. LCEL(|) 语法让代码链条清晰可见。
  3. RAG是目前企业应用 LLM 最主流的模式。

八、课后作业

  1. 多文档问答:修改代码,支持读取一个文件夹下所有的.txt.pdf文件,构建一个更强大的知识库。
  2. 历史记忆:查阅create_history_aware_retriever,给 RAG 加上对话历史记忆功能,让它能理解"第二个结论是什么"这种指代性问题。
  3. 换模型:尝试接入国内大模型(如文心、通义),通常只需要更换ChatOpenAI为对应的类(需安装对应 SDK)。

下节预告

Day 77:计算机视觉 (OpenCV) 基础- 文字处理腻了?明天我们玩点视觉的。教你用 Python 控制摄像头,识别人脸!


系列导航

  • 上一篇:Day 75 - AI应用OpenAI
  • 下一篇:Day 77 - 计算机视觉OpenCV(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:35:33

通义千问2.5-0.5B快速上手:苹果A17设备60tokens/s部署指南

通义千问2.5-0.5B快速上手&#xff1a;苹果A17设备60tokens/s部署指南 1. 引言&#xff1a;为什么选择 Qwen2.5-0.5B-Instruct&#xff1f; 随着大模型向边缘端迁移的趋势加速&#xff0c;轻量级但功能完整的语言模型正成为开发者构建本地化 AI 应用的核心组件。Qwen2.5-0.5B…

作者头像 李华
网站建设 2026/9/2 21:27:20

AI编程助手深度解析:从代码生成到智能重构的革命性突破

AI编程助手深度解析&#xff1a;从代码生成到智能重构的革命性突破 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 在当今快速迭代的软件…

作者头像 李华
网站建设 2026/9/3 0:48:16

老款Mac系统焕新指南:OpenCore Legacy Patcher让你的设备重获新生

老款Mac系统焕新指南&#xff1a;OpenCore Legacy Patcher让你的设备重获新生 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让2007年及以后的老款Mac设备运行最新的ma…

作者头像 李华
网站建设 2026/9/3 0:44:40

零基础玩转Qwen3-4B:阿里开源大模型保姆级教程

零基础玩转Qwen3-4B&#xff1a;阿里开源大模型保姆级教程 1. 引言&#xff1a;为什么选择 Qwen3-4B-Instruct-2507&#xff1f; 在当前大模型快速演进的背景下&#xff0c;如何在有限算力条件下实现高性能推理成为开发者关注的核心问题。阿里通义实验室推出的 Qwen3-4B-Inst…

作者头像 李华
网站建设 2026/9/3 2:00:34

BGE-M3实战:构建智能问答检索系统

BGE-M3实战&#xff1a;构建智能问答检索系统 1. 引言 在当前信息爆炸的时代&#xff0c;如何从海量文本中快速、准确地检索出用户所需的信息&#xff0c;已成为智能问答系统的核心挑战。传统的关键词匹配方法难以应对语义多样性问题&#xff0c;而近年来兴起的嵌入模型&…

作者头像 李华
网站建设 2026/9/2 21:30:31

Qwen3-Embedding-4B技术分享:多模态应用中的文本嵌入

Qwen3-Embedding-4B技术分享&#xff1a;多模态应用中的文本嵌入 1. 引言&#xff1a;Qwen3-Embedding-4B 的定位与价值 随着大模型在多模态理解、信息检索和语义搜索等场景的广泛应用&#xff0c;高质量的文本嵌入&#xff08;Text Embedding&#xff09;能力成为构建智能系…

作者头像 李华