【ChatGLM4系列】入门介绍以及API调用

news2024/11/29 5:33:41

目录

  • 前言
  • 一、ChatGLM4
    • 1-1、模型介绍
    • 1-2、关键概念
    • 1-3、场景示例
    • 1-4、模型概览
  • 二、快速开始
    • 2-1、安装
    • 2-2、Demo案例
    • 2-3、请求参数
    • 2-4、异步调用
  • 三、模型工具
    • 3-1、通用Web搜索
    • 3-2、函数调用
    • 3-3、增强检索
    • 3-4、文件问答
  • 总结


前言

GLM 全名 General Language Model ,是一款基于自回归填空的预训练语言模型。

一、ChatGLM4

1-1、模型介绍

北京时间2024年1月16日,智谱AI正式推出GLM-4新一代基座大模型,整体性能相比GLM3全面提升60%,根据实际测试,GLM-4在以中文为主的应用场景中实际性能逼近GPT-4的95%,在一些中文对齐的测试中,甚至超过GPT-4表现,逼近GPT-4-turbo模型。 此外,GLM-4支持128K对话上下文,并且支持更强的多模态功能、支持更快推理速度,更多并发,大大降低推理成本;同时GLM-4增强了智能体(Agent)和Retrieval(检索)功能。并且,经过一段时间的实际使用发现,GLM-4相比ChatGLM3有明显进步,这也进一步增加了我们对国产大模型未来发展的期待。

在这里插入图片描述

1-2、关键概念

以下是一些关键概念的介绍

  • 1、GLM: GLM 全名 General Language Model ,是一款基于自回归填空的预训练语言模型。ChatGLM系列模型,支持相对复杂的自然语言指令,并且能够解决困难的推理类问题。该模型配备了易于使用的 API 接口,允许开发者轻松将其融入各类应用,广泛应用于智能客服、虚拟主播、聊天机器人等诸多领域。

  • 2、Embedding: Embedding 是一种将数据(如文本)转化为向量形式的表示方法,这种表示方式确保了在某些特定方面相似的数据在向量空间中彼此接近,而与之不相关的数据则相距较远。通过将文本字符串转换为向量,使得数据能够有效用于搜索、聚类、推荐系统、异常检测和分类等应用场景。

  • 3、Token: Token 是模型用来表示自然语言文本的基本单位,可以直观的理解为“字”或“词”;通常 1 个中文词语、1 个英文单词、1 个数字或 1 个符号计为 1 个token。一般情况下 ChatGLM 系列模型中 token 和字数的换算比例约为 1:1.8 ,但因为不同模型的分词不同,所以换算比例也存在差异,每一次实际处理 token 数量以模型返回为准,您可以从返回结果的 usage 中查看。

1-3、场景示例

以下为从官方文档中截取的部分适用场景:

在这里插入图片描述

1-4、模型概览

语言模型:
在这里插入图片描述

多模态模型:

在这里插入图片描述

向量模型:
在这里插入图片描述

其他模型:
在这里插入图片描述

二、快速开始

2-1、安装

pip install --upgrade zhipuai

2-2、Demo案例

from zhipuai import ZhipuAI
client = ZhipuAI(api_key="")  # 请填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-4",  # 请填写您要调用的模型名称
    messages=[
        {"role": "user", "content": "作为一名营销专家,请为我的产品创作一个吸引人的口号"},
        {"role": "assistant", "content": "当然,要创作一个吸引人的口号,请告诉我一些关于您产品的信息"},
        {"role": "user", "content": "智谱AI开放平台"},
        {"role": "assistant", "content": "点燃未来,智谱AI绘制无限,让创新触手可及!"},
        {"role": "user", "content": "创作一个更精准且吸引人的口号"}
    ],
)
print(response.choices[0].message)

输出:

content=‘“激活想象,智谱AI平台,让每一刻都是创新的起点!”’ role=‘assistant’ tool_calls=None

2-3、请求参数

常用参数:

  • model:要调用的模型名称
  • messages,对话消息列表,以JSON数组形式提供。
  • stream:是否为流式输出
  • max_tokens: 模型输出的最大token数。
  • tools:模型可以调用的工具,目前支持的工具类型为(function、retrival、web_search)。

参数列表如下:
在这里插入图片描述
在这里插入图片描述

2-4、异步调用

