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

相关推荐
致Great2 小时前
高级RAG技巧(二)
人工智能·自然语言处理·大模型·rag
AIzealot无11 小时前
论文解读之learning to summarize with human feedback
人工智能·深度学习·语言模型·大模型·强化学习·人类偏好
耿子6661 天前
大模型 LangChain 开发框架-初探
langchain·大模型·embedding
视觉&物联智能2 天前
【杂谈】-DeepSeek如何以560万美元突破成本障碍
人工智能·深度学习·机器学习·ai·大模型·llm·deepseek
Luke Ewin2 天前
解决安装pynini和WeTextProcessing报错问题
python·大模型·llm·语音识别·语音合成·tts·asr
山顶夕景2 天前
【LLM综述】29种大模型Prompt Engineering技术
大模型·llm·prompt
羊羊洒洒_Blog2 天前
【翻译】审慎对齐:推理使更安全的语言模型成为可能
人工智能·语言模型·自然语言处理·openai·推理·o1
Nicolas8933 天前
【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型
大模型·全参微调·大模型微调·glm4·llamafactory·chatglm9b
林泽毅3 天前
SwanLab x LLaMA Factory:国产开源AI训练工具组合拳(含教程)
人工智能·python·机器学习·开源·大模型·llama·swanlab