【LLM】大模型工具调用之AllTools模型
Zhipuai的GLM-4-AllTools 是专门为支持智能体和相关任务而进一步优化的模型版本。它能够自主理解用户的意图,规划复杂的指令,并能够调用一个或多个工具(例如网络浏览器、代码解释器和文本生图像)以完成复杂的任务。
截止20241021现在支持的工具:
工具 | 介绍 |
---|---|
智能编程助手 | 智能编程助手(Code Interpreter)能够准确理解自然语言描述的编程需求,自动生成代码片段来解决实际问题。 |
安全代码沙盒 | 安全代码沙盒(Sandbox)提供了一个安全的执行和测试环境,可以在其中模拟真实环境中的代码执行结果。 |
沙盒文件上传 | 支持上传文件(File)给代码沙盒进行访问,模型理解数据字段格式,能够用于数据处理和分析等场景。 |
实时联网搜索 | 实时联网搜索(Web Search)能够在互联网上实时搜索信息,基于全网的搜索结果进行分析,提供更实时更全面的答案。 |
网页浏览工具 | 网页浏览工具(Browser)区别于联网搜索,能够打开指定的网页进行浏览,基于网页内容进行更深入的分析。 |
绘图设计工具 | 绘图设计工具(Drawing tool)根据文本描述能够生成高质量、高分辨率的图片,支持多种图像风格,满足各类绘图需求。 |
函数调用能力 | 函数调用能力(Function Call)允许AI助手调用外部函数,以执行特定任务或获取必要数据,实现与外部系统的无缝集成。 |
当前只支持SSE流式输出,可以累加拼接:
(1)调用网页搜索工具
# 浏览网页
from zhipuai import ZhipuAI
my_key = "xxx"
client = ZhipuAI(api_key=my_key) # 请填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4-alltools", # 填写需要调用的模型名称
messages=[
{
"role": "user",
"content":[
{
"type":"text",
"text":"北京五道口附近有哪些推荐的餐厅?"
}
]
}
],
max_tokens= 40000,
stream=True,
tools=[
{
"type":"web_browser",
"web_browser":{
"browser" :"auto"
}
}
]
)
# for chunk in response:
# print(chunk)
# 每个chunk内容:
# ChatCompletionChunk(id='20241021213650f82d5f06363d4209', choices=[Choice(delta=ChoiceDelta(content=None, role='assistant', tool_calls=None), finish_reason='stop', index=0)], created=1729517830, model='glm-4-alltools', usage=CompletionUsage(prompt_tokens=4281, completion_tokens=313, total_tokens=4594), extra_json=None, status='completed')
# 循环读取流式输出的数据
def liu_ans(response):
end_ans = ""
for chunk in response:
# chunk 是一个 ChatCompletionChunk 对象
# 提取 choices 列表中的第一个 Choice 对象
choice = chunk.choices[0]
# 提取 delta 属性中的 content
content = choice.delta.content
if content is not None:
# print(content)
end_ans += content
return end_ans
end_ans = liu_ans(response)
print(end_ans)
得到的结果如下(搜了下确实有这几家店):
在北京五道口附近,有几家被推荐的餐厅您可以考虑试试:
1. **水平有限**:这家店以螺蛳粉著称,被认为是京城最佳之一。店面风格小资,食物口味浓郁。米粉口感好,配料丰富。
2. **乐山油炸巴蜀二荆条**:这是一家特色的乐山风味小吃店,主要提供各种油炸串串。
除此之外,还有许多其他风格的餐厅可以选择,比如重庆火锅、烧烤、韩式烤肉等不同风味的餐馆,满足不同的口味需求。具体的餐厅信息和位置,您可以查阅知乎相关文章或网易新闻提供的详细列表。[知乎专栏](https://zhuanlan.zhihu.com/p/387669298)、[网易新闻](https://www.163.com/dy/article/DP3M98AU05421G3J.html) 和 [知乎问题](https://www.zhihu.com/question/21967026?sort=created&page=1)上有更详细的介绍和建议。
(2)使用自定义的函数get_tourist_data_by_year
:
from zhipuai import ZhipuAI
my_key = "xxx"
client = ZhipuAI(api_key=my_key) # 请填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4-alltools", # 填写需要调用的模型名称
messages=[
{
"role": "user",
"content":[
{
"type":"text",
"text":"帮我查询2018年至2024年,每年五一假期全国旅游出行数据,并绘制成柱状图展示数据趋势。"
}
]
}
],
stream=True,
tools=[
{
"type": "function",
"function": {
"name": "get_tourist_data_by_year",
"description": "用于查询每一年的全国出行数据,输入年份范围(from_year,to_year),返回对应的出行数据,包括总出行人次、分交通方式的人次等。",
"parameters": {
"type": "object",
"properties": {
"type": {
"description": "交通方式,默认为by_all,火车=by_train,飞机=by_plane,自驾=by_car",
"type": "string"
},
"from_year": {
"description": "开始年份,格式为yyyy",
"type": "string"
},
"to_year": {
"description": "结束年份,格式为yyyy",
"type": "string"
}
},
"required": ["from_year","to_year"]
}
}
},
{
"type": "code_interpreter"
}
]
)
# for chunk in response:
# print(chunk)
# 循环读取流式输出的数据
def liu_ans(response):
end_ans = ""
for chunk in response:
# chunk 是一个 ChatCompletionChunk 对象
# 提取 choices 列表中的第一个 Choice 对象
choice = chunk.choices[0]
# 提取 delta 属性中的 content
content = choice.delta.content
if content is not None:
# print(content)
end_ans += content
return end_ans
end_ans = liu_ans(response)
print(end_ans)
注意工具的写法如下:
参数名称 | 类型 | 是否必填 | 参数说明 |
---|---|---|---|
type | String | 是 | 设置为function |
function | Object | 是 | |
name | String | 是 | 函数名称 |
description | String | 是 | 用于描述函数功能。模型会根据这段描述决定函数调用方式。 |
parameters | Object | 是 | parameters字段需要传入一个 Json Schema 对象,以准确地定义函数所接受的参数。 |