异步调用: 除了调用的函数不同,请求参数与同步API调用是相同的。

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.asyncCompletions.create(
    model="glm-4",  # 请填写您要调用的模型名称
    messages=[
        {
            "role": "user",
            "content": "
作为童话之王,请以始终保持一颗善良的心为主题,写一篇简短的童话故事。故事应能激发孩子们的学习兴趣和想象力,同时帮助他们更好地理解和接受故事中蕴含的道德和价值观。"
        }
    ],
)
print(response)
import time
from zhipuai import ZhipuAI

client = ZhipuAI(api_key="") # 请填写您自己的APIKey

response = client.chat.asyncCompletions.create(
    model="glm-4",  # 请填写您要调用的模型名称
    messages=[
        {
            "role": "user",
            "content": "
作为童话之王,请以始终保持一颗善良的心为主题,写一篇简短的童话故事。故事应能激发孩子们的学习兴趣和想象力,同时帮助他们更好地理解和接受故事中蕴含的道德和价值观。"
        }
    ],
)
task_id = response.id
task_status = ''
get_cnt = 0

while task_status != 'SUCCESS' and task_status != 'FAILED' and get_cnt <= 40:
    result_response = client.chat.asyncCompletions.retrieve_completion_result(id=task_id)
    print(result_response)
    task_status = result_response.task_status

    time.sleep(2)
    get_cnt += 1
    

三、模型工具

3-1、通用Web搜索

通用搜索:网络搜索功能默认为关闭状态(False)。当启用搜索(设置为 True)时,系统会自动判断是否需要进行网络检索,并调用搜索引擎获取相关信息。

  • **search_query **: 可以使用 search_query 参数可以自定义搜索内容,提升搜索结果的相关性和精确度。 如果不传 search_query 参数,系统将根据用户的消息自动进行网页检索。
  • content: 可以在用户的问题中加网页,以指定搜索某个网页
  • search_result : 启用 search_result 参数允许用户获取详细的网页搜索来源信息,包括来源网站的图标、标题、链接、来源名称以及引用的文本内容。
from zhipuai import ZhipuAI

client = ZhipuAI(api_key="您的APIKey")

tools = [{
    "type": "web_search",
    "web_search": {
        "enable": True #默认为关闭状态(False) 禁用:False,启用:True。
        # "search_query": "自定义搜索的关键词"
        # "search_result": True 
    }
}]

messages = [{
    "role": "user",
    "content": "中国 2024 年一季度的GDP是多少 "
}]

response = client.chat.completions.create(
    model="glm-4",
    messages=messages,
    tools=tools
)
print(response.choices[0].message)

输出:

content=‘根据您提供的参考信息,中国2024年一季度的GDP为296299亿元人民币。这个数据是根据国家统计局的初步核算,按不变价格计算得出的同比增长率5.3%。’ role=‘assistant’ tool_calls=None

3-2、函数调用

Tools字段传入可以调用的函数列表:
在这里插入图片描述
备注:

  • 传参错误:可以添加提示词例如——不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息
  • tool_choice : 强制模型使用特定函数
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="")
messages = []
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_flight_number",
            "description": "根据始发地、目的地和日期,查询对应日期的航班号",
            "parameters": {
                "type": "object",
                "properties": {
                    "departure": {
                        "description": "出发地",
                        "type": "string"
                    },
                    "destination": {
                        "description": "目的地",
                        "type": "string"
                    },
                    "date": {
                        "description": "日期",
                        "type": "string",
                    }
                },
                "required": [ "departure", "destination", "date" ]
            },
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_ticket_price",
            "description": "查询某航班在某日的票价",
            "parameters": {
                "type": "object",
                "properties": {
                    "flight_number": {
                        "description": "航班号",
                        "type": "string"
                    },
                    "date": {
                        "description": "日期",
                        "type": "string",
                    }
                },
                "required": [ "flight_number", "date"]
            },
        }
    },
]

messages = []
# messages.append({"role": "system", "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"})
messages.append({"role": "user", "content": "帮我查询从2024年1月20日,从北京出发前往上海的航班"})
response = client.chat.completions.create(
    model="glm-4",  # 填写需要调用的模型名称
    messages=messages,
    tools=tools,
    # tool_choice={"type": "function", "function": {"name": "get_ticket_price"}},
)
print(response.choices[0].message)
messages.append(response.choices[0].message.model_dump())

输出: 根据以下输出,我们可以看到模型成功调用了函数,并且传入了参数。

content=None role=‘assistant’ tool_calls=[CompletionMessageToolCall(id=‘call_9106867304118456432’, function=Function(arguments=‘{“date”:“2024-01-20”,“departure”:“北京”,“destination”:“上海”}’, name=‘get_flight_number’), type=‘function’)]

