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

【大模型实战篇】GLM-Zero模型初代版本的尝鲜

1. 背景介绍

        在 2024 年的最后一天,智谱发布了 GLM-Zero 的初代版本 GLM-Zero-Preview,是基于扩展强化学习技术训练的推理模型【1】。GLM-Zero-Preview的推理能力还挺强的,类似于open ai的o1模型,擅长在一些有确定性结果的场景,比如逻辑推理、数学、编程。

        稍微试用了一下,感觉确实不错,尝试了智谱清言的Zero推理agent,以及SDK【2】两种方式, 还是建议用SDK的模式,似乎会更加稳定。agent有时候会出现一些效果波动。

2.  SDK方式

2.1 接口信息

类型说明
方法https
请求URLhttps://open.bigmodel.cn/api/paas/v4/chat/completions
调用方式同步调用,等待模型完成执行并返回最终结果或使用SSE调用
字符编码UTF-8
请求格式JSON
响应格式JSON或标准Stream Event
请求类型POST
开发语言任何能够发起HTTP请求的开发语言

2.2 请求参数 

参数名称类型必填参数描述
modelString要调用的模型编码。
messagesList<Object>调用语言模型时,当前对话消息列表作为模型的提示输入,以JSON数组形式提供,例如{“role”: “user”, “content”: “Hello”}。可能的消息类型包括系统消息、用户消息、助手消息和工具消息。
request_idString由用户端传递,需要唯一;用于区分每次请求的唯一标识符。如果用户端未提供,平台将默认生成。
do_sampleBoolean当do_sample为true时,启用采样策略;当do_sample为false时,温度和top_p等采样策略参数将不生效。默认值为true。
streamBoolean该参数在使用同步调用时应设置为false或省略。表示模型在生成所有内容后一次性返回所有内容。默认值为false。如果设置为true,模型将通过标准Event Stream逐块返回生成的内容。当Event Stream结束时,将返回一个data: [DONE]消息。
temperatureFloat采样温度,控制输出的随机性,必须为正数取值范围是:[0.0, 1.0],默认值为0.95。
top_pFloat另用温度取样的另一种方法,取值范围是:[0.0, 1.0],默认值为0.7。
max_tokensInteger模型输出的最大token数,最大输出为16k,默认值为12k。
stopList模型遇到stop指定的字符时会停止生成。目前仅支持单个stop词,格式为[“stop_word1”]。
user_idString终端用户的唯一ID,帮助平台对终端用户的非法活动、生成非法不当信息或其他滥用行为进行干预。ID长度要求:至少6个字符,最多128个字符。

2.3 Message 格式

System Message
参数名称类型必填参数说明
roleString消息的角色信息,此时应为system
contentString消息内容,GLM-Zero-Preview 启动深度思考模型,System Prompt需设置为:Please think deeply before your response.
User Message
参数名称类型必填参数说明
roleString消息的角色信息,此时应为user
contentString消息内容
Assistant Message
参数名称类型必填参数说明
roleString消息的角色信息,此时应为assistant
contentString消息内容

2.4 响应参数

参数名称类型参数描述
idString任务ID
createdLong请求创建时间,为Unix时间戳,单位为秒
modelString模型名称
choicesList当前对话的模型输出内容
indexInteger结果索引
finish_reasonString模型推理终止的原因。可以是’stop’、‘tool_calls’、‘length’、‘sensitive’或’network_error’。
messageObject模型返回的文本消息
roleString当前对话角色,默认为’assistant’(模型)
contentString当前对话内容。命中函数时为null,否则返回模型推理结果。GLM-Zero-Preview 返回内容由以下两部分构成:###Thinking模型的详细思考过程。###Response模型的最终回答或输出。
usageObject模型调用结束时返回的token使用统计。
prompt_tokensInteger用户输入的token数量
completion_tokensInteger模型输出的token数量
total_tokensInteger总token数量

2.5 请求示例

from zhipuai import ZhipuAI
client = ZhipuAI(api_key="")  # 请填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-zero-preview",  # 请填写您要调用的模型名称
    messages=[
        {"role": "system", "content": "Please think deeply before your response."},#GLM-Zero-Preview 启动深度思考,System Prompt需设置为:Please think deeply before your response.
        {"role": "user", "content": "一个袋子中有5个红球和3个蓝球,随机抽取2个球,抽到至少1个红球的概率为:"}
    ],
    max_tokens=12000,
    
)
print(response)

2.6 异步调用

        以上是同步调用的方式,也可以支持异步调用。

2.6.1 接口请求

