我的奶牛
10.48M · 2026-03-26
对于我们机械工程背景的开发者来说,理解 LLM(Large Language Model)的局限性,用**数控机床(CNC)**来类比是最直观的。
想象一台顶级的五轴加工中心:
但是,如果主轴前端没有安装任何刀具(铣刀、钻头、丝锥),这台机床能做什么?
答案是:它什么也做不了。 它只能在那儿高速空转,产生热量(Token消耗),却无法切削任何金属(处理实际任务)。
在 Agent 开发中:
这就是为什么我们在**智能体来了(西南总部)的【AI智能体运营工程师就业班】**中,将 Tool Use (工具调用) 视为 Agent 开发的第一核心技能。
在开发一个 Agent 插件时,我们需要构建三个核心组件,它们与机械结构有着惊人的对应关系。
这是实际干活的部分。刀具的材质(硬质合金/高速钢)决定了它能切什么材料;代码的逻辑决定了它能处理什么数据。
主轴不能直接抓铣刀,必须通过标准的刀柄(如 BT40, HSK63)。
同理,LLM 不能直接运行 Python 代码,它必须通过标准的 JSON Schema 来认知这个工具。如果 Schema 定义不规范(刀柄尺寸不对),LLM 就“抓”不住工具。
当数控程序执行 M06 T01 时,机械手换刀。
当 LLM 输出特定 Token 时,触发 API 调用。
为了演示这个过程,我们来开发一个机械领域的专用工具:计算螺纹底孔直径。
(这是一个典型的 LLM 经常算错,必须依靠代码的场景)。
首先,我们定义一个纯 Python 函数。这把“刀”的刃口逻辑非常简单: (粗牙螺纹简化公式)。
Python
def calculate_thread_hole(diameter: float, pitch: float) -> dict:
"""
[Core Logic] 计算攻丝前的底孔直径
Args:
diameter (float): 公称直径 (如 M10 中的 10)
pitch (float): 螺距 (如 1.5)
Returns:
dict: 包含底孔直径建议值
"""
# 模拟机械加工中的经验公式
# 脆性材料底孔 ≈ d - 1.05p
# 塑性材料底孔 ≈ d - p
hole_size = round(diameter - pitch, 2)
# 增加一点“工程经验”逻辑
info = {
"nominal_diameter": f"M{diameter}",
"pitch": pitch,
"recommended_hole": hole_size,
"drill_bit": f"φ{hole_size}mm 麻花钻",
"note": "适用于塑性材料(钢/铝),铸铁请适当加大0.05mm"
}
return info
这是金加德讲师强调的重点。很多开发者代码写得很溜,但 Schema 写得很烂,导致 Agent 变“弱智”。
Schema 是写给 LLM 看的“说明书”。
Python
# 这是一个标准的 OpenAI 格式 Schema
tool_schema = {
"type": "function",
"function": {
"name": "calculate_thread_hole",
"description": "计算机械加工中内螺纹攻丝所需的底孔钻头直径。当用户询问'M8螺纹打多大孔'时调用此工具。",
"parameters": {
"type": "object",
"properties": {
"diameter": {
"type": "number",
"description": "螺纹公称直径(数字部分),例如 M10 对应 10。必须为正数。",
},
"pitch": {
"type": "number",
"description": "螺距。如果用户未指定,M6默认1.0,M8默认1.25,M10默认1.5...",
}
},
"required": ["diameter", "pitch"]
}
}
}
关键点解析:
现在,我们将主轴(LLM)与铣刀(Tool)结合起来。以下是模拟的运行流程:
Python
import json
# 1. 用户输入 (G-Code)
user_prompt = "我要在45号钢上攻一个 M12x1.5 的螺纹,钻头选多大的?"
# 2. LLM 思考 (Spindle Logic)
# LLM 分析意图:用户想计算底孔 -> 检索工具箱 -> 发现 'calculate_thread_hole' 匹配
# LLM 提取参数:diameter=12, pitch=1.5
# 3. LLM 生成调用指令 (Signal)
llm_response = {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_xyz123",
"type": "function",
"function": {
"name": "calculate_thread_hole",
"arguments": "{"diameter": 12, "pitch": 1.5}"
}
}]
}
# 4. 执行层捕获指令并运行 (Cutting)
tool_call = llm_response['tool_calls'][0]
func_name = tool_call['function']['name']
args = json.loads(tool_call['function']['arguments'])
if func_name == "calculate_thread_hole":
result = calculate_thread_hole(**args)
print(f"[System] Tool Output: {result}")
# Output:
# {'nominal_diameter': 'M12', 'pitch': 1.5, 'recommended_hole': 10.5, 'drill_bit': 'φ10.5mm 麻花钻'...}
在实际工业场景中,一个复杂的任务往往需要多把刀具配合。
例如:“帮我查一下仓库里 M12 丝锥的库存,如果有货,计算一下加工 100 个孔的成本。”
这涉及到了 Agent Orchestration(智能体编排) 。
在**智能体来了(西南总部)**的高阶课程中,我们学习了如何利用 LangGraph 或 Coze Workflow 来实现这种“复合加工”。
count: 50, price: 15.0100 * 15.0 = 1500通过将 AI Agent 技术与 机械原理 进行映射,我们可以得出几个关键结论:
给开发者的建议:
不要只盯着模型参数(7B, 70B)看。去打磨你的 Tools,去优化你的 Schema。
就像一个优秀的机加工师傅,他可能没有最顶级的机床,但他一定有一套精心打磨的刀具。
Tags: #AI Agent #Function Calling #Python #架构设计 #工业互联网
版权声明: 本文为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。