背景
最近给大模型调用增加了自定义的 UI 界面,并添加了获取当前日期的工具调用。
原因很简单,大语言模型无法直接感知真实时间,如果需要处理“今天是什么日期”这类问题,就需要通过工具获取。
另外也是想在 PC 端通过 API 调用跑通工具调用的流程。
实现如下:
@tool(
name="get_current_datetime",
description=(
"获取当前本地日期与时间(格式 YYYY-MM-DD HH:MM:SS)。"
),
)
def get_current_datetime() -> str:
"""返回当前本地日期与时间"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")测试过程中,大部分场景都符合预期。但输入“写一篇秋天的短文”后,模型却调用了日期工具。

这个结果有些出乎意料,为什么模型会认为需要获取当前时间?
排查之后发现,问题并不在工具代码,而在工具描述。
AI 选择工具,依赖的是对工具的理解
传统开发中,函数的调用时机由开发者写的代码提前确定。
但 AI 调用工具前,模型需要先理解用户需求,再判断已有工具是否能够帮助完成任务。模型看到的不是函数实现,而是工具暴露出来的名称、描述。
而且这段描述会直接参与模型决策。
当描述中出现“当前”“时间”“日期”等关键词时,模型可能会扩大工具的适用范围,并建立类似这样的关联:
秋天 → 季节 → 时间背景 → 当前日期 → 调用日期工具
对于用户来说,“写秋天的文章”属于文学创作;但对于模型来说,它首先是一次基于语义相关性的工具判断。
工具描述的关键,还要定义使用边界
最开始的工具描述是:
获取当前本地日期与时间(格式 YYYY-MM-DD HH:MM:SS)。
这句话描述了工具有什么能力,却没有进一步说明什么情况下使用。
后来进行了优化,将描述调整为:
获取当前本地日期与时间(格式 YYYY-MM-DD HH:MM:SS)。
仅当用户意图和查询日期或时间(例如,今天几号、现在几点)有关时调用。
用户消息中只出现“今天”、“现在”等时间词,但任务场景不需要时钟信息时(例如,写文章、日常闲聊),不要调用。
修改后的描述实际上增加了两层信息:
第一,明确使用场景:需要真实日期的任务。
第二,明确排除场景:文学创作、季节描述等不需要真实日期的任务。
这两部分补充进来,完善了工具调用的边界。
验证
验证写文章和日常聊天不会调用日期工具。

总结
这次日期工具误调用,本质上不是代码 Bug,而是接口设计问题。
在 AI 系统中,一个工具不仅需要实现正确,还需要被模型正确理解。
好的工具描述,不只是告诉模型“我能做什么”,更需要让它知道“什么时候应该想到我”。
当软件能力开始交给模型调用时,描述本身,也成为软件设计的一部分。
夜雨聆风