前文
在业务中如果使用大模型的 tools 方式来解决问题,肯定会遇到一个问题,就是 tools 的数量太多了,tools 本身的描述加上参数的描述整个 token 的数量会超出大模型的输入 token 限制,这种情况需要我们想办法去解决。本文就是讨论遇到这类问题的解决方案。
基本认识
首先我们要有以下几点基本的认识:
- 大模型的最强的最本质的能力是
理解能力
,理解能力是个很强的能力,理论上大模型什么都可以干,就像大脑
一样。 - tools 本质上就是将遇到的问题进行
分类
,再往简单说就是将业务上可能碰到的问题进行if-else
划分,每个 tool 会写好具体的实现逻辑、入参、返回结果
,我们只需要让大模型干两件事情:第一步就是先让大模型理解用户的问题可以使用哪个 tool 来解决,第二个问题就是使用大模型从用户的问题中抽取出适合该 tool 的入参。这样可以保证在遇到 tools 可以解决的问题集合的时候,输出都是稳定的。避免了原生的大模型的幻觉等原生缺点。
基础思路
如果是通常情况下 tools 的数量比较少,其中的参数及其描述也比较少,使用最常见的方式进行即可,我这里用 qwen 的 api 展示效果。可以看到我的 tools 中只有两个:
- 一个是获取当前的时间
get_current_time
,其工具描述为“当你想知道现在的时间时非常有用”
,这个 tool 没有参数,直接返回结果即可。 - 另一个是获取某地的天气
get_current_weather
,其工具描述为“当你想查询指定城市的天气时非常有用”
,这个 tool 需要从问题中获取参数location
。
tools = [
# 工具1 获取当前时刻的时间
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "当你想知道现在的时间时非常有用。",
"parameters": {} # 因为获取当前时间无需输入参数,因此parameters为空字典
}
},
# 工具2 获取指定城市的天气
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "当你想查询指定城市的天气时非常有用。",
"parameters": { # 查询天气时需要提供位置,因此参数设置为location
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市或县区,比如北京市、杭州市、余杭区等。"
}
}
},
"required": [
"location"
]
}
}
]
messages = [
{
"content": '杭州天气如何',
"role": "user"
}
]
response = Generation.call( model='qwen-max', messages=messages, tools=tools, seed=random.randint(1, 10000), result_format='message' )
我们这里问的问题是杭州天气如何
,那么大模型就会同时去 tools 中查看,自己通过理解问题选择合适的工具为 get_current_weathe
r ,并且提取出了参数“杭州”
。日志结果如下:
{
"status_code": 200,
"request_id": "bd803417-56a7-9597-9d3f-a998a35b0477",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "tool_calls",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": "{"properties": {"location": "杭州"}, "type": "object"}"
},
"id": "",
"type": "function"
}
]
}
}
]
},
"usage": {
"input_tokens": 222,
"output_tokens": 27,
"total_tokens": 249
}
}
进阶思路
从上面的日志结果中我们看到,里面有一项是 input_tokens
,这个表示我们向大模型中传入的 prompt 的 token 数量,包括了 tools 中的所有文字描述以及你的问题描述的 token 总和。 qwen-max
的上限是 6k
,而我在业务中需要用到的 tools 数量很大,而且参数的数量及其介绍也很多,这样上面的基础思路就明显无法满足我们的需求,因为一旦将所有的 tools 传入大模型,肯定会报错超出大模型的输入限制。我们可以换一个思路,大模型接收所有的 tools 内容自动做了选 tool 和提参数这两件事情,我可以手动控制分步做这两件事:
- 第一步就是使用一个简略的 tools ,这个里面只有工具的
名字和描述
,没有参数及其描述,先将这个 tools 传入大模型让大模型能够先选择出正确的 tool 。 - 第二步再将这个 tool 改造成长度只有 1 的 tools ,传入大模型,让其按照这个 tool 的预定参数来从问题中抽取入参即可。
这样分两步即可解决 tools 太多的问题。其实还可以扩展开来,我们将所有的 tools 进行多级分类,这样前面的几级只负责对问题识别和路由的过程,到最后的某个局部分子树或者叶子节点的时候对应的少量的 tools ,再解决问题就很简单了。
我这里简单举例,大家懂逻辑即可。首先我先简单写了一个 tool_choose_prompt 来让大模型针对问题选择合适的 tool 名字,然后根据名字再使用大模型做具体的任务。
tool_choose_prompt = [system_message(
"你是一个擅长解析问题的助手,你可以根据问题解析出解决这个问题要用哪一类工具,具体有以下几种工具:"
"gxssln_tool、 dxtdpy_tool、 plan_tool,"
"其中,gxssln_tool 用于解决管线问题、 dxtdpy_tool 用于解决地下通道问题、 plan_tool 用于解决计划、项目、工程的问题。"
"再返回结果时你只需要返回工具名即可。"),
user_message(f"我现在的问题是【{question}】")
]
first_response = dashscope.Generation.call(model="qwen-max", messages=tool_choose_prompt, result_format='message')
content = str(first_response["output"]["choices"][0]["message"]["content"])
response = ""
if content == "gxssln_tool":
response = dashscope.Generation.call(model="qwen-max", messages=tool_prompt, result_format='message', tools=gxssln_tool)
elif content == "dxtdpy_tool":
response = dashscope.Generation.call(model="qwen-max", messages=tool_prompt, result_format='message', tools=dxtdpy_tool)
elif content == "plan_tool":
response = dashscope.Generation.call(model="qwen-max", messages=tool_prompt, result_format='message', tools=plan_tool)
print(response['output']['choices'][0]['message']['tool_calls'])
那么,我们该如何学习大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、大模型全套的学习路线
学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。
L1级别:AI大模型时代的华丽登场
L2级别:AI大模型API应用开发工程
L3级别:大模型应用架构进阶实践
L4级别:大模型微调与私有化部署
一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。
以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。