类型说明
传输方式HTTPS
请求URLhttps://open.bigmodel.cn/api/paas/v4/async/chat/completions
调用方式异步,结果必须通过查询接口获取
字符编码UTF-8
请求格式JSON
响应格式JSON
HTTP方法POST
开发语言任何能够发起HTTP请求的开发语言

2.6.2 调用示例

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.asyncCompletions.create(
    model="glm-zero-preview",  # 请填写您要调用的模型名称
    messages=[
        {"role": "system", "content": "Please think deeply before your response."},
        {"role": "user", "content": "一个袋子中有5个红球和3个蓝球,随机抽取2个球,抽到至少1个红球的概率为:"}
    ],
)
print(response)

2.6.3 任务结果查询

接口请求
类型说明
传输方式https
请求URLhttps://open.bigmodel.cn/api/paas/v4/async-result/{id}
调用方式同步调用,等待模型完全执行并返回最终结果
字符编码UTF-8
请求格式JSON
响应格式JSON
HTTP方法GET
开发语言同步调用,等待模型完全执行并返回最终结果
请求参数
参数名称类型必填描述
idString任务id
响应参数
参数名称类型描述
modelString模型名称
choicesList当前对话模型输出内容,目前仅返回一个
indexInteger结果索引
finish_reasonString模型推理终止的原因。"stop"表示自然结束或触发stop词,"length"表示达到token长度限制。
messageObject模型返回的文本消息
roleString当前对话角色,目前默认为assistant(模型)
contentString当前对话内容
task_statusString处理状态:PROCESSING(处理中),SUCCESS(成功),FAIL(失败)
request_idString客户端请求时提交的任务号或平台生成的任务号
idString智谱AI开放平台生成的任务序号,调用请求结果接口时使用此序号
usageObject本次模型调用的token统计
prompt_tokensint用户输入的token数量
completion_tokensint模型输出的token数量
total_tokensint总token数量
请求示例
import time
from zhipuai import ZhipuAI

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

response = client.chat.asyncCompletions.create(
    model="glm-zero-preview",  # 请填写您要调用的模型名称
    messages=[
        {"role": "system", "content": "Please think deeply before your response."},#GLM-Zero-Preview 启动深度思考,System Prompt需设置为:Please think deeply before your response.
        {"role": "user", "content": "一个袋子中有5个红球和3个蓝球,随机抽取2个球,抽到至少1个红球的概率为:"}
    ],
)
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
    
