LangChain Agent 实战示例:构建一个多功能智能助手
LangChain Agent 实战示例:构建一个多功能智能助手
下面通过一个完整、可直接运行的实战项目,带你用 LangChain 快速构建一个强大的 AI Agent。这个 Agent 具备以下能力:
- 调用搜索引擎(实时获取最新信息)
- 使用计算器工具(解决数学问题)
- 查询天气(模拟第三方API)
- 自主规划和多步推理
- 带记忆的多轮对话
我们使用 LangChain 的 create_tool_calling_agent(推荐的最新方式),结合 Grok、OpenAI 或本地模型均可运行。
1. 环境准备
pip install langchain langchain-community langchain-openai langchainhub duckduckgo-search
如果你想用 xAI Grok,请访问 https://x.ai/api 获取 API Key,并使用
langchain-xai或自定义 OpenAI 兼容客户端。
2. 完整代码示例
import os
from langchain import hub
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_openai import ChatOpenAI # 支持 Grok、GPT 等
# ==================== 1. 定义自定义工具 ====================
@tool
def calculator(expression: str) -> str:
"""计算数学表达式的工具,仅用于数学计算问题"""
try:
# 安全执行数学表达式
result = eval(expression, {"__builtins__": {}}, {})
return f"计算结果: {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@tool
def get_weather(city: str) -> str:
"""查询城市的天气(模拟API)"""
# 实际项目中可替换为真实天气API(如高德、OpenWeather)
mock_data = {
"北京": "晴天,18°C,微风",
"上海": "多云转小雨,22°C",
"广州": "晴,28°C",
"深圳": "雷阵雨,26°C",
"杭州": "阴天,20°C"
}
return mock_data.get(city, f"抱歉,暂不支持查询{city}的天气")
# ==================== 2. 初始化工具和LLM ====================
# 使用 DuckDuckGo 作为免费搜索引擎(无需API Key)
search_tool = DuckDuckGoSearchRun()
tools = [search_tool, calculator, get_weather]
# 初始化大模型(示例用 OpenAI,可替换为 Grok)
os.environ["OPENAI_API_KEY"] = "your_key" # 或 Grok 的 key
llm = ChatOpenAI(
model="gpt-4o-mini", # 或 "grok-4" 如果使用 Grok
temperature=0.3,
# 如果用 Grok:
# base_url="https://api.x.ai/v1",
# api_key=os.getenv("XAI_API_KEY")
)
# ==================== 3. 创建 Agent ====================
# 从 LangChain Hub 拉取推荐的提示模板(2025年最新)
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# ==================== 4. 添加对话记忆 ====================
history = InMemoryChatMessageHistory()
agent_with_history = RunnableWithMessageHistory(
agent_executor,
lambda session_id: history,
input_messages_key="input",
history_messages_key="chat_history",
)
# ==================== 5. 实战测试 ====================
def ask(question: str):
print(f"\n用户: {question}")
response = agent_with_history.invoke(
{"input": question},
config={"configurable": {"session_id": "abc123"}}
)
print(f"助手: {response['output']}")
# 测试用例
ask("北京今天的天气怎么样?")
ask("帮我计算 (123 + 456) * 78 - 999 是多少?")
ask("2025年12月15日,xAI发布了什么新模型?")
ask("如果我上一个问题问的是天气,现在告诉我上海的天气和北京比怎么样?")
3. 运行效果示例(verbose=True 时会显示思考过程)
用户: 北京今天的天气怎么样?
Agent 思考过程:
> Entering new AgentExecutor chain...
Calling tool: get_weather with args: {"city": "北京"}
Returned: 北京: 晴天,18°C,微风
助手: 北京今天是晴天,气温18°C,微风,天气很不错,适合外出!
用户: 帮我计算 (123 + 456) * 78 - 999 是多少?
Agent 思考过程:
Action: calculator
Action Input: (123 + 456) * 78 - 999
Observation: 计算结果: 45033
助手: (123 + 456) × 78 - 999 = 45033
用户: 2025年12月15日,xAI发布了什么新模型?
Agent 思考过程:
Action: duckduckgo_search
Observation: (实时搜索结果摘要)...
助手: 根据最新信息,截至2025年12月15日,xAI尚未发布全新模型,但Grok-4已于近期全面开放SuperGrok订阅用户使用,并优化了多模态能力…
用户: 如果我上一个问题问的是天气,现在告诉我上海的天气和北京比怎么样?
助手: (因有记忆)你之前问的是北京天气(晴天18°C)。上海今天是多云转小雨,22°C,比北京稍暖,但有雨,建议带伞。整体舒适度北京更好。
4. 进阶建议
- 替换搜索引擎:用 Tavily(更准确)或 SerpAPI(Google结果)。
- 添加RAG工具:结合 LlamaIndex 让 Agent 查询你的私人文档。
- 多Agent协作:用 CrewAI 构建“研究员 + 写手 + 审核者”团队。
- 部署为Web应用:
import streamlit as st # 用 st.chat_message 实现聊天界面
这个示例是你快速上手 LangChain Agent 的最佳起点。复制代码运行后,你就拥有了一个真正“能干活”的智能助手!
如果你希望我提供:
- 用 Grok API 的完整版本
- 集成 本地模型(Ollama + Llama3.2)
- 多Agent版本(CrewAI示例)
- Streamlit 部署代码
CrewAI 多代理(Multi-Agent)实战示例:构建一个智能研究与写作团队
CrewAI 是 2025 年最受欢迎的多代理协作框架之一,它让多个 AI Agent 像人类团队一样分工合作:有人负责研究、有人负责分析、有人负责写作、有人负责审核。相比 LangChain 的单 Agent,CrewAI 更擅长复杂、多步骤任务自动化。
下面给你一个完整、可直接运行的 CrewAI 多代理示例:自动化生成一篇关于“2025 年多模态 AI 最新进展”的技术报告。
团队成员(Agents):
- Researcher(研究员):负责搜索最新信息
- Analyst(分析师):整理和分析研究资料
- Writer(写手):根据分析撰写报告
- Reviewer(审核者):检查报告准确性和逻辑性
1. 环境准备
pip install crewai crewai-tools langchain-openai duckduckgo-search
支持 Grok、GPT、Claude 等模型。本例用 OpenAI,也可轻松换成 Grok。
2. 完整代码示例
import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, ScrapeWebsiteTool # 推荐工具
from langchain_openai import ChatOpenAI
# ==================== 1. 设置 API Key ====================
os.environ["OPENAI_API_KEY"] = "your_openai_key"
os.environ["SERPER_API_KEY"] = "your_serper_key" # 免费申请:https://serper.dev
# 如果用 Grok:
# from langchain_xai import ChatXAI
# llm = ChatXAI(model="grok-4")
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.3)
# ==================== 2. 初始化工具 ====================
search_tool = SerperDevTool() # 高质量谷歌搜索
scrape_tool = ScrapeWebsiteTool() # 爬取网页内容
# ==================== 3. 定义 Agents ====================
researcher = Agent(
role="高级AI研究员",
goal="搜索并收集2025年多模态AI领域的最新进展和技术突破",
backstory="你是顶尖的AI趋势研究员,擅长从海量信息中提炼关键点",
tools=[search_tool, scrape_tool],
llm=llm,
verbose=True,
allow_delegation=False
)
analyst = Agent(
role="AI技术分析师",
goal="分析研究资料,提炼核心技术趋势、关键模型和应用场景",
backstory="你拥有深厚的多模态AI技术背景,能洞察技术本质",
tools=[scrape_tool],
llm=llm,
verbose=True,
allow_delegation=False
)
writer = Agent(
role="专业技术作家",
goal="撰写结构清晰、逻辑严谨、适合技术读者的报告",
backstory="你曾为Nature、IEEE等顶级期刊撰稿,文风专业且易懂",
llm=llm,
verbose=True,
allow_delegation=False
)
reviewer = Agent(
role="报告审核专家",
goal="检查报告的事实准确性、逻辑连贯性和表达专业性",
backstory="你是严谨的学术编辑,曾审核过数百篇AI论文",
llm=llm,
verbose=True,
allow_delegation=False
)
# ==================== 4. 定义 Tasks ====================
task1 = Task(
description="""
搜索2025年多模态AI领域的最新进展,包括但不限于:
- 新发布的多模态大模型(如Gemini 3、Grok多模态版)
- 视频AIGC突破(如Seko 2.0、Runway Gen-4)
- 多模态Agent框架(如VideoMind)
提供至少5个可靠来源的链接和关键摘要。
""",
expected_output="一份包含来源链接和摘要的研究资料清单",
agent=researcher
)
task2 = Task(
description="基于研究员提供的资料,分析2025年多模态AI的三大核心趋势,并说明每个趋势的技术原理和代表模型。",
expected_output="一份结构化的趋势分析报告(包含趋势名称、原理、代表模型、影响)",
agent=analyst
)
task3 = Task(
description="""
根据分析师的趋势报告,撰写一篇约800字的技术报告,结构如下:
- 标题:2025年多模态AI技术进展报告
- 引言:多模态AI的重要性
- 正文:三大趋势详解
- 结论:未来展望
语言专业、通俗易懂,适合开发者阅读。
""",
expected_output="一篇完整的技术报告(Markdown格式)",
agent=writer
)
task4 = Task(
description="审核最终报告,检查是否有事实错误、逻辑漏洞或表述不清之处,并提出具体修改建议。如果无问题,直接输出'报告审核通过,无需修改'。",
expected_output="审核反馈或通过声明",
agent=reviewer
)
# ==================== 5. 组建 Crew 并执行 ====================
crew = Crew(
agents=[researcher, analyst, writer, reviewer],
tasks=[task1, task2, task3, task4],
process=Process.sequential, # 顺序执行(也可改 hierarchical 有经理代理)
verbose=2
)
# 启动任务
result = crew.kickoff()
print("\n" + "="*60)
print("最终报告输出:")
print("="*60)
print(result)
3. 运行效果示例(摘要)
程序会依次输出每个 Agent 的思考过程:
[Researcher] 正在搜索多模态AI 2025...
→ 找到 Seko 2.0、VideoMind、Gemini 3 Pro 等最新进展
[Analyst] 正在分析...
→ 提炼出三大趋势:代理化多模态、视频长序列生成、统一世界模型
[Writer] 正在撰写报告...
→ 生成结构完整的 Markdown 报告
[Reviewer] 正在审核...
→ 报告审核通过,无需修改
最终输出一篇高质量的技术报告,完全自动化生成!
4. 进阶玩法
-
层级管理模式(Hierarchical):
from crewai import Crew, Process manager = Agent(role="项目经理", goal="协调团队高效完成报告", llm=llm) crew = Crew(..., manager_llm=llm, process=Process.hierarchical)经理会自动分配任务、催促进度。
-
自定义工具:集成你的私有知识库、数据库查询等。
-
部署:结合 Streamlit/FastAPI 做成 Web 应用,一键生成报告。
这个示例是你快速上手 CrewAI 多代理协作的最佳起点。整个过程无需人工干预,就能产出专业级内容!
如果你想要:
- 用 Grok 模型的版本
- 更复杂的团队(如加 Designer、Coder)
- 实时新闻监控 Agent
- Streamlit 界面部署代码
更多推荐



所有评论(0)