一、核心认知:为什么 LLM Tools 是 Agent 的前奏?
在动手写代码前,先理清底层逻辑,避免只知其然不知其所以然:
- LLM 的「天生短板」与 Tools 的价值
大模型(如 DeepSeek、GPT)的优势是「理解自然语言 + 逻辑推理」,但存在 3 个致命局限:
- 无法获取实时数据(如股票收盘价、天气、新闻);
- 不擅长精确计算(如复利、数据分析);
- 不能直接操作外部系统(如调用 API、操作数据库、文件)。
而 LLM Tools 本质是「给大模型装「手脚」」:通过定义标准化工具函数 + 自然语言描述,让 LLM 理解「什么时候用工具」「怎么用工具」,从而突破原生能力边界 —— 这正是 Agent 的核心基础:Agent 之所以能「自主完成复杂任务」,本质是能根据目标自动选择工具、串联工具调用流程。
- Agent 与 LLM Tools 的关系(一张图看懂)
- 工具调用是 Agent 的「执行层」:Agent 负责「思考(规划任务)」,工具负责「做事(执行任务)」;
- 掌握 LLM Tools,就掌握了 Agent 开发的 80% 核心技能:后续只需补充「任务规划逻辑」「工具协同策略」,就能从「单工具调用」升级为「多工具自主协同」的 Agent。
二、开发准备:3 分钟搭建环境
- 开发环境选择:Jupyter Notebook(.ipynb)
为什么选它?
- 交互式编程:支持逐行运行代码,实时查看结果,适合调试工具调用逻辑;
- 混合文档与代码:可同时写注释、原理说明和代码,方便实验记录(大模型工具开发需要大量调试);
- Python 生态友好:天生适配 API 调用、数据分析场景,与 ModelScope 无缝衔接。
- 核心依赖与平台
- ModelScope(魔搭平台):阿里云开源模型平台,预装 OpenAI SDK(绝大多数大模型兼容此接口标准),无需手动配置复杂环境,直接调用 DeepSeek 等模型;
- OpenAI SDK:大模型 API 调用的「事实标准」,DeepSeek、通义千问、智谱等均兼容,学会后可无缝切换其他模型;
- DeepSeek 模型:主打「推理能力」,对工具调用的理解更精准,免费额度充足,适合开发测试。
- 打开 ModelScope 在线 Notebook:平台首页→开发空间→新建 Notebook(默认预装 Python 3.8+、OpenAI SDK);
- 验证环境:运行以下代码,无报错则环境正常:
三、模块化开发:LLM Tools 核心架构(附完整代码)
工具调用的核心是「标准化 + 模块化」—— 模块化让代码可维护、可扩展,标准化让 LLM 能正确理解工具。我们拆分 3 个核心模块,各司其职:
- 模块化设计原则
- 分离关注点:一个模块干一件事(工具定义、工具实现、调用逻辑分离);
- 高可扩展性:新增工具时,无需修改核心调用逻辑;
- 标准化接口:遵循 OpenAI 工具定义规范,降低 LLM 理解成本。
- 模块 1:工具定义(Tool Definition)
按 OpenAI 标准定义工具,告诉 LLM「工具名称、功能、参数格式」—— 这是 LLM 能否正确调用工具的关键!
- 模块 2:工具实现(Tool Implementation)
实现工具的具体逻辑(如调用接口、计算),与工具定义一一对应,可独立测试:
- 模块 3:核心调度逻辑(LLM + 工具调用)
负责与 DeepSeek 交互,解析 LLM 的工具调用请求,执行工具并返回结果 —— 核心中枢:
)
初始化 DeepSeek 客户端(兼容 OpenAI 接口)
client = OpenAI(
api_key="你的 DeepSeek API Key", # 替换为自己的 API Key
base_url="api.deepseek.com/v1" # DeepSeek API 地址
)
工具映射:将工具名称与实际函数关联(方便快速调度)
TOOL_MAP = {
"get_closing_price": get_closing_price,
"get_weather": get_weather,
"calculate_compound_interest": calculate_compound_interest
}
def call_llm(messages, tools=None, tool_choice="auto"):
"""
调用 DeepSeek 大模型
:param messages: 对话上下文(包含 user/assistant/system 角色)
:param tools: 工具定义列表
:param tool_choice: 工具调用策略(auto:LLM 自主选择;none:不调用;指定工具名:强制调用)
四、实战测试:4 个场景验证效果(复制即可运行)
在 Jupyter Notebook 中逐行运行以下代码,验证工具调用效果:
测试 1:调用股票工具(实时数据类)
测试股票收盘价查询
result = chat_with_tools("青岛啤酒的最新收盘价是多少?")
print(result)
输出结果:青岛啤酒的最新收盘价为 67.92 元。
测试 2:调用计算工具(精确计算类)
测试复利计算
result = chat_with_tools("我存 10 万元,年利率 3.5%,存 5 年,复利终值是多少?")
print(result)
输出结果:复利终值为:118768.63 元(本金:100000.0 元,年利率:3.5%,存款年数:5 年)
测试 3:多工具协同调用(Agent 雏形)
测试同时调用天气和股票工具
result = chat_with_tools("上海今天的天气怎么样?另外查一下贵州茅台的最新收盘价。")
print(result)
输出结果:上海今日天气为多云,23℃,东南风 2 级;贵州茅台的最新收盘价为 1785.00 元。
测试 4:无需工具的常识回答
测试不需要工具的问题
result = chat_with_tools("什么是 LLM Tools?它和 Agent 有什么关系?