LangChain入门到实战:小白程序员必备AI应用开发指南(收藏版)
本文以直白易懂的方式介绍了LangChain框架,帮助读者从零开始构建AI应用。内容涵盖LangChain的核心概念、环境搭建、Prompt提示词模板、Tools工具定义、Agent智能代理等关键知识点,并通过一个完整的智能助手项目案例,让读者深入了解LangChain的实际应用。适合想快速上手AI应用开发的学习者和开发者参考。

LangChain 实战教程:从入门到实战
一份接地气的 LangChain 学习指南,带你从零开始构建 AI 应用
写在前面
🔥
这份教程不会堆砌概念,会用最直白的话告诉你 LangChain 是什么、怎么用。代码都是能跑的,直接抄就行。 适合学AI应用开发,或者后端转AI开发的想快速上手的同学。
适合谁看:
- 听说过 ChatGPT,想自己做点 AI 应用的开发者
- 被官方文档绕晕的同学
- 想快速上手实战项目的人

- LangChain 是什么?
一句话解释
LangChain = 让大模型能"动手干活"的框架
光靠 ChatGPT 只能聊天,但通过 LangChain,你可以让 AI:
🔥
- 查天气、搜网页
- 读文件、写代码
- 调用你公司的内部 API
- 自己决定该做什么
架构图

核心能力
- 环境搭建
安装依赖
# 创建虚拟环境(推荐)
python -m venv langchain_env
source langchain_env/bin/activate # Mac/Linux
# langchain_env/Scripts/activate # Windows
# 安装 LangChain 核心包
pip install langchain langchain-core langchain-community
# 根据你用的模型安装对应包
pip install langchain-openai # OpenAI
pip install langchain-anthropic # Claude
pip install dashscope # 通义千问
# 其他常用包
pip install python-dotenv # 环境变量管理
pip install langgraph # Agent 运行时(新版必装)
配置 API Key
创建 .env 文件:
# OpenAI
OPENAI_API_KEY=sk-xxx
# 或者通义千问
DASHSCOPE_API_KEY=sk-xxx
# Claude
ANTHROPIC_API_KEY=sk-xxx
验证安装
from dotenv import load_dotenv
import os
load_dotenv()
# 通义千问示例
from langchain_community.chat_models import ChatTongyi
llm = ChatTongyi(
model="qwen-turbo",
dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
)
response = llm.invoke("你好,请用一句话介绍自己")
print(response.content)
跑通了就说明环境 OK!
- 核心概念速览
🔥
LangChain 的核心就四个东西,搞懂了就入门了:
概念地图

四大核心
关系是这样的:
用户提问 → Prompt 格式化 → Agent 思考 → 调用 Tool → Model 生成回答 → 返回用户
- Prompt 提示词模板
🔥
提示词模板就是把"问问题"这件事标准化。不用每次都手写完整的提示词。
工作流程

