2025年,Manus 的横空出世引爆了全球互联网,再度掀起 AI Agent 的技术热潮。我想利用周末时间,与大家分享和总结关于智能体的实现。
本文将首先介绍 AI Agent 的核心概念,然后通过一个实际案例,展示如何利用 LangGraph 框架和 ModelScope 上的 Qwen3-30B 模型来构建一个简单的智能体。
什么是 AI Agent?
我们可以借鉴台湾大学李宏毅教授的课程内容来理解 AI Agent 的基本概念。
AI Agent 的本质
与普通 AI 的区别: 传统的 AI 应用遵循“一个口令,一个动作”的模式,而 AI Agent 则是“人类只给目标,AI 自己找路”。例如,对于“研究 AI Agent 的定义”这个任务,普通 AI 可能只会回答其定义,而 AI Agent 则会主动规划并执行一系列动作来完成整个研究任务。
工作循环 (Working Cycle): AI Agent 的工作流程是一个循环,包含以下几个步骤:
以 AlphaGo 为例,其目标是赢得棋局,它通过观察棋盘状态(Observation),决定下一步的落子位置(Action),对手的回应改变了棋盘状态(Environment Change),AlphaGo 再次观察、行动,如此循环,直至分出胜负。
- 目标 (Goal):
确定最终需要达成的任务。
- 观察 (Observation):
感知当前的环境状态。
- 行动 (Action):
根据观察和目标,决定并执行下一步动作。
- 环境变化 (Environment Change):
行动会改变环境,并产生新的状态。
- 循环 (Loop):
Agent 再次观察新环境,重复上述过程,直到目标达成。
与强化学习的关系: AI Agent 的工作循环与强化学习(Reinforcement Learning)的思路非常相似,都是通过试错来逼近最优解。然而,传统的 AI Agent 高度依赖强化学习,导致一个模型通常只能执行一项特定任务。如今,借助大型语言模型(LLM),AI Agent 的实现方式发生了根本性的变化。
LLM 驱动的 AI Agent
- 工作原理:
由 LLM 驱动的 Agent 通过自然语言接收任务目标。它将环境信息(如文本、图片)作为输入,以文字形式输出决策和行动,并在循环中不断迭代直至任务完成。与需要专门训练的强化学习模型不同,LLM 凭借其强大的语言理解和生成能力,可以直接“推断”出下一步应该做什么。
- 优缺点:
- 优点:
灵活性极高,能处理各种开放式任务;无需为每个任务定义复杂的奖励函数;行动空间几乎没有限制。
- 缺点:
有时可能会做出未经深思熟虑的“猜测”;其决策质量高度依赖于对环境描述的准确理解,模糊或不完整的描述可能导致错误。
- 优点:
AI Agent 的三大关键能力
根据经验调整行为: Agent 需要根据外部反馈来调整后续行动。LLM 主要通过“上下文学习”(In-context Learning)来实现这一点,即将历史行动和反馈作为新的输入,从而影响后续的输出。这面临着“记忆爆炸”的挑战——如果将所有历史记录都输入给 LLM,计算成本会急剧增加。解决方案通常包括引入 写入 (Write)、读取 (Read) 和 反思 (Reflection) 等记忆模块来高效管理历史信息。
使用工具 (Tool Using): LLM 自身存在短板(如无法进行实时计算、访问外部网站等),需要借助外部工具来扩展能力。Agent 通过学习如何调用工具(API)来弥补这些不足。当面对复杂任务时,Agent 需要一个“工具选择模块”来决定调用哪个最合适的工具。同时,Agent 也需要具备一定的判断力,以识别并处理工具可能返回的错误信息。
制定计划 (Planning): 计划能力指的是先思考并规划好所有步骤,再依次执行。LLM 具备一定的规划能力,但往往在细节上表现不佳。提升其规划能力的方法包括 试错法 (Trial and Error)、脑内模拟 (Internal Simulation) 和 借助工具辅助规划。
使用 LangGraph 构建 Agent 实战
了解了核心概念后,我们来看看如何实现一个 Agent。关键步骤有两个:接入一个优秀的大模型 和 为其配置并调用工具。我们选择 LangGraph 作为构建 Agent 的框架。
GitHub:https://github.com/langchain-ai/langgraph
1. 环境配置
首先,安装必要的 Python 库:
pip install -U langgraph pip install langchain-openai2. 代码实现
官方示例通常采用 Claude、GPT 或 Gemini 等模型,对新手可能不太友好。因此,我们这里改用 ModelScope 上的 Qwen3-30B-A3B-Instruct-2507 模型,该模型提供免费调用额度。
API Key 获取方式:https://www.modelscope.cn/docs/model-service/API-Inference/intro
代码示例
下面的代码实现了一个简单的天气查询 Agent。它的核心功能是:理解用户用缩写 "sf" 指代城市 "San Francisco",并调用
get_weather工具函数来获取天气信息。from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent # 配置 ModelScope 的模型服务 # 从 ModelScope 官网获取 API Key 和 Base URL base_url = 'https://api-inference.modelscope.cn/v1' api_key = '在此处填入你从 ModelScope 获取的 API Key' model_name = 'Qwen/Qwen3-30B-A3B-Instruct-2507' # 定义一个工具函数 def get_weather(city: str) -> str: """为一个给定的城市获取天气信息。""" returnf"It's always sunny in {city}!" # 初始化大语言模型 llm = ChatOpenAI( api_key=api_key, base_url=base_url, model_name=model_name, temperature=0, max_tokens=None, timeout=None, max_retries=2, ) # 使用 LangGraph 创建一个 ReAct 风格的 Agent # ReAct (Reasoning and Acting) 是一种让 LLM 通过思考和行动来解决问题的框架 agent = create_react_agent( model=llm, tools=[get_weather], prompt="You are a helpful assistant"# 你可以根据需要调整提示词 ) # 运行 Agent # 我们向 Agent 提问 "what is the weather in sf" result = agent.invoke( {"messages": [{"role": "user", "content": "what is the weather in sf"}]} ) # 打印最终的输出结果 # result 包含了完整的执行流程,我们这里只关心最终的回复内容 # 通常最终回复在消息列表的最后一条 print(result['messages'][-1].content)输出结果
It's always sunny in San Francisco! 🌞从结果可以看出,Agent 成功地理解了 "sf" 是 "San Francisco" 的缩写,并调用了
get_weather工具,最终给出了正确的回复。这展示了一个最基本的 LLM Agent 的完整工作流程。参考资料
https://github.com/langchain-ai/langgraph/tree/main
https://zhuanlan.zhihu.com/p/29123783155
https://www.modelscope.cn/docs/model-service/API-Inference/intro
PS:
拒绝白嫖,辛苦各位大佬,来个点赞、在看、关注吧。 您的支持是我坚持的最大动力!欢迎多多关注公众号「AI算法与图像处理」
- 工作原理:

3万+

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