函数实现:

def get_flight_number(date:str , departure:str , destination:str):
    flight_number = {
        "北京":{
            "上海" : "1234",
            "广州" : "8321",
        },
        "上海":{
            "北京" : "1233",
            "广州" : "8123",
        }
    }
    return { "flight_number":flight_number[departure][destination] }
def get_ticket_price(date:str , flight_number:str):
    return {"ticket_price": "1000"}
def parse_function_call(model_response,messages):
    # 处理函数调用结果,根据模型返回参数,调用对应的函数。
    # 调用函数返回结果后构造tool message,再次调用模型,将函数结果输入模型
    # 模型会将函数调用结果以自然语言格式返回给用户。
    if model_response.choices[0].message.tool_calls:
        tool_call = model_response.choices[0].message.tool_calls[0]
        args = tool_call.function.arguments
        function_result = {}
        if tool_call.function.name == "get_flight_number":
            function_result = get_flight_number(**json.loads(args))
        if tool_call.function.name == "get_ticket_price":
            function_result = get_ticket_price(**json.loads(args))
        messages.append({
            "role": "tool",
            "content": f"{json.dumps(function_result)}",
            "tool_call_id":tool_call.id
        })
        response = client.chat.completions.create(
            model="glm-4",  # 填写需要调用的模型名称
            messages=messages,
            tools=tools,
        )
        print(response.choices[0].message)
        messages.append(response.choices[0].message.model_dump())

3-3、增强检索

  • 构建知识库: 用于管理文件,支持上传多个文件,并通过关联知识库ID后进行调用。知识库最大容量为1G、调用方式请参考接口文档。
from zhipuai import ZhipuAI
 
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
 
result = client.knowledge.create(
    embedding_id=3,
    name="knowledge name",
    description="knowledge description"
)
print(result.id)
  • 上传文件: 支持将doc、docx、pdf、xlsx类型文件上传到知识库,支持自定义文件切片的大小和规则。文件大小不得超过50MB。
from zhipuai import ZhipuAI
 
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
 
resp = client.knowledge.document.create(
    file=open("xxx.xlsx", "rb"),
    purpose="retrieval",
    knowledge_id="1798330146986561536",
    sentence_size=202,
    custom_separator=["\n"]
)
print(resp)
  • 通过工具调用知识库: 创建知识库后,您将获得一个知识库ID。调用模型服务时,传入知识库ID,使大模型能获取相关内容以响应用户查询。
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-4",  # 填写需要调用的模型名称
    messages=[
        {"role": "user", "content": "你好!你叫什么名字"},
    ],
    tools=[
            {
                "type": "retrieval",
                "retrieval": {
                    "knowledge_id": "your knowledge id",
                    "prompt_template": "从文档\n\"\"\"\n{{knowledge}}\n\"\"\"\n中找问题\n\"\"\"\n{{question}}\n\"\"\"\n的答案,找到答案就仅使用文档语句回答问题,找不到答案就用自身知识回答并且告诉用户该信息不是来自文档。\n不要复述问题,直接开始回答。"
                }
            }
            ],
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta)

3-4、文件问答

单文件问答示例:

from zhipuai import ZhipuAI
from pathlib import Path
import json

# 填写您自己的APIKey
client = ZhipuAI(api_key="your_api_key_here")

# 格式限制:.PDF .DOCX .DOC .XLS .XLSX .PPT .PPTX .PNG .JPG .JPEG .CSV .PY .TXT .MD .BMP .GIF
# 大小:单个文件50M、总数限制为100个文件
file_object = client.files.create(file=Path("aaa.pdf"), purpose="file-extract")

# 获取文本内容
file_content = json.loads(client.files.content(file_id=file_object.id).content)["content"]

# 生成请求消息
message_content = f"请对\n{file_content}\n的内容进行分析,并撰写一份论文摘要。"

response = client.chat.completions.create(
    model="glm-4-long",  
    messages=[
        {"role": "user", "content": message_content}
    ],
)

print(response.choices[0].message)

多文件问答示例

from zhipuai import ZhipuAI
from pathlib import Path
import json

# 填写您自己的APIKey
client = ZhipuAI(api_key="your_api_key_here")

# 上传并提取文本内容
file_01 = client.files.create(file=Path("aaa.pdf"), purpose="file-extract")
content_01 = json.loads(client.files.content(file_01.id).content)["content"]

