【大模型实战篇】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
请求URL https://open.bigmodel.cn/api/paas/v4/chat/completions
调用方式 同步调用,等待模型完成执行并返回最终结果或使用SSE调用
字符编码 UTF-8
请求格式 JSON
响应格式 JSON或标准Stream Event
请求类型 POST
开发语言 任何能够发起HTTP请求的开发语言

2.2 请求参数

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

2.3 Message 格式

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

2.4 响应参数

参数名称 类型 参数描述
id String 任务ID
created Long 请求创建时间,为Unix时间戳,单位为秒
model String 模型名称
choices List 当前对话的模型输出内容
index Integer 结果索引
finish_reason String 模型推理终止的原因。可以是'stop'、'tool_calls'、'length'、'sensitive'或'network_error'。
message Object 模型返回的文本消息
role String 当前对话角色,默认为'assistant'(模型)
content String 当前对话内容。命中函数时为null,否则返回模型推理结果。GLM-Zero-Preview 返回内容由以下两部分构成:###Thinking模型的详细思考过程。###Response模型的最终回答或输出。
usage Object 模型调用结束时返回的token使用统计。
prompt_tokens Integer 用户输入的token数量
completion_tokens Integer 模型输出的token数量
total_tokens Integer 总token数量

2.5 请求示例

python 复制代码
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
请求URL https://open.bigmodel.cn/api/paas/v4/async/chat/completions
调用方式 异步,结果必须通过查询接口获取
字符编码 UTF-8
请求格式 JSON
响应格式 JSON
HTTP方法 POST
开发语言 任何能够发起HTTP请求的开发语言

2.6.2 调用示例

python 复制代码
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
请求URL https://open.bigmodel.cn/api/paas/v4/async-result/{id}
调用方式 同步调用,等待模型完全执行并返回最终结果
字符编码 UTF-8
请求格式 JSON
响应格式 JSON
HTTP方法 GET
开发语言 同步调用,等待模型完全执行并返回最终结果
请求参数
参数名称 类型 必填 描述
id String 是 任务id
响应参数
参数名称 类型 描述
model String 模型名称
choices List 当前对话模型输出内容,目前仅返回一个
index Integer 结果索引
finish_reason String 模型推理终止的原因。"stop"表示自然结束或触发stop词,"length"表示达到token长度限制。
message Object 模型返回的文本消息
role String 当前对话角色,目前默认为assistant(模型)
content String 当前对话内容
task_status String 处理状态:PROCESSING(处理中),SUCCESS(成功),FAIL(失败)
request_id String 客户端请求时提交的任务号或平台生成的任务号
id String 智谱AI开放平台生成的任务序号,调用请求结果接口时使用此序号
usage Object 本次模型调用的token统计
prompt_tokens int 用户输入的token数量
completion_tokens int 模型输出的token数量
total_tokens int 总token数量
请求示例
python 复制代码
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
    
响应示例
python 复制代码
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

相关推荐
浅安的邂逅5 小时前
20929-OpenAI 一天踩三脚急刹:暂停前沿训练、叫停 Astra、披露越权访问澳政府网站
人工智能·大模型·ai编程·行业动态·ai日报
问天_观心9 小时前
大模型训练与推理优化(二)
人工智能·深度学习·学习·大模型·transformer
小范的技术工坊12 小时前
大模型蒸馏
人工智能·算法·数据挖掘·大模型
程序猿编码14 小时前
不用 PyTorch!纯 C 实现 N 维张量 + 反向传播,完成手写数字识别训练
c语言·人工智能·pytorch·神经网络·卷积神经网络·大模型推理
liferecords16 小时前
笔记本硬跑 744B 大模型:GitHub 上的『蜂鸟』把 SSD 当显存用
人工智能·开源·大模型·推理优化
爱喝雪碧的可乐17 小时前
CSDN|爆火哑巴AI Jev模型深度实战|技术博客
人工智能·大模型·jev
梦想不只是梦与想21 小时前
LangGraph控制流:条件边、循环与并行(二)
langchain·大模型·边
User_芊芊君子21 小时前
一张手写菜单,我用 Seed-2.1-pro-0915 开了一家数字咖啡馆
ai·大模型·aigc
段一凡-华北理工大学1 天前
大模型应用开发 100 天:Python + LLM 从入门到精通 day26~Prompt 调试与优化——A/B 测试与效果评估
windows·python·大模型·prompt·智能体·提示词工程·高炉智能化
白萝卜弟弟1 天前
【大模型Qwen3.8 27B】llama.cpp 本地大模型部署与使用
ai·大模型·agent·llama·qwen3.8