最近很多人在学 AI Agent、RAG、MCP,但如果你刚接触这些东西,我不建议一上来就研究特别复杂的框架。
先把最基础的东西跑起来。
这一篇我们只做几件事:
安装 LangChain ↓ 调用一次大模型 ↓ 给 AI 设置一个角色 ↓ 传递变量 ↓ 最后让 AI 调用一个简单工具不讲复杂架构。
不讲向量数据库。
也不讲多 Agent。
只要你会一点 Python,基本就可以跟着做。
一、LangChain 是干什么的?
先用一句话理解:
LangChain 是一个帮助我们开发大模型应用的 Python 框架。比如以前调用 AI:
Python ↓ 大模型 API ↓ 回答LangChain 可以帮我们慢慢变成:
用户 ↓ LangChain ↓ 大模型 ↓ 工具 ↓ 数据库 ↓ 搜索 ↓ 最终回答不过这些都是后面的事情。
今天我们先解决第一个问题:
怎么让 Python 通过 LangChain 调用大模型?二、准备 Python
首先电脑需要安装 Python。
终端输入:
python--version或者:
python3--version如果看到:
Python 3.11.9类似这样的内容,就说明 Python 已经安装好了。
建议使用:
Python 3.11+三、创建项目
新建一个目录:
mkdirlangchain-demo进入目录:
cdlangchain-demo我们的项目暂时非常简单:
langchain-demo │ ├── main.py │ └── .env就两个文件。
四、创建虚拟环境
虽然不是必须的,但建议养成习惯。
执行:
python3-mvenv .venv目录会变成:
langchain-demo │ ├── .venv ├── main.py └── .envMac / Linux 激活:
source.venv/bin/activateWindows:
.venv\Scripts\activate成功以后,终端前面一般会出现:
(.venv)五、安装 LangChain
执行:
pipinstall-Ulangchain langchain-openai再安装读取环境变量的工具:
pipinstallpython-dotenv一共就这几个:
langchain langchain-openai python-dotenv现在开发环境就准备好了。
六、准备 API Key
接下来需要一个可以调用大模型的 API。
比如使用兼容 OpenAI API 的模型服务,一般会有:
API Key Base URL 模型名称创建:
.env写入:
OPENAI_API_KEY=sk-xxxxxxxx OPENAI_BASE_URL=https://你的接口地址/v1 MODEL_NAME=你的模型名称比如:
OPENAI_API_KEY=sk-123456 OPENAI_BASE_URL=https://example.com/v1 MODEL_NAME=your-model这里不要直接把 Key 写到 Python 代码里面。
因为以后代码传到 GitHub,非常容易泄露。
七、第一个 LangChain 程序
打开:
main.py写入:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI# 读取 .envload_dotenv()# 创建大模型llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)# 给模型发送问题response=llm.invoke("什么是 LangChain?请用一句话解释。")# 输出回答print(response.content)然后运行:
python main.py如果一切正常,你应该能看到类似:
LangChain 是一个用于构建大模型应用和 AI Agent 的开发框架。到这里,其实你的第一个 LangChain 程序已经完成了。
八、这几行代码到底是什么意思?
代码不长,我们拆开看。
首先:
fromlangchain_openaiimportChatOpenAI表示:
从 langchain_openai 导入 ChatOpenAI它负责帮助我们调用聊天模型。
然后:
llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)相当于告诉 LangChain:
我要使用哪个模型? API Key 是什么? API 地址在哪里?然后最关键的是:
response=llm.invoke("什么是 LangChain?")invoke可以简单理解成:
调用也就是:
调用大模型最后:
print(response.content)把模型回答打印出来。
所以整个程序本质就是:
创建模型 ↓ 发送问题 ↓ 获取回答非常简单。
九、试着换一个问题
我们修改:
response=llm.invoke("给我写一个 Python Hello World")完整代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)response=llm.invoke("给我写一个 Python Hello World")print(response.content)可能返回:
print("Hello World")再换一个:
response=llm.invoke("用小白能理解的方式解释 Redis")你会发现:
LangChain 本身并没有创造一个新的 AI。真正负责回答问题的依然是大模型。
LangChain 更像是:
把我们写的 Python 程序 和大模型连接起来。十、让用户自己输入问题
现在不要把问题写死。
改成:
question=input("请输入你的问题:")完整代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)question=input("请输入你的问题:")response=llm.invoke(question)print("\nAI:")print(response.content)运行:
python main.py终端:
请输入你的问题:你输入:
Docker 是干什么的?AI 就会回答。
再运行一次:
请输入你的问题:输入:
Python 和 Java 有什么区别?AI 又会回答。
这时候你已经做出了一个最简单的:
AI 问答程序十一、让程序可以一直聊天
刚才有个问题。
每次问完一次:
程序就结束了。可以增加:
whileTrue:完整代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)whileTrue:question=input("\n你:")ifquestion=="exit":breakresponse=llm.invoke(question)print("\nAI:",response.content)运行:
python main.py现在可以一直聊天:
你:什么是 MySQL? AI:MySQL 是一个关系型数据库…… 你:什么是 Redis? AI:Redis 是一个高性能的键值数据库…… 你:exit输入:
exit程序退出。
现在这个程序已经有点像最简单的 ChatGPT 了。
十二、给 AI 设置一个角色
接下来增加一点 LangChain 的味道。
比如我们希望 AI 永远是一名:
Python 老师可以使用消息。
代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimport(SystemMessage,HumanMessage,)load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)messages=[SystemMessage(content=""" 你是一名 Python 入门老师。 用户都是第一次学习编程的小白。 回答要求: 1. 尽量简单 2. 不要使用复杂术语 3. 多给简单例子 4. 每次代码不要太长 """),HumanMessage(content="什么是变量?"),]response=llm.invoke(messages)print(response.content)这里多出了两个东西:
SystemMessage HumanMessage非常好理解。
十三、SystemMessage 是什么?
例如:
SystemMessage(content=""" 你是一名 Python 入门老师。 """)它主要用于告诉 AI:
你是谁? 你应该怎么回答? 你需要遵守什么规则?比如:
SystemMessage(content=""" 你是一名 Java 老师。 回答所有问题都必须: 1. 使用 Java 2. 给代码示例 3. 用中文回答 """)这样用户问:
怎么遍历数组?AI 就更倾向于使用 Java。
十四、HumanMessage 是什么?
这个就更简单了。
HumanMessage(content="什么是变量?")就是:
用户说的话。所以:
messages=[SystemMessage(content="你是一名 Python 老师"),HumanMessage(content="什么是变量?"),]可以理解成:
系统: 你是一名 Python 老师 用户: 什么是变量?然后发送给大模型。
十五、做一个简单的编程老师
我们把前面的代码组合起来。
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimport(SystemMessage,HumanMessage,)load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)whileTrue:question=input("\n你:")ifquestion=="exit":breakmessages=[SystemMessage(content=""" 你是一名非常有耐心的编程老师。 用户是编程小白。 回答规则: 1. 使用中文 2. 尽量简单 3. 多举例子 4. 涉及代码时给出代码 5. 不要一次讲太复杂 """),HumanMessage(content=question),]response=llm.invoke(messages)print("\nAI老师:")print(response.content)现在运行:
python main.py输入:
什么是 Python 函数?然后:
什么是 for 循环?再输入:
给我写一个最简单的计算器。这已经可以作为一个简单的小项目了:
AI 编程老师十六、什么是 Prompt?
学 LangChain 一定会看到一个词:
Prompt不要把它想复杂。
Prompt 就是:
给 AI 的提示词。比如:
请给我介绍 Python。这就是 Prompt。
再复杂一点:
你是一名 Python 老师。 请面向第一次学习编程的人, 解释什么是 Python 变量。 要求: 1. 语言简单 2. 给一个代码示例 3. 控制在 300 字以内这也是 Prompt。
简单理解:
Prompt = 你告诉 AI 应该干什么。十七、使用 PromptTemplate
假设我们要做一个:
代码解释器每次 Prompt 都差不多:
请使用小白能理解的方式解释下面代码: XXX只有:
XXX会变化。
这时候就可以使用模板。
fromlangchain_core.promptsimport(ChatPromptTemplate)prompt=ChatPromptTemplate.from_messages([("system",""" 你是一名编程老师。 请使用最简单的语言解释代码。 """),("human",""" 请解释下面这段代码: {code} """),])注意:
{code}就是变量。
例如:
messages=prompt.invoke({"code":""" for i in range(10): print(i) """})完整代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimport(ChatPromptTemplate)load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)prompt=ChatPromptTemplate.from_messages([("system",""" 你是一名编程老师。 用户是初学者。 请用最简单的语言解释代码。 """),("human",""" 请解释下面这段代码: {code} """),])messages=prompt.invoke({"code":""" for i in range(10): print(i) """})response=llm.invoke(messages)print(response.content)现在只需要修改:
"code":""" 这里放代码 """就可以重复使用 Prompt。
十八、Chain 是什么?
接下来会看到另外一个词:
Chain翻译过来就是:
链比如我们刚才做的是:
用户数据 ↓ Prompt ↓ 大模型 ↓ 回答LangChain 可以直接写:
chain=prompt|llm这里的:
|可以简单理解成:
然后也就是:
先执行 Prompt 然后执行 LLM代码:
chain=prompt|llm调用:
response=chain.invoke({"code":""" for i in range(10): print(i) """})完整代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimport(ChatPromptTemplate)load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)prompt=ChatPromptTemplate.from_messages([("system",""" 你是一名编程老师。 请使用最简单的语言解释代码。 """),("human",""" 解释下面代码: {code} """),])chain=prompt|llm response=chain.invoke({"code":""" def add(a, b): return a + b print(add(1, 2)) """})print(response.content)这里已经出现了 LangChain 一个非常重要的思想:
把多个步骤连接起来。十九、LangChain 为什么叫 Chain?
现在你应该能理解这个名字了。
比如:
Prompt ↓ LLM是一条 Chain。
以后可能是:
用户问题 ↓ Prompt ↓ 搜索知识库 ↓ LLM ↓ 回答也可以是一条 Chain。
甚至:
用户 ↓ Agent ↓ 搜索 ↓ 数据库 ↓ 计算器 ↓ LLM ↓ 回答所以 LangChain 很多能力,本质都是:
把多个组件连接起来。二十、再体验一个最简单的 Tool
如果只是:
Prompt + LLM其实还不太能感受到 Agent 的有趣之处。
所以最后我们只体验一个非常简单的工具。
创建一个函数:
defget_weather(city:str)->str:returnf"{city}今天晴天,温度 26 度"这只是模拟天气接口。
真实项目里可能会调用真正的天气 API。
二十一、让 Agent 调用天气工具
现在使用:
create_agent代码:
importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimport(create_agent)load_dotenv()llm=ChatOpenAI(model=os.getenv("MODEL_NAME"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),)defget_weather(city:str)->str:""" 查询城市天气。 """return(f"{city}今天晴天,"f"温度26度。")agent=create_agent(model=llm,tools=[get_weather],system_prompt=""" 你是一个生活助手。 如果用户询问天气, 请使用天气查询工具。 """)result=agent.invoke({"messages":[{"role":"user","content":"北京今天天气怎么样?"}]})print(result["messages"][-1].content)运行以后,Agent 会发现:
用户在问天气。然后:
调用 get_weather得到:
北京今天晴天,温度26度。然后再告诉用户结果。
二十二、这里发生了什么?
普通大模型:
用户 ↓ LLM ↓ 回答现在:
用户 ↓ Agent ↓ 发现需要查天气 ↓ get_weather() ↓ 获得天气 ↓ LLM ↓ 最终回答区别就在这里。
以前 AI 只能:
聊天。现在 AI 可以:
调用函数。以后这个函数可以换成:
查询 MySQL或者:
查询 Redis或者:
调用天气 API或者:
搜索网页或者:
读取文件甚至:
操作服务器于是:
大模型 + 工具就开始慢慢变成:
Agent二十三、小白暂时不用学什么?
如果你刚刚学 LangChain,到这里就够了。
暂时不要急着研究:
LangGraph Multi-Agent 复杂 RAG 长期 Memory Middleware Human in the Loop MCP 向量数据库 多模态 Agent这些都可以以后再学。
现在只需要真正搞懂四个东西:
1. LLM 2. Prompt 3. Chain 4. Tool二十四、用一句话理解这四个东西
LLM
就是:
大模型。代码:
llm=ChatOpenAI(...)Prompt
就是:
告诉大模型应该做什么。例如:
你是一名 Python 老师, 请给小白解释什么是函数。Chain
就是:
把多个步骤连接起来。例如:
chain=prompt|llm相当于:
Prompt ↓ LLMTool
就是:
给 AI 一个可以调用的函数。例如:
defget_weather(city):...于是 AI 不只是回答问题。
它还可以:
真正去做事情。二十五、最简单的学习路线
如果你今天第一次学习 LangChain,可以按照这个顺序。
第一天:
ChatOpenAI ↓ llm.invoke()先保证:
Python 可以调用大模型。第二步:
SystemMessage HumanMessage理解:
系统提示词 用户消息第三步:
PromptTemplate学会使用:
{变量}第四步:
prompt|llm理解 Chain。
第五步:
Tool最后再学习:
Agent这就够了。
二十六、最后做一个最小练习
如果你跟着做到这里,可以自己写一个:
AI Java 老师需求非常简单。
用户输入:
什么是 HashMap?AI 使用:
Java 小白能理解的方式回答。
你只需要修改:
SystemMessage(content=""" 你是一名 Java 入门老师。 用户都是 Java 初学者。 要求: 1. 使用中文 2. 尽量简单 3. 多给 Java 代码 4. 不要一次解释太多概念 """)然后运行:
python main.py输入:
什么是 ArrayList?或者:
什么是 HashMap?或者:
接口和抽象类有什么区别?你就已经做出了自己的:
AI Java 学习助手。总结
如果只记住今天这篇文章的一句话:
LangChain 就是帮助我们把大模型和程序里的各种能力连接起来。最简单的时候:
Python ↓ LangChain ↓ LLM再进一步:
Prompt ↓ LLM再进一步:
Prompt ↓ LLM ↓ Tool最后慢慢发展成:
用户 ↓ Agent ↓ LLM ↓ Tool ↓ 数据库 / API / 搜索 / 文件 ↓ 最终完成任务但对于第一次学习 LangChain 的人来说,真的不用一次学这么多。
先把下面这几行代码跑起来:
fromlangchain_openaiimportChatOpenAI llm=ChatOpenAI(model="your-model",api_key="your-api-key",base_url="https://example.com/v1",)response=llm.invoke("你好,LangChain!")print(response.content)只要这一段成功了:
你的 LangChain 学习就已经正式开始了。后面的 Prompt、Tool、RAG、Agent,本质上都只是在这个基础上,一点一点给 AI 增加新的能力。