# 上传并提取文本内容
file_02 = client.files.create(file=Path("bbb.pdf"), purpose="file-extract")
content_02 = json.loads(client.files.content(file_02.id).content)["content"]

# 生成请求消息,将不同文件的内容放入消息中
message_content = (
    "请对以下论文进行分析,并且生成一份论文综述:\n\n"
    "第一篇论文内容如下:\n"    
    f"{content_01}\n\n"
    "第二篇论文内容如下:\n"
    f"{content_02}"
)

response = client.chat.completions.create(
    model="glm-4-long",  
    messages=[
        {"role": "user", "content": message_content}
    ],
)

print(response.choices[0].message)

删除文件: 每个用户最多可以上传100个文件,建议在提取数据后删除文件,并将文件抽取内容存储到本地,避免重复上传。

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="") # 请填写您自己的APIKey

result = client.files.delete(
    file_id="文件id"         #支持retrieval、batch、fine-tune、file-extract文件
)

参考文章:

  • 智谱AI官方文档

总结

想上天🐟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据可视化-使用python制作词云图(附代码)

想象一下&#xff0c;当你写完一篇日记或者一篇文章后&#xff0c;想要知道里面哪些词语出现得最多。这时候&#xff0c;词云图就能派上用场了。它会统计出文章里每个词语出现的次数&#xff0c;然后把这些词语以不同大小的字体展示出来&#xff0c;出现次数越多的词语&#xf…

免费打工人必备工具箱

下载地址&#xff1a;https://pan.quark.cn/s/356d7f201d7a 图片处理工具 格式转换&#xff1a;轻松转换图片格式&#xff0c;满足不同需求。 ICO转换&#xff1a;将图片转换为ICO格式&#xff0c;适用于图标设计。 图片压缩&#xff1a;无损压缩图片&#xff0c;减小文件大小…

Oracle中解决select into值集为空的报错情况

先看为空的情况 procedure test is n number; begin select 1 into n from CUX_2_OM_RELEASE_LIMIT_V cov where cov.Customer_Idnull; end; CUX_2_OM_RELEASE_LIMIT_V中没有id是空的&#xff0c;因此返回的结果一定是空集 运行结果: 有时候我…

Excel使用技巧:筛选2组数据;条件格式突出显示数据

Excel的正确用法&#xff1a; Excel是个数据库&#xff0c;不要随意合并单元格。 数据输入的时候一定要按照行列输入&#xff0c;中间不要留空&#xff0c;不然就没有关联。 筛选2组数据 相信大家已经知道如何筛选1组数据&#xff0c;有时候我们需要同时筛选2组数据。有2步&…

探秘盒子浮动,破解高度塌陷与文字环绕难题,清除浮动成关键!

目录 一、浮动 1、为什么使用浮动&#xff1f; 2、浮动的概念 3、语法 4、浮动的特性 &#xff08;3&#xff09;浮动的元素会具有行内块元素的特性 5、浮动元素经常和标准流父级搭配使用 6、浮层的弊端 &#xff08;1&#xff09;高度塌陷 &#xff08;2&#xff09;…

无人机之声学识别技术篇

一、声学识别技术的原理 无人机在飞行过程中&#xff0c;其电机工作、旋翼震动以及气流扰动等都会产生一定程度的噪声。这些噪声具有独特的声学特征&#xff0c;如频率范围、时域和频域特性等&#xff0c;可以用于无人机的检测与识别。声学识别技术主要通过以下步骤实现&#x…

浙大数据结构:11-散列2 Hashing

这道题主要是小细节要把握&#xff0c;实际难度不大 机翻 1、条件准备 表大小&#xff0c;输入数据数 #include <iostream> #include<vector> #include<cmath> using namespace std; #define endl \nint Size,n;2、主函数 先输入数据&#xff0c;用ispr…

目前web浏览器播放rtsp视频流,h5播放rtmp监控方案比较,代码测试

在web上实现播放rtsp/rtmp视频流&#xff0c;由于浏览器不 能自定义协议&#xff0c;不能直接播放&#xff0c;市面上充满各种方案&#xff0c;鱼龙混杂&#xff0c;主要方案有两种&#xff1a; 1&#xff0c;浏览器插件方案&#xff0c;vlc浏览器控件&#xff08;已过期&…

远翔原厂芯片设计开发软件:降压恒流共阳极无频闪调光芯片FP7126/7127/7128,舞台灯磁吸轨道灯智能家居应用方案

