当前位置: 首页 > article >正文

【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)

注意工具的写法如下:

参数名称类型是否必填参数说明
typeString设置为function
functionObject
nameString函数名称
descriptionString用于描述函数功能。模型会根据这段描述决定函数调用方式。
parametersObjectparameters字段需要传入一个 Json Schema 对象,以准确地定义函数所接受的参数。

http://www.kler.cn/news/359430.html

相关文章:

  • 初识git · 基本操作
  • 【云原生】Kubernetes (K8s)
  • 【CVPR 2024】最新图像增强算法 | 图像去雨 | Deraining
  • 详解Java之异常
  • linux下建立软链接
  • windows 上验证请求接口是否有延迟
  • LeetCode Hot100 | Day6 | 从前序和中序数组构建二叉树
  • 使用短效IP池的优势是什么?
  • Axure显示与隐藏——元件动作一
  • 面对AI算力需求激增,如何守护数据中心机房安全?
  • Linux系统:tac命令
  • 红日靶机(五)笔记
  • ES2017 新特性 (Async和await)
  • 【从零开始的LeetCode-算法】3099. 哈沙德数
  • Lua环境安装
  • 人工智能:塑造未来生活与工作的力量
  • 链表的基本操作(FreeRTOS基础)
  • SpringBoot智能推荐:健康生活新选择
  • 大话哈希冲突
  • 【Flutter】基础入门:Widgets