LangChain Agent 实战示例:构建一个多功能智能助手

下面通过一个完整、可直接运行的实战项目,带你用 LangChain 快速构建一个强大的 AI Agent。这个 Agent 具备以下能力:

  1. 调用搜索引擎(实时获取最新信息)
  2. 使用计算器工具(解决数学问题)
  3. 查询天气(模拟第三方API)
  4. 自主规划和多步推理
  5. 带记忆的多轮对话

我们使用 LangChaincreate_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):

  1. Researcher(研究员):负责搜索最新信息
  2. Analyst(分析师):整理和分析研究资料
  3. Writer(写手):根据分析撰写报告
  4. 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 界面部署代码
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