FP7126 FP7127 FP7128是平均电流模式控制的 LED 驱动 IC&#xff0c;具有稳定输出恒流的能力&#xff0c;优秀的负载调整率与高精度的电流控制。不用额外增加外部补偿元件&#xff0c;简化 PCB 板设计。FP7126 FP7127 FP7128可接受 PWM 数位调光&#xff0c;建议调光频率 0.1kH…

事务使用方法

为什么需要事务&#xff1a; 示例&#xff1a; 银行转账问题 假定资金从账户A转到账户B&#xff0c;至少需要两步 账户A的资金减少 然后账户B的资金相应增加。 示例 假定张三的账户有1000元&#xff0c;李四账户有1元 UPDATE bank set moneymoney-500 WHERE name张三; UPDA…

以价换量,豆包血拼AI的商业考量

“ 借豆包AI推出智能耳机&#xff0c;字节跳动再战智能硬件&#xff0c;仍面临研发、营销成本高企和商业模式不明确的挑战&#xff0c;这一新尝试充满变数。 ” 转载&#xff1a; 科技新知 原创 作者丨颜瞾 编辑丨蕨影 没有哪个赛道&…

I\O进程线程(Day27)

一、学习内容 IO基础 概念 程序与外部设备进行交换的信息过程 分类 标准IO 封装好的相关库函数、有缓冲区、文件指针eg&#xff1a;fprintf、fscanf、fputc、fgetc、fputs、fgets、fopen、fclose... 操作流程 FILE *fp通过fopen打开文件 使用fprintf、fputc、fputs、fwrite把在…

【Linux】Linux进程概念

冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成&#xff0c; 输入单元&#xff1a;包括键盘 , 鼠…

选GB28181还是RTSP?

好多开发者&#xff0c;搞不清楚什么时候用GB28181&#xff0c;什么时候用RTSP&#xff0c;本文就二者使用场景和区别&#xff0c;做个大概的探讨&#xff1a; 定义与性质&#xff1a; GB28181&#xff1a;是中国国家标准&#xff0c;全称为《公共安全视频监控联网系统信息传输…

安科瑞诚邀您参加2024新加坡亚洲数据中心展

Exhibition Time: October 09-10, 2024 展览时间&#xff1a;2024年10月09日-10日 Exhibition Hall: Sands Expo & Convention Center 展览馆&#xff1a;Sands Expo & Convention Center Exhibition Number: BASEMENT2-L16 展览号&#xff1a;BASEMENT2-L16 Add…

文献阅读(222) VVQ协议死锁

题目&#xff1a;VVQ: Virtualizing Virtual Channel for Cost-Efficient Protocol Deadlock Avoidance时间&#xff1a;2023会议&#xff1a;HPCA研究机构&#xff1a;KAIST request-reply协议死锁如下图所示&#xff0c;每个node收到request之后发送reply&#xff0c;但是想…

2020-11-06《04丨人工智能时代,新的职业机会在哪里?》

《香帅中国财富报告25讲》 04丨人工智能时代&#xff0c;新的职业机会在哪里&#xff1f; 1、新机会的三个诞生方向 前两讲我们都在说&#xff0c;人工智能的出现会极大地冲击现有的职业&#xff0c;从2020年开始&#xff0c;未来一二十年&#xff0c;可能有一半以上的职业都会…

人工智能与生活:探索科技未来的无限可能性

随着科技的不断进步&#xff0c;人工智能已经成为了我们日常生活中不可或缺的一部分。从智能手机到智能家居&#xff0c;从自动驾驶汽车到医疗诊断&#xff0c;人工智能已经渗透到了我们的方方面面。在这篇文章中&#xff0c;我们将从不同的角度探讨人工智能与生活的联系&#…

A股异动与IP数据地址关联分析

最近A股经历了一些显著的移动。在2024年10月9号&#xff0c;A股三大指数大幅下跌&#xff0c;沪指、深成指、和创业板指分别下跌6.62%、8.15%和10.59%。市场的复杂性和不确定性明显&#xff0c;也由此给我们提供了从IP数据地址角度进行分析的机会。 从市场的基本面来看&#xf…

windows10系统-设置账户密码有效期

操作系统: windows10 .a.打开windows10用户管理界面 windows R -> 输入 gpedit.msc ->确定 如下图所示; .b.点击Windows设置->安全设置->账户策略->密码策略 .c.选中密码最长有效期限&#xff0c;修改即可。 修改后示例如下 关于第一条&#xff1a;密码必须符…