【技术详解】LangChain入门教程:核心概念、基础使用与新手避坑总结
引言
我当时刚接触大模型应用开发的时候,最初卡在了怎么把大模型和自己的私有知识库结合起来,直接调用OpenAI的API只能用模型本身训练截止时间前的公共知识,想接入本地的项目文档、业务数据完全不知道从哪下手。后来才了解到LangChain这个框架,刚开始学的时候还混淆了Chain和Agent的区别,跟着教程敲代码还经常因为版本不兼容报各种奇怪的导入错误,前前后后踩了不少坑。今天就把我整理的入门知识点分享给大家,帮初学者快速上手这个大模型开发利器。
一、LangChain是什么?能解决什么问题?
LangChain是一个开源的大模型应用开发框架,核心价值是把大模型的通用能力和外部工具、私有数据、业务逻辑进行低代码整合,不用开发者从零开始写文档加载、向量存储、上下文管理、工具调用这些重复逻辑,大幅降低大模型应用的开发门槛。
举个简单的例子,如果你想做一个能查询公司内部规章制度的聊天机器人,用LangChain只需要简单几步:加载内部文档→文档切片转向量存储→配置检索逻辑→串接大模型,就能快速实现,不用自己从零搭建整个检索流程。
二、LangChain核心概念拆解
初学者不用上来就啃所有API,先搞懂这5个最核心的模块,就能覆盖80%的常用开发场景:
1. 模型(Models)
LangChain对市面上所有主流大模型做了统一接口封装,不管是OpenAI的GPT系列、Anthropic的Claude,还是本地部署的开源大模型比如Llama、通义千问,都可以用同一套代码调用,不用针对每个模型单独写适配逻辑。
关键点:要区分LLM和ChatModel的区别,我一开始就搞混了这两个类:LLM是传统的文本补全模型,输入单段文本输出补全结果;ChatModel是对话类模型,输入是对话消息列表(包含系统提示、用户消息、历史对话),输出是对话回复,现在90%的场景用的都是ChatModel。
2. 检索增强生成(RAG)
这是LangChain最常用的功能之一,类比一下就像你考试的时候可以翻自己的笔记答题:大模型本身的知识是固定的,没有你的私有数据,RAG就是先把你的私有文档(PDF、Word、网页、数据库内容)加载进来,切成合适大小的片段,转成向量存在向量数据库里;用户提问的时候,先从向量库里检索和问题最相关的文档片段,把问题+检索到的片段一起传给大模型,大模型就能基于你的私有数据给出准确回答,避免出现“幻觉”答非所问。
3. 记忆(Memory)
默认情况下每次调用大模型都是独立的请求,大模型不会记得你上一轮说过什么。Memory模块就是用来存储对话历史的,每次调用的时候自动把历史对话拼接进请求参数里,让大模型可以保持上下文连贯性,就像和真人聊天一样对方记得你之前说过的内容,做对话类应用的时候必须用到这个模块。
4. 链(Chains)
顾名思义就是把多个模块串起来的工作流,比如你可以把「接收用户问题→检索相关文档→拼接提示词→调用大模型→解析返回结果」这整个流程串成一个链,不用自己一步步写逻辑调用,直接运行链就能得到最终结果。现在LangChain的Runnable接口支持用管道符|灵活组合模块,写法非常简洁。
5. 代理(Agent)
这是更高级的功能,相当于给大模型配了一个“工具箱”:如果大模型遇到自己回答不了的问题,比如需要查询实时天气、调用计算器算复杂公式、查询数据库数据,Agent可以自主决策调用对应的工具获取信息,再结合工具返回的结果回答用户,而不是只能依赖模型本身的知识。比如你问Agent“今天上海的气温是多少?”,它知道自己没有实时天气数据,就会自动调用天气查询工具,拿到结果后再整理成自然语言回复你。
三、基础实战:从0到1跑通第一个LangChain应用
前置准备
首先安装依赖,注意:LangChain更新速度很快,不同版本接口差异很大,建议初学者固定使用稳定版本,避免出现奇怪的报错:
# 安装指定稳定版本的依赖
pip install langchain==0.2.16 langchain-openai==0.1.20 python-dotenv
然后在项目根目录新建.env文件,写入你的OpenAI API密钥,不要把密钥硬编码在代码里,容易泄露:
OPENAI_API_KEY=你的实际API密钥
示例1:基础大模型调用
先看我第一次踩坑的错误写法:
# 错误写法:没有配置API密钥,直接调用会报认证错误
from langchain_openai import ChatOpenAI
# 没有传入api_key,也没有加载环境变量
llm = ChatOpenAI(model="gpt-3.5-turbo")
response = llm.invoke("你好,介绍一下LangChain是什么")
print(response.content)
正确写法,用dotenv加载环境变量:
# 正确写法:先加载环境变量,再初始化模型
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
# 加载.env文件中的配置
load_dotenv()
# 初始化大模型,自动从环境变量读取API_KEY
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7 # 温度参数:0最严谨,1最有创造性
)
# 调用模型
response = llm.invoke("你好,简单介绍一下LangChain的核心作用")
print(response.content)
示例2:串接第一个工作流链
我们把提示词模板、大模型、输出解析器串成一个链,实现固定格式的回复:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 定义提示词模板,{input}是占位符,可以动态传入用户问题
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个面向初学者的技术助手,回答问题要简洁易懂,不要用专业术语"),
("user", "用户的问题是:{input}")
])
# 输出解析器:把大模型返回的消息对象转成字符串
output_parser = StrOutputParser()
# 用管道符把三个模块串成链,前一个模块的输出作为后一个的输入
chain = prompt | llm | output_parser
# 调用链,传入用户问题
result = chain.invoke({"input": "LangChain的RAG功能是做什么的?"})
print(result)
关键点:管道符|是LangChain 0.2版本之后的核心写法,比旧版本的Chain类灵活很多,推荐所有初学者都用这种方式组合模块。
四、新手高频踩坑总结
我整理了3个我和身边朋友入门时最常遇到的错误,大家可以提前避开:
1. 版本不兼容导致的导入错误
- 错误表现:运行代码时报
ImportError,比如提示找不到langchain.llms.openai模块,或者某个函数不存在 - 解决方法:LangChain版本迭代非常快,不同大版本的接口差异很大,初学者不要直接安装最新版本,建议固定使用0.2.x稳定版本,同时单独为LangChain项目创建虚拟环境,不要和其他大模型项目共用环境,避免依赖冲突。
2. 密钥配置错误导致的认证失败
- 错误表现:调用大模型时报
AuthenticationError,提示API密钥无效或者未提供 - 解决方法:永远不要把API密钥硬编码在代码里,优先用
python-dotenv管理环境变量,提交代码的时候记得把.env文件加入.gitignore,避免密钥泄露到公共代码仓库。如果是国内用户调用OpenAI API,还要注意网络代理的配置,确保可以正常访问接口。
3. RAG场景下检索结果不准确
- 错误表现:做RAG应用的时候,大模型回答的内容和私有文档不相关,或者只回答了部分内容,信息不完整
- 解决方法:首先调整文档分片的大小,不要切得太碎或者太大,一般建议每块1000-2000个字符,同时保留10%-20%的重叠字符,避免关键信息被切断;其次要选择和大模型匹配的嵌入模型,比如用OpenAI的大模型就配套用
text-embedding-3-small嵌入模型,不要混用不同厂商的嵌入模型和大模型,避免向量空间不匹配导致检索效果差。
结尾
如果你在学习中遇到类似问题,建议先回顾本文知识点+动手复现代码,遇到其他疑问可在评论区留言交流~
CSDN标签
#大模型 #LangChain #AI应用开发 #RAG #大模型应用开发
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)