手把手教你从零开发 AI Agent(智能体):基于 Python + LangChain + DeepSeek 的全栈指南
如果你还在只用 ChatGPT 聊天,那你可能已经落伍了。单纯的大模型(LLM)像是一个博学的“脑瘫”教授:他无所不知,但他没有手脚(无法联网、无法操作数据库)、没有记忆(聊完就忘)。AI Agent(智能体)解决了这个问题。引用 OpenAI Lilian Weng 的经典公式:$$Agent = LLM(大脑) + Planning(规划) + Memory(记忆) + Tools(工具)$$
摘要:大模型(LLM)的下半场是 Agent(智能体)。本文将带你从理论到实践,深入理解 Agent 的核心架构,并使用 Python 和 LangChain 框架,结合当下最火的 DeepSeek/GPT-4 模型,构建一个具备“联网搜索”、“文件操作”和“长期记忆”能力的超级智能体。
关键词:AI Agent, LangChain, DeepSeek, Python, 这里的LLM, 教程
📅 1. 前言:为什么 Agent 是未来?
如果你还在只用 ChatGPT 聊天,那你可能已经落伍了。
单纯的大模型(LLM)像是一个博学的“脑瘫”教授:他无所不知,但他没有手脚(无法联网、无法操作数据库)、没有记忆(聊完就忘)。
AI Agent(智能体) 解决了这个问题。引用 OpenAI Lilian Weng 的经典公式:
$$Agent = LLM(大脑) + Planning(规划) + Memory(记忆) + Tools(工具)$$
通过这个架构,我们可以让 AI 不仅仅是“说话”,而是去**“做事”**。本文将带你亲手实现这个公式。
🛠️ 2. 技术栈选型与环境准备
为了保证教程的通用性和先进性,我们采用目前业界最主流的方案:
-
编程语言:Python 3.10+
-
核心框架:LangChain (v0.2/v0.3) —— 目前最强大的 LLM 编排工具。
-
大模型:DeepSeek V3 (国产之光,兼容 OpenAI 协议) 或 GPT-4o。
-
搜索工具:Tavily 或 DuckDuckGo。
-
向量库:FAISS (用于简单的 RAG 记忆)。
2.1 安装依赖
在终端中执行以下命令(建议使用虚拟环境):
Bash
# 安装 LangChain 核心及社区包
pip install langchain langchain-openai langchain-community
# 安装搜索工具和其他工具库
pip install duckduckgo-search faiss-cpu
# 这是一个可选库,用于更好的日志展示
pip install grandalf
🧠 3. 核心实战:打造你的第一个 Agent
我们将分三步走:连接大脑 -> 装备工具 -> 注入灵魂(记忆)。
3.1 第一步:初始化“大脑” (LLM)
我们使用 ChatOpenAI 类,因为它兼容 OpenAI 和 DeepSeek。
Python
import os
from langchain_openai import ChatOpenAI
# ================= 配置区域 =================
# 建议将 Key 放在环境变量或 .env 文件中
# 这里以 DeepSeek 为例,性价比极高
DEEPSEEK_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://api.deepseek.com"
os.environ["OPENAI_API_KEY"] = DEEPSEEK_API_KEY
# ===========================================
# 初始化模型
# temperature=0.1:让模型更严谨,适合执行任务
llm = ChatOpenAI(
model="deepseek-chat",
temperature=0.1,
base_url=BASE_URL
)
# 测试一下
print("模型响应测试:", llm.invoke("你好,你是谁?").content)
3.2 第二步:打造“手脚” (Custom Tools)
Agent 的强大取决于工具有多强。我们定义两个工具:
-
联网搜索:弥补大模型知识滞后的问题。
-
自定义计算/逻辑:处理模型不擅长的精确任务。
Python
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_core.tools import tool
# 1. 引入现成的搜索工具
search_tool = DuckDuckGoSearchRun()
# 2. 自定义一个工具:股票分析模拟器
# 使用 @tool 装饰器,docstring 非常重要,因为模型会根据它来决定是否调用
@tool
def analyze_stock(ticker: str) -> str:
"""
输入股票代码(如 AAPL 或 00700),返回该股票的当前技术面分析结果。
当用户询问具体的股票建议时,必须调用此工具。
"""
# 真实场景这里会调用 Yahoo Finance 或 TuShare 的 API
# 这里做模拟返回
return f"【模拟数据】股票 {ticker} 目前处于上升通道,RSI指标为65,建议持有。"
# 3. 工具集结
tools = [search_tool, analyze_stock]
# 4. 绑定工具到模型
llm_with_tools = llm.bind_tools(tools)
3.3 第三步:组装 Agent (ReAct 架构)
这是最关键的一步。我们需要一个 Prompt 来告诉模型如何思考,并使用 AgentExecutor 来执行“思考-行动-观察”的循环。
Python
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# 定义 Prompt
# System: 设定人设
# Placeholder: 这是一个占位符,LangChain 会自动把中间的思考过程填入这里
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的金融 AI 助理。你会先思考用户的问题,如果需要数据,你会使用工具查找,最后给出综合建议。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
# 创建 Agent 实例
agent = create_tool_calling_agent(llm, tools, prompt)
# 创建执行器
# verbose=True 会在控制台打印出 Agent 的详细思考过程(非常解压!)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
🚀 4. 运行演示
让我们来看看这个 Agent 是如何处理复杂任务的。
场景:复合任务(联网 + 自定义逻辑)
Python
if __name__ == "__main__":
query = "请帮我搜索一下'DeepSeek'最近的大新闻,并分析一下英伟达(NVDA)现在的股票情况。"
print(f"🧐 用户提问: {query}\n")
print("-" * 50)
# 启动!
response = agent_executor.invoke({"input": query})
print("-" * 50)
print(f"🤖 最终回答:\n{response['output']}")
运行预期结果(Log 模拟):
-
Agent 思考:用户问了两个问题,一个是新闻(需要搜索),一个是股票(需要分析)。
-
Agent 行动 1:调用
duckduckgo_search搜索 "DeepSeek news"。 -
Agent 观察 1:获取搜索结果(如 DeepSeek 开源 V3 等)。
-
Agent 行动 2:调用
analyze_stock参数NVDA。 -
Agent 观察 2:获取模拟的股票数据。
-
Agent 最终响应:结合上述两部分信息,生成流畅的自然语言回答。
💾 5. 进阶:为 Agent 加上“记忆”
上面的 Agent 是“健忘”的,下一句话就不记得上一句话了。我们需要添加 Memory。
(注:LangChain 0.2+ 推荐使用 RunnableWithMessageHistory,但为了代码简洁易懂,这里演示最经典的 ChatHistory 注入方式)
Python
from langchain_core.messages import HumanMessage, AIMessage
# 模拟一个简单的聊天记录列表
chat_history = []
def chat_loop():
print("=== 进入多轮对话模式 (输入 'exit' 退出) ===")
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
# 将历史记录传递给 Agent
# 注意:我们需要修改上面的 Prompt 增加 history 的占位符,这里仅做逻辑演示
result = agent_executor.invoke({
"input": user_input,
"chat_history": chat_history # 需要在 Prompt 中预埋
})
# 手动更新历史
chat_history.append(HumanMessage(content=user_input))
chat_history.append(AIMessage(content=result['output']))
print(f"Agent: {result['output']}")
# 提示:实际开发中建议使用 LangGraph 来管理状态,这在大规模生产中更稳定。
🔮 6. 总结与展望
通过这几十行代码,我们已经实现了一个具备感知能力(Search)、**逻辑能力(Code)和表达能力(LLM)**的智能体雏形。
还可以做什么?
-
RAG(检索增强):给它喂一本 PDF,让它基于文档回答问题。
-
多智能体协作(Multi-Agent):使用
LangGraph或CrewAI,创建一个由“产品经理”、“程序员”和“测试”组成的虚拟软件公司。 -
本地化部署:使用 Streamlit 把它变成一个 Web 网页应用。
AI 的时代,动手实操才是硬道理。
📝 作者寄语:
如果这篇教程对你有帮助,请 点赞、收藏、关注!
关注我,下一期我们将深入讲解 《如何用 LangGraph 构建多智能体协作网络》。
源码获取:评论区留言或私信“Agent源码”即可获取完整 Python 文件。
更多推荐



所有评论(0)