什么是AI Agent
AI Agent(人工智能代理) 是一种能够在一定程度上自主感知环境、处理信息、做出决策并执行动作的智能体。它是一个具备“感知 → 思考 → 行动”能力的AI系统,可以代替或辅助人类完成某项任务。
具备能力:
- 感知能力:能获取来自用户、环境或数据源的信息(如语音、文字、图像、API返回结果等)
- 决策能力:能根据目标、规则或推理逻辑,规划下一步行为
- 执行能力:可调用工具、脚本、API,完成任务(如发送邮件、查询数据库、生成内容等)
- 记忆能力:可以记录对话或任务历史,并据此优化策略或个性化响应
举例
- 你的需求:“帮我规划杭州3日游行程并订酒店。”
- AI Agent执行步骤:
- 理解你的意图;
- 调用地图和酒店API获取推荐;
- 安排每日路线并生成一份行程表;
- 提供订购链接或自动下单(需授权)。
核心组件
组件 | 作用 |
---|---|
Tool工具 | 功能,如查天气、支付 |
AgentType智能体类型 | 基于大模型进行推理和行动,如ReAct架构 |
LLM大语言模型 | 感知与思考,如deepseek、qwen |
比喻:LLM是人的大脑,AgentType是四肢,Tool外部道具(电动车,电脑)
常见Agent框架
框架 | 语言 | 特点 |
---|---|---|
LangChain / LangGraph | Python | 社区活跃、工具丰富 |
Autogen | Python | 多智能体协作、支持代码执行 |
CrewAI | Python | 类似真实“多角色协作”的 Agent 框架 |
SuperAgent | TypeScript | 全栈 Agent 支持,适合 Web 应用嵌入 |
代码实现
创建大模型
# 创建大模型
llm = ChatTongyi(model="qwen-turbo", dashscope_api_key="xxxxxxx")
-
model:使用LLM模型
-
dashscope_api_key:通义千问API KEY
创建Tool
def lizz_tool(str):
try:
return len(str)
except:
return f"无相关内容:{str}"
Tools包
# 工具集合
tools = [
Tool(
name="lizz",
func=lizz_tool,
description="开元工具,长度"
),
Tool(
name="wikiSearch",
func=wiki_search,
description="用于获取互联网上的信息或文档"
)
]
- name:工具标识
- func: 工具方法
- description: 工具描述,会根据描述匹配使用那个方法
初始化Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
- tools:工具集
- llm:大模型
- agent:智能体框架
-
1.zero-shot-react-description
-
特点:根据工具描述自主决定使用哪个工具。
-
推荐场景:大多数通用场景;无需训练,零样本推理。
-
例子:问题:今天北京天气如何? → 使用搜索工具。
-
-
2.
react-docstore
-
特点:ReAct 推理风格,专用于基于文档存储(Docstore)工具的 QA。
-
推荐场景:文档问答,Wikipedia QA 等。
-
-
3.
self-ask-with-search
-
特点:先提出子问题,再使用搜索工具回答每个子问题。
-
推荐场景:需要推理过程拆解问题时。
-
-
4.conversational-react-description
-
特点:在
zero-shot-react-description
基础上加入了上下文记忆。 -
推荐场景:多轮对话、上下文敏感的问答。
-
-
5.
chat-zero-shot-react-description
(LangChain v0.1+)-
特点:用于聊天模型(ChatModel,如 GPT-4、Qwen-chat)执行 ReAct 推理。
-
推荐场景:推荐用于 chat-based LLM,代替旧的
zero-shot-react-description
。
-
-
6.
chat-conversational-react-description
-
特点:聊天模型 + 多轮对话记忆 + 工具选择。
-
推荐场景:构建对话型智能助手,能记住上下文并使用工具。
-
-
- verbose:是否输出过程
用例
环境变量文件.env
DASHSCOPE_API_KEY=sk-xxx
创建python脚本
import os
import wikipedia
from langchain.agents import Tool, AgentType, initialize_agent
from langchain_community.chat_models import ChatTongyi
from dotenv import load_dotenv
load_dotenv()
# 初始化Tongyi大模型
llm = ChatTongyi(model="qwen-turbo", dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"))
#创建工具
def lizz_tool(str):
try:
return len(str)
except:
return f"无相关内容:{str}"
def wiki_search(query):
try:
wikipedia.set_lang("zh")
summary = wikipedia.summary(query, sentences=2)
return summary
except:
return "无相关内容"
# 工具集合
tools = [
Tool(
name="lizz",
func=lizz_tool,
description="开元工具,长度"
),
Tool(
name="wikiSearch",
func=wiki_search,
description="用于获取互联网上的信息或文档"
)
]
# 初始化 Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, # react框架
verbose=True
)
if __name__ == '__main__':
# 提问
question = "使用开元工具计算字符串'实打实大是的是的'长度"
answer = agent.run(question)
print("回答:", answer)
执行过程
> Entering new AgentExecutor chain... # 新的任务链
Thought: 我需要使用开元工具来计算给定字符串的长度。 # 初步推理
Action: # 执行工具和输入
```
{
"action": "lizz",
"action_input": "实打实大是的是的"
}
```
Observation: 8 # 执行结果
Thought:我现在知道这个字符串的长度了。 # 确认推理
Final Answer: 字符串 '实打实大是的是的' 的长度是 8。# 最终回答
> Finished chain. #结束任务链
参考
MCP市场
智能体平台