AI是如何选择工具的

在进一步学习AI工具定义之前,我们有必要先了解一下AI是如何选择工具的,这样才能设计出更好用的AI工具。

AI如何决定调哪个工具?

工具和参数的描述(description)极为重要,AI要根据工具的描述选择合适的工具(一般会定义多个工具)。

例如假定我们定义了三个工具:

caller.AddTool("get_weather", "获取指定城市的天气信息")
caller.AddTool(
"search_customer", "在客户数据库中搜索客户")
caller.AddTool(
"get_current_time", "获取当前日期和时间")

如果用户问:“今天北京的天气怎么样?”

AI 看到 get_weather 的描述里有关键词 “天气”,而其他工具的描述里没有,于是选择调用 get_weather

如果用户问:“帮我查一下客户张三的电话。”

AI 看到 search_customer 的描述里有关键词 “客户”,于是选择调用 search_customer。
 

通过参数进行二次确认

如果两个工具名字和描述都很像,AI 还会通过参数结构来二次确认,例如下面两个工具的描述非常相近:

With caller.AddTool("query_weather", "获取指定城市的天气信息")
    .AddParameter(
"city", "string", "城市名称,如:北京、上海、广州", True)
End
With
With
caller.AddTool("query_aqi", "查询指定城市的空气质量")
    .AddParameter(
"city", "string", "城市名称,如:北京、上海、广州", True)
    .AddParameter(
"hour", "integer", "查询的小时(0-23),不传则返回当前小时的数据")
End
With

如果用户问“北京现在的空气质量怎么样?”,AI 会发现:

query_weather工具的参数只有city,和问题中的"现在"不是很匹配,且工具描述为"查询天气",而用户问题中提到了“空气质量”,也不是很匹配。

query_aqi 工具多了个 hour 参数,根据参数名和参数描述可知这是用于指定时间的,且工具描述为"查询空气质量",更匹配问题中的"现在"和"空气质量"这个场景。

于是AI决定调用query_aqi工具,如果没有query_aqi工具,则会退而求其次,调用query_weather工具。

定义工具的时候,参数的名称要有意义,而且要有具体描述,能有利于AI准确匹配工具和生成参数。


更具体的描述

为了让AI能更准确地选择工具,可以进行更具体的描述,例如:

Dim caller As New LLMCaller("https://api.deepseek.com/chat/completions", "deepseek-flash", "sk-a734b83536da45e9aedc3e42605bfb3a")
With
caller.AddTool("get_weather", "获取指定城市指定时间的综合天气数据,包括温度、湿度、风速、降水概率等。用户问'天气怎么样'时用这个")
    .AddParameter(
"city", "string", "城市名称,如:北京、上海、广州", True)
    .AddParameter(
"hour", "integer", "查询的小时(0-23),不传则返回当前小时的数据")
End
With
With
caller.AddTool("get_temperature", "仅获取指定城市指定时间的实时温度数值(摄氏度),不返回其他信息。用户问'多少度'或'热不热'时用这个。")
    .AddParameter(
"city", "string", "城市名称,如:北京、上海、广州", True)
    .AddParameter(
"hour", "integer", "查询的小时(0-23),不传则返回当前小时的数据")
End
With

不管是工具的描述,还是参数的描述,都应该尽可能准确具体一些,帮助AI快速匹配到合适的工具。
 

AI如何生成参数值

如果用户定义了一个工具:

With caller.AddTool("query_weather", "获取指定城市的天气信息")
    .AddParameter(
"city", "string", "城市名称,如:北京、上海、广州", True)
End
With

这相当于告诉AI:“我有一个工具叫 query_weather,它需要一个参数叫 city,类型是字符串,描述是城市名称。”

当用户说“今天北京的天气怎么样?”时,AI 会:

步骤

AI 做什么

1. 分析用户问题 提取关键信息:“北京”、“天气”
2. 查看工具参数结构 知道需要填一个 city 字段,类型是 string
3. 匹配信息到参数 将“北京”填入 city
4. 生成 JSON {"city": "北京"}

如果工具需要多个参数,AI 会从用户问题中提取多个信息,例如用户定义了一个工具:

With caller.AddTool("send_email", "发送一封电子邮件给指定收件人,支持设置主题和正文内容。当用户需要写信、发邮件、通知他人时使用此工具")
    .AddParameter(
"to", "string", "收件人姓名或邮箱地址,如:张三 或 zhangsan@company.com", True)
    .AddParameter(
"subject", "string", "邮件主题,应简洁概括邮件内容,如:项目汇报、会议通知")
    .AddParameter(
"body", "string", "邮件正文内容,应清晰完整,包含所有必要信息")
End
With

如果用户说:"帮我写一封邮件给张总,告诉他明天下午3点开会,主题是项目汇报。"

AI 推理过程:

1. 用户说“给张总”→“to”参数填“张总”

2. 用户说“主题是项目汇报”→“subject”参数填“项目汇报”

3. 用户说“明天下午3点开会”→“body”参数填“明天下午3点开会”

4. 生成:{"to": "张总", "subject": "项目汇报", "body": "明天下午3点开会"}

再例如对于下面的工具:

With caller.AddTool("search_products", "根据产品名称、分类和价格范围筛选产品")
    .AddParameter(
"keyword", "string", "产品名称关键词")
    .AddParameter(
"category", "string", "产品分类")
    .AddParameter(
"min_price", "number", "最低价格")
    .AddParameter(
"max_price", "number", "最高价格")
End
With

如果用户说:“帮我找一下价格在 100 到 500 之间的电子类产品,关键词是耳机。”

AI 推理后生成的参数为:{"keyword": "
耳机", "category": "电子
", "min_price": 100, "max_price": 500}


本页地址:http://www.foxtable.com/webhelp/topics/7214.htm