4.1 最简单的模板
from langchain_core.prompts import PromptTemplate
# 定义模板,用 {} 占位
template = PromptTemplate.from_template(
"请用{language}语言介绍一下{topic},不超过100字。"
)
# 填充变量
prompt = template.format(language="中文", topic="人工智能")
print(prompt)
# 输出: 请用中文语言介绍一下人工智能,不超过100字。
4.2 聊天模板(常用)
做聊天应用一般用这个,可以设置 system 和 user 角色:
from langchain_core.prompts import ChatPromptTemplate
# 定义多轮对话模板
chat_template = ChatPromptTemplate.from_messages([
("system", "你是一位{role},擅长用简洁易懂的方式解释复杂概念。"),
("human", "请解释一下:{concept}"),
])
# 生成消息列表
messages = chat_template.format_messages(
role="物理学教授",
concept="量子纠缠"
)
# 调用模型
response = llm.invoke(messages)
print(response.content)
4.3 Few-shot 示例模板
通过给几个例子,教 AI 按你想要的格式输出:
# 定义示例
examples = [
{"input": "开心", "output": "我今天非常开心!"},
{"input": "难过", "output": "我感到有些难过..."},
]
# 创建包含示例的模板
few_shot_template = ChatPromptTemplate.from_messages([
("system", "你是一个情绪表达助手。"),
("human", "示例:/n情绪: 开心/n表达: 我今天非常开心!/n/n情绪: 难过/n表达: 我感到有些难过..."),
("human", "现在请表达这个情绪: {emotion}")
])
messages = few_shot_template.format_messages(emotion="兴奋")
response = llm.invoke(messages)
4.4 动态日期模板
有些变量想自动填充(比如当前日期):
from datetime import datetime
from langchain_core.prompts import PromptTemplate
template = PromptTemplate(
template="今天是{date},请告诉我关于{topic}的最新消息。",
input_variables=["topic"],
partial_variables={
"date": datetime.now().strftime("%Y年%m月%d日") # 自动填充
}
)
# 只需要传 topic
prompt = template.format(topic="AI发展")
- Tools 工具定义
工具就是让 AI 能调用的函数。定义好工具后,AI 会自己决定什么时候用、怎么用。
5.1 用装饰器定义(最简单)
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""
获取城市的天气信息
Args:
city: 城市名称,如"北京"、"上海"
"""
# 模拟天气数据(实际项目中调用天气 API)
weather_data = {
"北京": "晴天,25°C",
"上海": "多云,22°C",
"深圳": "小雨,28°C",
}
return weather_data.get(city, f"{city}的天气暂时无法获取")
# 测试工具
result = get_weather.invoke({"city": "北京"})
print(result) # 输出: 晴天,25°C
# 查看工具信息
print(f"工具名称: {get_weather.name}")
print(f"工具描述: {get_weather.description}")
print(f"参数结构: {get_weather.args}")
重点:docstring 写清楚! AI 就是靠这个描述来决定什么时候调用这个工具。
5.2 更复杂的工具
from typing import Optional
@tool
def search_database(query: str, category: Optional[str] = None) -> str:
"""
在数据库中搜索信息
Args:
query: 搜索关键词
category: 可选的分类过滤器,如"科技"、"健康"、"教育"
"""
database = {
"科技": ["人工智能正在改变世界", "5G技术的应用"],
"健康": ["健康饮食的重要性", "运动与长寿的关系"],
"教育": ["在线学习的趋势", "终身学习的价值"]
}
results = []
if category and category in database:
for item in database[category]:
if query.lower() in item.lower():
results.append(f"[{category}] {item}")
else:
for cat, items in database.items():
for item in items:
if query.lower() in item.lower():
results.append(f"[{cat}] {item}")
if results:
return "找到以下结果:/n" + "/n".join(results)
else:
return f"没有找到关于 '{query}' 的结果"
5.3 用类定义(需要更多控制时)
from langchain_core.tools import BaseTool
from pydantic import BaseModel, Field
from typing import Type
# 定义输入参数结构
class CalculatorInput(BaseModel):
expression: str = Field(description="数学表达式,如 '2+2' 或 '10*5'")
class Calculator(BaseTool):
name: str = "calculator"
description: str = "执行数学计算"
args_schema: Type[BaseModel] = CalculatorInput
def _run(self, expression: str) -> str:
"""同步执行"""
try:
result = eval(expression)
return f"计算结果: {expression} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
async def _arun(self, expression: str) -> str:
"""异步执行(可选实现)"""
return self._run(expression)
# 使用
calc = Calculator()
result = calc.invoke({"expression": "123 * 456"})
print(result) # 计算结果: 123 * 456 = 56088
5.4 把工具绑定到模型
定义好工具后,需要"告诉"模型这些工具的存在:
# 创建工具列表
tools = [get_weather, search_database, Calculator()]
# 绑定到模型
llm_with_tools = llm.bind_tools(tools)
# 现在模型知道有这些工具可用了
response = llm_with_tools.invoke("北京今天天气如何?")
# 检查模型是否决定调用工具
if response.tool_calls:
for tool_call in response.tool_calls:
print(f"模型想调用: {tool_call['name']}")
print(f"传入参数: {tool_call['args']}")
- Agent 智能代理
🔥
Agent 是 LangChain 最酷的部分。它不是按固定流程执行,而是自己思考、自己决定该干啥。
Agent 思考循环
6.1 LangChain 1.0+ 新版 Agent
新版用 create_agent,底层基于 LangGraph,更稳定:
from langchain.agents import create_agent
from langchain_core.tools import tool
from langchain_community.chat_models import ChatTongyi
import os
# 1. 初始化模型
llm = ChatTongyi(
model="qwen-plus",
temperature=0.7,
dashscope_api_key=os.environ.get("DASHSCOPE_API_KEY")
)
# 2. 定义工具
@tool
def get_weather(city: str) -> str:
"""获取城市天气信息"""
weather_db = {
"北京": "晴天,15-25度",
"上海": "多云,18-28度",
"深圳": "小雨,20-30度",
}
return weather_db.get(city, f"{city}的天气信息暂不可用")
@tool
def calculator(expression: str) -> str:
"""执行数学计算"""
try:
result = eval(expression)
return f"计算结果: {expression} = {result}"
except:
return "计算错误"
@tool
def search_knowledge(query: str) -> str:
"""搜索知识库"""
knowledge = {
"LangChain": "LangChain是一个用于开发LLM应用的框架,支持工具、代理、内存管理等功能。",
"机器学习": "机器学习是AI的子集,让系统能从数据中自动学习和改进。",
}
for key, value in knowledge.items():
if key in query:
return value
return f"未找到关于'{query}'的信息"
# 3. 创建 Agent
agent = create_agent(
model=llm,
tools=[get_weather, calculator, search_knowledge],
system_prompt="你是一个专业的中文助手。仔细分析用户问题,选择合适的工具来回答。"
)
# 4. 使用 Agent
result = agent.invoke({
"messages": [{"role": "user", "content": "北京今天天气怎么样?"}]
})
# 获取回答
final_message = result["messages"][-1]
print(f"回答: {final_message.content}")
6.2 Agent 处理多个问题
test_queries = [
"北京今天天气怎么样?",
"给我讲讲什么是机器学习",
"计算 123 * 456",
]
for query in test_queries:
print(f"/n用户: {query}")
result = agent.invoke({
"messages": [{"role": "user", "content": query}]
})
final_message = result["messages"][-1]
print(f"助手: {final_message.content}")
6.3 带记忆的 Agent
让 Agent 记住对话历史:
from langgraph.checkpoint.memory import MemorySaver
# 创建记忆存储
checkpointer = MemorySaver()
# 创建带记忆的 Agent
agent = create_agent(
model=llm,
tools=[get_weather, calculator, search_knowledge],
system_prompt="你是一个专业助手,能记住之前的对话。",
checkpointer=checkpointer # 启用记忆
)
# 会话配置(同一个 thread_id 共享记忆)
config = {"configurable": {"thread_id": "session_001"}}
# 第一轮对话
result1 = agent.invoke(
{"messages": [{"role": "user", "content": "我叫小明"}]},
config
)
print(result1["messages"][-1].content)
# 第二轮对话(Agent 会记得用户叫小明)
result2 = agent.invoke(
{"messages": [{"role": "user", "content": "我叫什么名字?"}]},
config
)
print(result2["messages"][-1].content) # 会回答"小明"
6.4 流式输出
让回答一个字一个字输出,体验更好:
# 流式调用
for chunk in agent.stream(
{"messages": [{"role": "user", "content": "北京天气如何?"}]},
config,
stream_mode="values"
):
messages = chunk.get("messages")
if messages:
last_message = messages[-1]
if hasattr(last_message, "content") and last_message.content:
print(last_message.content, end="", flush=True)
print() # 换行
- 完整项目:全能智能助手
现在把前面学的串起来,做一个能干实事的智能助手。
7.1 项目结构
smart_assistant/
├── .env # API Key
├── main.py # 主程序
├── tools/ # 工具定义
│ ├── __init__.py
│ ├── weather.py
│ ├── calculator.py
│ ├── translator.py
│ └── knowledge.py
└── requirements.txt
7.2 工具定义
tools/weather.py
from langchain_core.tools import tool
from datetime import datetime
@tool
def get_weather(city: str) -> str:
"""
获取指定城市的实时天气信息
Args:
city: 城市名称,支持北京、上海、广州、深圳、杭州等
"""
weather_database = {
"北京": {"condition": "晴天", "temp": "15-25°C", "aqi": "优"},
"上海": {"condition": "多云", "temp": "18-28°C", "aqi": "良"},
"深圳": {"condition": "小雨", "temp": "22-30°C", "aqi": "优"},
"杭州": {"condition": "阴天", "temp": "17-26°C", "aqi": "良"},
"广州": {"condition": "晴天", "temp": "20-32°C", "aqi": "良"},
}
if city not in weather_database:
return f"暂无{city}的天气数据,支持城市:北京、上海、深圳、杭州、广州"
data = weather_database[city]
return f"""
{city} 天气预报
━━━━━━━━━━━━━━━━
天气:{data['condition']}
温度:{data['temp']}
空气质量:{data['aqi']}
更新时间:{datetime.now().strftime("%H:%M")}
""".strip()
tools/calculator.py
from langchain_core.tools import tool
@tool
def calculator(expression: str) -> str:
"""
执行数学计算
Args:
expression: 数学表达式,如 "2+2"、"(10*5)+20"、"28"
"""
try:
# 安全检查
allowed_chars = set('0123456789+-*/(). ')
if not all(c in allowed_chars for c in expression.replace('', '')):
return "表达式包含非法字符"
result = eval(expression, {"__builtins__": {}}, {})
if isinstance(result, float) and result.is_integer():
result = int(result)
return f"计算结果:{expression} = {result}"
except ZeroDivisionError:
return "错误:除数不能为零"
except Exception as e:
return f"计算错误:{str(e)}"
tools/translator.py
from langchain_core.tools import tool
@tool
def translate(text: str, target_language: str = "英文") -> str:
"""
将中文文本翻译成其他语言(模拟)
Args:
text: 要翻译的中文文本
target_language: 目标语言,支持"英文"、"日文"、"韩文"
"""
translations = {
"你好": {"英文": "Hello", "日文": "こんにちは", "韩文": "안녕하세요"},
"谢谢": {"英文": "Thank you", "日文": "ありがとう", "韩文": "감사합니다"},
"再见": {"英文": "Goodbye", "日文": "さようなら", "韩文": "안녕히 가세요"},
}
if text in translations and target_language in translations[text]:
result = translations[text][target_language]
return f"翻译结果:'{text}' → [{target_language}] {result}"
return f"暂不支持'{text}'的{target_language}翻译"
7.3 主程序
main.py
import os
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain_community.chat_models import ChatTongyi
from langgraph.checkpoint.memory import MemorySaver
# 导入工具
from tools.weather import get_weather
from tools.calculator import calculator
from tools.translator import translate
# 加载环境变量
load_dotenv()
# 系统提示词
SYSTEM_PROMPT = """
你是小智,一个全能智能助手。
你可以帮用户:
查询天气:查询中国主要城市的天气
数学计算:进行各种数学运算
文本翻译:将中文翻译成其他语言
工作原则:
1. **先理解用户意图,选择合适的工具**
2. **如果不确定,可以询问用户**
3. **回答简洁明了,有帮助**
"""
def create_assistant():
"""创建智能助手"""
# 初始化模型
llm = ChatTongyi(
model="qwen-plus",
temperature=0.7,
dashscope_api_key=os.environ.get("DASHSCOPE_API_KEY")
)
# 创建记忆
checkpointer = MemorySaver()
# 创建 Agent
agent = create_agent(
model=llm,
tools=[get_weather, calculator, translate],
system_prompt=SYSTEM_PROMPT,
checkpointer=checkpointer
)
return agent
def main():
"""主函数"""
print("=" * 50)
print(" 小智 - 全能智能助手 v1.0")
print("=" * 50)
print("输入 'quit' 退出/n")
agent = create_assistant()
config = {"configurable": {"thread_id": "main"}}
while True:
user_input = input("你: ").strip()
if user_input.lower() in ['quit', '退出', 'exit']:
print("再见!")
break
if not user_input:
continue
try:
result = agent.invoke(
{"messages": [{"role": "user", "content": user_input}]},
config
)
response = result["messages"][-1].content
print(f"小智: {response}/n")
except Exception as e:
print(f"出错了: {str(e)}/n")
if __name__ == "__main__":
main()
7.4 运行效果
==================================================
小智 - 全能智能助手 v1.0
==================================================
输入 'quit' 退出
你: 北京天气怎么样
小智:
北京 天气预报
━━━━━━━━━━━━━━━━
天气:晴天
温度:15-25°C
空气质量:优
更新时间:14:30
你: 帮我算一下 125 * 88
小智: 计算结果:125 * 88 = 11000
你: 把"你好"翻译成日文
小智: 翻译结果:'你好' → [日文] こんにちは
你: quit
再见!
- 进阶技巧与最佳实践
8.1 工具描述要写好
AI 完全靠工具的 description 来决定什么时候调用。写得不清楚,它就不会用。
坏例子:
@tool
def func(x: str) -> str:
"""处理数据""" # 太模糊了!
pass
好例子:
@tool
def get_stock_price(symbol: str) -> str:
"""
获取股票实时价格
当用户询问某只股票的价格、涨跌情况时使用此工具。
Args:
symbol: 股票代码,如 "AAPL"(苹果)、"GOOGL"(谷歌)
Returns:
包含当前价格、涨跌幅的字符串
"""
pass
8.2 错误处理要完善
工具可能会失败(网络错误、参数错误等),一定要有兜底:
@tool
def fetch_data(url: str) -> str:
"""从URL获取数据"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
return response.text
except requests.Timeout:
return "请求超时,请稍后重试"
except requests.RequestException as e:
return f"请求失败:{str(e)}"
except Exception as e:
return f"未知错误:{str(e)}"
8.3 调整温度参数
- temperature=0:输出最确定,适合事实查询
- temperature=0.7:有一定创意,适合对话
- temperature=1.0:输出多样,适合创作
8.4 使用 LangSmith 调试
遇到奇怪问题时,用 LangSmith 看看 Agent 到底在想什么:
import os
# 在代码最前面添加
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "你的LangSmith API Key"
然后去 smith.langchain.com 就能看到每一步的详细 trace。
8.5 控制迭代次数
防止 Agent 陷入死循环:
agent = create_agent(
model=llm,
tools=tools,
# 其他选项
)
# 调用时限制最大步数
result = agent.invoke(
{"messages": [...]},
config,
recursion_limit=10 # 最多10步
)
最后
如果说程序员已经是高薪职业,那么干AI的程序员,就是高薪中的高薪。

现在的市场,已经用数据给程序员指明了方向:学AI大模型,就是冲刺高薪的最优解!

看着身边越来越多的同行转型大模型、拿到高薪offer,很多人心里都动了心,但真正的难题来了:零基础小白不知道从哪入门?有基础的程序员找不到系统学习路径?实战项目练手无门?面试不知道考什么?
别慌!今天就给大家整理了一份【2026年最新版】AI大模型免费学习资源包,覆盖从入门到实战、从理论到面试、从基础到进阶的全流程,所有资料均已整理归档,无冗余、无套路,免费分享给每一位想抓住AI风口的程序员和小白!
👇👇扫码免费领取全部内容👇👇

1、大模型系统化学习路线

2、大模型学习书籍&文档

3、AI大模型最新行业报告

4、大模型项目实战&配套源码

5、大模型大厂面试真题

四阶段精细化学习规划(附时间节点,可直接照做)
结合上述资源,给大家整理了一份可直接落地的四阶段学习规划,总时长约2个月,小白可循序渐进,程序员可根据自身基础调整节奏,高效掌握大模型核心能力,快速实现从“入门”到“能落地、能面试”的跨越。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
👇👇扫码免费领取全部内容👇👇

6、这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐


所有评论(0)