Python 如何调用大模型构建一个简单 AI Agent?从工具调用到任务执行
前言
最近几年,AI 应用开发逐渐从简单的“调用聊天接口”向 AI Agent(智能体) 发展。
普通的大模型应用通常是:
用户
↓
模型
↓
回答
而 Agent 的基本思路则是:
用户提出任务
↓
大模型分析任务
↓
判断是否需要调用工具
↓
执行工具
↓
获取结果
↓
继续分析
↓
生成最终结果
这也是为什么现在很多 AI 应用开始从单纯的聊天机器人,逐渐转向 AI Agent。
本文不使用复杂框架,而是使用 Python 手动实现一个最基础的 Agent 思路,帮助刚开始学习 AI Agent 开发的人理解它的基本结构。
一、普通的大模型调用有什么局限?
假设我们让大模型回答:
“现在黄金价格是多少?”
如果只是普通的模型调用,大模型实际上并不知道当前实时价格。
它只能根据训练数据或者上下文进行回答。
这时候就需要引入:
工具
例如:
查询行情
查询天气
搜索网页
读取数据库
执行Python代码
读取文件
于是模型就从:
只负责回答问题
变成:
负责判断应该使用什么工具
这就是 Agent 的一个核心特点。
二、一个最简单的 Agent 可以怎么设计?
我们先把系统拆成几个部分:
用户输入
↓
Agent
↓
任务分析
↓
选择工具
↓
执行工具
↓
返回结果
↓
Agent生成最终答案
例如用户:
查询某个期货品种最近的价格
Agent可能判断:
这是一个行情查询任务
然后选择:
get_price()
执行工具以后得到:
价格 = 3250
最后交给模型生成自然语言答案。
三、定义一个简单的工具
先使用 Python 写一个模拟行情查询工具:
def get_market_price(symbol):
prices = {
“RB”: 3250,
“AU”: 768.5,
“CU”: 81500
}
return prices.get(symbol)
测试:
price = get_market_price(“RB”)
print(price)
输出:
3250
实际项目中,这里可以替换成:
行情API
数据库
本地CSV
Redis
实时行情服务
四、让 Agent 判断是否需要工具
最简单的方式,可以先用规则模拟:
def agent(user_input):
if "价格" in user_input:
return "market_price"
if "行情" in user_input:
return "market_price"
return "chat"
测试:
result = agent(“查询RB价格”)
print(result)
得到:
market_price
当然,真正的 AI Agent 并不会只靠 if 判断。
通常会让大模型自己判断:
用户任务
↓
LLM
↓
选择工具
五、使用结构化工具调用
一个比较典型的工具定义可以表示成:
tools = [
{
“name”: “get_market_price”,
“description”: “查询指定期货品种的最新价格”,
“parameters”: {
“type”: “object”,
“properties”: {
“symbol”: {
“type”: “string”,
“description”: “期货品种代码”
}
},
“required”: [“symbol”]
}
}
]
模型看到这个工具以后,就知道:
如果用户需要查询期货价格
可以调用 get_market_price
六、Agent 的核心循环
一个非常重要的概念是:
Think
↓
Act
↓
Observe
↓
Think
也就是:
分析
↓
行动
↓
观察结果
↓
再次分析
例如:
用户:
查询RB价格,并判断当前是否上涨
Agent可能执行:
第一步:
调用行情工具
↓
得到:
RB = 3250
然后继续:
第二步:
读取历史数据
↓
判断趋势
最后:
第三步:
生成回答
这就是 Agent 和普通问答应用比较明显的区别。
七、使用 Python 实现一个简单 Agent
可以先写一个最简单的执行器:
def run_tool(tool_name, arguments):
if tool_name == "get_market_price":
return get_market_price(
arguments["symbol"]
)
raise ValueError(
f"未知工具:{tool_name}"
)
然后:
def run_agent(tool_name, arguments):
result = run_tool(
tool_name,
arguments
)
return result
调用:
result = run_agent(
“get_market_price”,
{
“symbol”: “RB”
}
)
print(result)
输出:
3250
八、为什么工具系统比写死功能更重要?
如果以后增加:
查询行情
查询新闻
查询数据库
计算指标
执行Python
发送通知
如果全部写成:
if …
elif …
elif …
elif …
代码很快就会变得难以维护。
更合理的方式是建立:
Tool Registry
例如:
TOOLS = {
“get_market_price”: get_market_price,
“calculate_ma”: calculate_ma,
“search_news”: search_news
}
执行时:
def execute_tool(name, args):
tool = TOOLS.get(name)
if tool is None:
raise ValueError(
f"工具不存在:{name}"
)
return tool(**args)
这样以后增加工具就简单很多。
九、AI Agent 和普通 Python 程序有什么区别?
传统程序:
程序员
↓
提前定义流程
↓
程序执行
Agent:
程序员定义工具
↓
大模型理解任务
↓
动态选择工具
↓
执行
所以 Agent 的核心并不是:
“用了一个大模型。”
而是:
让模型具备根据任务选择和使用工具的能力。
十、AI Agent 适合哪些场景?
其实很多传统程序都可以增加 Agent 层。
例如量化研究:
用户:
分析RB最近一个月的趋势
Agent可以:
查询历史行情
↓
计算均线
↓
计算MACD
↓
计算ATR
↓
分析趋势
↓
生成报告
这比单纯让大模型“猜行情”更加合理。
因为:
大模型
负责理解和组织任务
Python
负责计算
数据系统
负责提供数据
三个部分各司其职。
十一、不要让大模型负责精确计算
这是开发 AI Agent 时非常重要的一点。
例如:
收益率
最大回撤
均线
波动率
Sharpe
ATR
这些最好交给 Python。
不要让大模型自己进行大量数字计算。
合理架构应该是:
用户
↓
AI Agent
↓
Python工具
↓
精确计算
↓
结果返回模型
↓
模型解释结果
这样可靠性会明显提高。
十二、一个简单的 AI + Python 架构
如果以后继续开发,可以逐步演变成:
用户
↓
AI Agent
↓
┌─────────┼─────────┐
↓ ↓ ↓
行情工具 数据工具 计算工具
↓ ↓ ↓
行情API 数据库 Python
└─────────┼─────────┘
↓
分析结果
↓
AI回答
这种架构其实已经可以作为很多 AI 数据分析项目的基础。
十三、总结
一个最基础的 AI Agent,可以理解为:
大模型
+
工具
+
工具执行器
+
任务循环
核心流程:
用户提出任务
↓
模型理解任务
↓
选择工具
↓
Python执行工具
↓
返回结果
↓
模型继续分析
↓
输出最终结果
对于刚开始学习 Agent 开发的人来说,我并不建议一开始就堆很多框架。
可以先理解:
LLM
Tool
Tool Calling
Agent Loop
Memory
RAG
这几个核心概念。
理解这些以后,再学习 LangChain、LlamaIndex、AutoGen 等框架,会容易很多。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)