响应示例
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncTaskStatus(id='101002-9116561662663388866', request_id='-9116561662663388867', model=None, task_status='PROCESSING')
AsyncCompletion(id='101002-9116561662663388866', request_id='-9116561662663388867', model='GLM-Zero-Preview', task_status='SUCCESS', choices=[CompletionChoice(index=0, finish_reason='stop', message=CompletionMessage(content='###Thinking\n\n让我们来计算从一个装有5个红球和3个蓝球的袋子中随机抽取2个球,抽到至少1个红球的概率。\n\n首先,我们可以直接计算抽到至少1个红球的情况数,但这可能会有些复杂。所以,一个更简便的方法是先计算抽到没有红球的概率,也就是抽到全是蓝球的概率,然后用1减去这个概率。\n\n总共有8个球,从中随机抽取2个球的总情况数是组合数 \\( C(8, 2) \\):\n\n\\[\nC(8, 2) = \\frac{8!}{2!(8-2)!} = \\frac{8 \\times 7}{2 \\times 1} = 28\n\\]\n\n接下来,计算抽到全是蓝球的情况数。袋子里有3个蓝球,从中抽取2个蓝球的情况数是 \\( C(3, 2) \\):\n\n\\[\nC(3, 2) = \\frac{3!}{2!(3-2)!} = \\frac{3 \\times 2}{2 \\times 1} = 3\n\\]\n\n所以,抽到全是蓝球的概率是:\n\n\\[\nP(\\text{全是蓝球}) = \\frac{C(3, 2)}{C(8, 2)} = \\frac{3}{28}\n\\]\n\n因此,抽到至少1个红球的概率就是:\n\n\\[\nP(\\text{至少1个红球}) = 1 - P(\\text{全是蓝球}) = 1 - \\frac{3}{28} = \\frac{25}{28}\n\\]\n\n不过,为了确认这个结果,我们也可以直接计算抽到至少1个红球的情况数。\n\n抽到至少1个红球包括两种情况:抽到1个红球和1个蓝球,或者抽到2个红球。\n\n先计算抽到1个红球和1个蓝球的情况数。红球有5个,蓝球有3个,所以:\n\n\\[\n\\text{1红1蓝的情况数} = C(5, 1) \\times C(3, 1) = 5 \\times 3 = 15\n\\]\n\n再计算抽到2个红球的情况数:\n\n\\[\n\\text{2红的情况数} = C(5, 2) = \\frac{5!}{2!(5-2)!} = \\frac{5 \\times 4}{2 \\times 1} = 10\n\\]\n\n所以,抽到至少1个红球的总情况数是:\n\n\\[\n\\text{至少1个红球的情况数} = 15 + 10 = 25\n\\]\n\n这样,抽到至少1个红球的概率就是:\n\n\\[\nP(\\text{至少1个红球}) = \\frac{25}{28}\n\\]\n\n我们通过两种方法计算得到了相同的结果,这让我们更加确信答案的正确性。\n\n在解决这类概率问题时,直接计算所需事件的概率有时会比较复杂,而通过计算其对立事件的概率然后用1减去,通常会更简便。不过,直接计算虽然可能稍微麻烦一些,但也是个好方法,尤其是当直接计算看起来也不太复杂的时候。而且,通过两种方法得到相同的结果,可以相互验证,确保答案的准确性。\n\n因此,抽到至少1个红球的概率是 \\(\\boxed{\\dfrac{25}{28}}\\)。\n\n###Response\n\n**解题步骤**\n\n1. **确定总球数及各类球的数量**\n   - 红球数量:5个\n   - 蓝球数量:3个\n   - 总球数:5 + 3 = 8个\n\n2. **计算总共有多少种抽取2个球的方式**\n   \\[\n   C(8, 2) = \\frac{8!}{2!(8-2)!} = \\frac{8 \\times 7}{2 \\times 1} = 28\n   \\]\n\n3. **计算抽到全是蓝球的情况数**\n   \\[\n   C(3, 2) = \\frac{3!}{2!(3-2)!} = \\frac{3 \\times 2}{2 \\times 1} = 3\n   \\]\n\n4. **计算抽到全是蓝球的概率**\n   \\[\n   P(\\text{全是蓝球}) = \\frac{3}{28}\n   \\]\n\n5. **计算抽到至少1个红球的概率**\n   \\[\n   P(\\text{至少1个红球}) = 1 - P(\\text{全是蓝球}) = 1 - \\frac{3}{28} = \\frac{25}{28}\n   \\]\n\n**最终答案**\n\n\\[\n\\boxed{\\dfrac{25}{28}}\n\\]', role='assistant', tool_calls=None))], usage=CompletionUsage(prompt_tokens=41, completion_tokens=1020, total_tokens=1061), created=1735459527)

可以看到里面的Thinking的过程。

3. 参考材料

【1】智谱深度推理模型 GLM-Zero 预览版上线

【2】GLM-Zero-Preview


http://www.kler.cn/a/460508.html

相关文章:

  • linux 软链接 快捷方式 详解
  • NSGA-II(非支配排序遗传算法II)详解与实现
  • python制作打字小游戏
  • Docker--Docker Container(容器) 之 操作实例
  • 从企业级 RAG 到 AI Assistant,阿里云 Elasticsearch AI 搜索技术实践
  • stm32 智能语音电梯系统
  • SSM-Spring-IOC/DI对应的配置开发
  • 【Win】感觉“ctypes.WinDLL(“user32“)“跟“ctypes.windll.user32“看起来很像呀,它们之间有什么区别呢?
  • UL-SCH 处理函数
  • 关于今天发现的一个bug
  • 深入解析Android JNI:以Visualizer为例
  • Ragas自动化评测整体后端流程
  • 平凡的2024回顾
  • 【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等
  • 前端实现PDF预览的几种选择(pdfjs-dist、react-pdf、pdf-viewer)
  • 嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备
  • 形象地理解UE4中的数据结构 TLinkedListBase
  • [极客大挑战 2019]LoveSQL 1解题思路
  • Java多线程中,synchronized和ReentrantLock的区别是什么?及使用场景有哪些?
  • html+css网页设计 美食 美食美客模版2个页面
  • python 选择排序(Selection Sort)
  • 纯前端实现将pdf转为图片(插件pdfjs)
  • 优化大肠杆菌菌株和发酵工艺以提高L-赖氨酸生产-文献精读94
  • 如何修复 WordPress 中的“Error establishing a database connection”问题
  • DeepSeek-V3-Base 模型技术解析
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之10 方案再探:特定于领域的模板 之1 随想交流