【大模型实战篇】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

相关推荐
程序猿编码2 小时前
不用 PyTorch!从零手写 C++ 深度学习框架,自动微分、CUDA、分布式一把搞定
c++·深度学习·大模型推理·自动微分
Web3&Basketball2 小时前
MiniMax M3.1 Flash实战:3个成本坑
python·大模型·成本优化·minimax·推理优化·token计费
Maynor99614 小时前
WorkBuddy 一键接通 gpt-6.1-sol:MomoAI / TryAllAPI 把最新模型接到桌面
人工智能·gpt·ai·大模型·编程工具
香吧香17 小时前
内网部署 Qwen2.5-7B 实操:日志、性能与模型选型的一次完整梳理
大模型
会思想的苇草i21 小时前
OpenClaw 添加技能(Skills) & 常用命令
ai·大模型·skills·openclaw
虎鲸不是鱼1 天前
【虎鲸进化论 41】AI 的盲区清单:责任、利害、定义、关系、最后一公里与主体性
人工智能·自动化·大模型·llm·自进化agent
QN1幻化引擎1 天前
信号场注意力(SFA):把 KV Cache 变成 O(1) 的双通道注意力——0.1B/0.3B 受控 A/B 精度反升 15.5% / 24.3%
pytorch·深度学习·大模型·transformer·注意力机制·推理优化
李福春1 天前
技术思考问题35:DeepSeek开搜索,RAG白建了?
大模型·腾讯云架构师同盟·深圳同盟
小肝一下1 天前
1.大模型介绍
python·langchain·大模型·ollama·langgrap
德林恩宝1 天前
搜索 Agent 的两条路——训练一个,还是工程搭一个
人工智能·大模型·llm·agent