第一章:PythonLangChainAI智能体开发教程2025
LangChain 是当前构建 AI 智能体最强大的框架之一,其模块化设计和对大语言模型(LLM)的深度集成,使得开发者能够快速构建具备记忆、工具调用与决策能力的智能系统。随着 2025 年多模态模型和推理优化技术的发展,LangChain 进一步增强了对异步调用、函数路由和上下文感知的支持。核心组件介绍
LangChain 的核心由以下模块构成:- Models:支持多种 LLM 接口,包括 OpenAI、Anthropic 和本地部署模型
- Prompts:提供模板管理与动态变量注入机制
- Chains:将多个步骤组合为可复用的执行流程
- Agents:基于 LLM 决策调用工具的自主智能体
创建一个基础智能体
以下代码展示如何使用 LangChain 构建一个能执行数学计算的 AI 智能体:# 导入必要模块
from langchain.agents import initialize_agent, Tool
from langchain_openai import ChatOpenAI
from langchain.utilities import SerpAPIWrapper
# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 定义外部工具
tools = [
Tool(
name="Search",
func=SerpAPIWrapper().run,
description="用于查询实时网络信息"
)
]
# 创建智能体
agent = initialize_agent(
tools,
llm,
agent="structured-chat-zero-shot-react-description",
verbose=True
)
# 执行查询
agent.run("当前北京的气温是多少?")
该智能体会根据用户问题自动判断是否需要调用搜索引擎获取最新数据。
性能优化建议
| 策略 | 说明 |
|---|---|
| 启用缓存 | 避免重复请求相同提示词,提升响应速度 |
| 异步调用 | 在处理多个任务时使用 async/await 提高吞吐量 |
| 精简工具集 | 减少不必要的工具暴露,降低决策复杂度 |
第二章:Python与LangChain基础入门
2.1 Python环境搭建与核心语法速成
环境配置与版本管理
推荐使用pyenv 管理多个 Python 版本,配合 virtualenv 隔离项目依赖。安装后可通过以下命令创建独立环境:
pyenv install 3.11.0
pyenv virtualenv 3.11.0 myproject
pyenv activate myproject
该流程确保不同项目依赖互不干扰,提升开发稳定性。
核心语法快速掌握
Python 以简洁著称,变量无需声明类型,支持动态赋值:
name = "Alice"
age = 30
is_student = False
print(f"Hello, {name}")
上述代码展示字符串格式化输出,f-string 自动解析变量值,提升可读性与性能。
- 缩进代表代码块层级,强制规范代码风格
- 支持列表推导式、生成器等函数式编程特性
- 内置丰富数据结构:list, dict, tuple, set
2.2 LangChain框架架构解析与组件概览
LangChain 构建于模块化设计之上,核心围绕语言模型的集成与扩展能力展开。其架构由多个协同工作的组件构成,支持从数据输入到输出决策的完整链路。核心组件构成
- Models:封装各类大语言模型(LLM)和聊天模型(ChatModel)接口;
- Prompts:管理提示词模板与动态变量注入;
- Chains:组合多个处理步骤,实现复杂逻辑流程;
- Agents:基于推理机制调用工具动态响应用户请求。
典型代码结构示例
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 定义提示模板
prompt = PromptTemplate.from_template("解释术语:{term}")
llm = OpenAI(temperature=0.7)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(term="机器学习")
上述代码初始化一个简单链式流程:通过 PromptTemplate 注入变量,交由 OpenAI 模型处理,并经 LLMChain 编排执行。
2.3 LLM集成实践:调用OpenAI与本地模型
在构建智能应用时,集成大语言模型(LLM)是关键步骤。开发者既可以选择调用云端API,也能部署本地模型以保障数据隐私。调用OpenAI API
使用官方SDK可快速接入GPT系列模型。以下为Python示例:import openai
openai.api_key = "your-api-key"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "解释Transformer架构"}]
)
print(response.choices[0].message.content)
该代码通过ChatCompletion.create发起对话请求,参数model指定模型版本,messages支持多轮对话结构。
本地模型调用(基于Hugging Face)
使用transformers库加载本地部署的模型:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("./llm-model/")
model = AutoModelForCausalLM.from_pretrained("./llm-model/")
inputs = tokenizer("你好,介绍一下你自己", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
其中max_new_tokens控制生成长度,skip_special_tokens=True避免输出多余标记。
选择策略对比
- 云端模型:开发快捷,适合原型验证;依赖网络,存在延迟和成本问题。
- 本地模型:数据可控,响应稳定;需较高硬件资源,部署复杂度高。
2.4 Prompt工程基础与模板设计实战
在大模型应用开发中,Prompt工程是决定输出质量的核心环节。合理的提示词结构能够显著提升模型的理解与生成能力。Prompt的基本构成要素
一个高效的Prompt通常包含角色定义、任务描述、上下文信息和输出格式要求四个部分。通过明确这些要素,可引导模型生成更符合预期的结果。模板设计示例
角色:你是一位资深技术博客编辑。
任务:根据给定主题撰写一篇专业文章。
上下文:读者具备基础IT知识,关注实践细节。
输出格式:使用HTML标签组织内容,包含代码块与说明。
该模板通过角色设定增强语义一致性,“任务”明确行为目标,“上下文”限定受众层次,而“输出格式”规范响应结构,形成可复用的Prompt骨架。
常见优化策略
- 使用分隔符(如###)隔离不同逻辑段落
- 添加示例提升指令理解准确率
- 采用链式思考(Chain-of-Thought)引导推理过程
2.5 Chains链式调用原理与简易对话机器人实现
Chains是LangChain框架中的核心概念,用于将多个处理步骤串联成一个连续的执行流程。通过链式调用,开发者可将模型调用、数据预处理、后处理等环节组合为一个统一接口。链式调用的基本结构
链的本质是一个封装了多个组件调用顺序的对象,其执行过程遵循“输入→变换→输出”的模式。最常见的类型是SequentialChain,它按定义顺序依次执行各个子链。
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("你是一个助手,请回答:{question}")
llm_chain = LLMChain(llm=llm, prompt=prompt)
response = llm_chain.run("今天天气如何?")
上述代码创建了一个基础链,接收问题并生成响应。其中prompt负责格式化输入,llm执行模型推理,run()触发链式执行。
构建简易对话机器人
通过组合记忆模块与LLM链,可实现具有上下文感知能力的对话系统:- 使用
ConversationBufferMemory保存历史记录 - 将memory注入
LLMChain以维持对话连贯性 - 每次调用自动携带上下文信息
第三章:记忆机制与上下文管理
3.1 Memory模块详解与会话状态保持
Memory模块是实现会话状态保持的核心组件,它在内存中维护用户对话的历史记录,确保上下文连贯性。基本结构与工作原理
该模块通过键值对方式存储会话数据,每个用户会话由唯一ID标识,便于快速检索和更新。代码示例:初始化Memory模块
memory := NewChatMemory()
memory.Store("user_001", []string{"你好", "你能做什么?"})
上述代码创建了一个新的聊天记忆实例,并为用户"user_001"存储了两轮对话历史。Store方法接收用户ID和消息列表作为参数,实现上下文持久化。
适用场景与限制
- 适用于单节点部署环境
- 读写延迟低,响应速度快
- 服务重启后数据丢失,不支持分布式共享
3.2 实现带历史记忆的聊天机器人
在构建智能对话系统时,赋予机器人“记忆”能力是提升交互自然性的关键。通过维护用户会话的历史上下文,模型可基于过往对话生成连贯回应。上下文管理机制
采用滑动窗口策略保留最近N轮对话,避免上下文过长导致性能下降。每轮交互以{"role": "user", "content": "..."}和{"role": "assistant", "content": "..."}格式存储。
[
{"role": "user", "content": "今天天气怎么样?"},
{"role": "assistant", "content": "晴朗,适合出行。"},
{"role": "user", "content": "那适合穿什么?"}
]
该结构与OpenAI API兼容,便于集成主流大模型服务。
会话生命周期控制
- 会话启动时初始化上下文列表
- 每次新输入追加至上下文末尾
- 超出最大轮数时从前裁剪
- 长时间无交互自动清空缓存
3.3 高级记忆策略:向量存储与摘要记忆应用
向量存储的核心机制
向量存储通过将语义信息编码为高维向量,实现对记忆内容的快速检索。使用嵌入模型(如Sentence-BERT)将文本转化为768维向量,存入专用向量数据库(如Pinecone或Chroma)。
# 示例:生成并存储向量
from sentence_transformers import SentenceTransformer
import numpy as np
model = SentenceTransformer('all-MiniLM-L6-v2')
text = "用户偏好设置为夜间模式与静音通知"
embedding = model.encode(text)
print(embedding.shape) # 输出: (384,)
上述代码利用轻量级Transformer模型生成语义向量,384维输出适合高效存储与相似度计算。
摘要记忆的构建策略
- 周期性聚合长期交互日志
- 提取关键实体与行为模式
- 结合时间衰减权重生成动态摘要
该方式显著降低上下文冗余,提升大模型推理效率。
第四章:工具集成与智能体决策能力构建
4.1 Tool与Agent基础:让AI执行外部操作
为了让大模型具备对外部环境的操作能力,Tool与Agent架构成为关键。Tool代表具体的外部功能接口,如数据库查询、API调用或文件操作;Agent则负责理解用户意图,决策调用哪个Tool并处理返回结果。核心组件解析
- Tool:封装具体功能的可调用接口
- Agent:基于提示工程与推理能力调度Tool
- Orchestrator:协调输入解析、工具选择与结果整合
代码示例:定义一个天气查询Tool
def get_weather(location: str) -> dict:
"""
调用第三方API获取天气数据
:param location: 城市名称
:return: 包含温度和天气状况的字典
"""
response = requests.get(f"https://api.weather.com/v1/{location}")
return response.json()
该函数封装了HTTP请求逻辑,接收位置参数并返回结构化天气信息,可供Agent按需调用。
4.2 自定义工具开发:接入天气API与数据库查询
在构建自动化运维工具时,实时环境数据的获取至关重要。通过接入第三方天气API,可为机房温控、边缘节点调度等场景提供决策支持。API请求封装
使用Go语言封装HTTP客户端调用OpenWeatherMap API:func GetWeather(city string) (*WeatherResponse, error) {
apiKey := "your_api_key"
url := fmt.Sprintf("http://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s", city, apiKey)
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// 解码JSON响应并返回结构体
}
该函数接收城市名,构造带认证的HTTP请求,返回标准化的天气数据结构。
数据库持久化
将获取的数据写入PostgreSQL:- 定义结构体映射表字段
- 使用
sqlx库执行批量插入 - 设置索引优化查询性能
4.3 Agent决策流程剖析:ReAct与Plan-and-Execute模式
在智能Agent的决策架构中,ReAct(Reasoning + Acting)模式通过交替进行推理与动作执行实现动态交互。该模式在每一步先生成思考路径,再采取具体行动,形成闭环反馈。ReAct执行示例
# 示例:基于用户查询调用工具
thought = "需要获取当前天气信息"
action = "WeatherAPI.get(location='Beijing')"
observation = call_tool(action)
response = f"北京当前天气:{observation}"
上述代码展示了ReAct的典型流程:先生成意图(thought),再构造工具调用(action),最终整合观测结果输出响应。
Plan-and-Execute模式
与ReAct不同,该模式采用预规划策略,先构建完整执行路径,再逐步落实。适用于复杂任务编排。- 步骤一:任务分解为子目标
- 步骤二:生成执行计划序列
- 步骤三:按序调用工具并监控状态
4.4 构建自主任务完成的AI助手实战
在构建具备自主任务执行能力的AI助手时,核心在于实现意图识别、任务规划与工具调用的闭环。首先,系统需解析用户输入,提取关键语义。意图识别与工具映射
通过预定义工具描述,利用LLM判断应调用的功能模块:{
"name": "send_email",
"description": "发送邮件到指定收件人",
"parameters": {
"type": "object",
"properties": {
"to": {"type": "string"},
"subject": {"type": "string"},
"body": {"type": "string"}
},
"required": ["to", "subject"]
}
}
该JSON Schema帮助模型理解参数结构,确保生成合规调用指令。
执行流程控制
采用状态机管理任务阶段:- 接收用户请求
- 调用LLM进行意图解析
- 匹配并执行对应工具函数
- 反馈结果并确认完成
流程图:输入 → NLU → 决策引擎 → 工具执行 → 输出 → 状态更新
第五章:PythonLangChainAI智能体开发教程2025
构建可扩展的AI智能体架构
在LangChain中,核心组件包括LLM、Prompt模板、Chain和Agent。通过组合这些模块,开发者可以快速搭建具备决策能力的AI系统。- LLM:选择适合任务的模型,如GPT-4或Llama3
- PromptTemplate:结构化输入以提升响应质量
- Tool集成:赋予智能体调用外部API的能力
实战:创建天气查询智能体
以下代码展示如何使用LangChain构建一个能调用OpenWeather API的智能体:
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 定义工具函数
def get_weather(location: str) -> str:
return f"模拟天气数据:{location} 当前气温22°C"
# 构建工具列表
tools = [
Tool(
name="WeatherAPI",
func=get_weather,
description="用于查询指定城市的天气"
)
]
# 初始化语言模型
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个能调用工具获取天气信息的AI助手。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
# 创建智能体
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
# 执行调用
result = agent_executor.invoke({"input": "北京现在的天气怎么样?"})
print(result["output"])
性能优化建议
| 优化方向 | 实现方式 |
|---|---|
| 减少延迟 | 启用流式响应与缓存机制 |
| 提升准确性 | 引入Few-shot示例到Prompt |
| 增强鲁棒性 | 添加异常处理与降级策略 |

被折叠的 条评论
为什么被折叠?



