论文信息

  • 标题:ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools
  • 会议:arXiv预印本 (2024)
  • 单位:智谱AI、清华大学
  • 代码:https://github.com/THUDM
  • 论文:https://arxiv.org/pdf/2406.12793.pdf

引言:三年磨一剑,国产大模型的逆袭之路

还记得2023年3月那个引爆国内AI圈的日子吗?ChatGLM-6B横空出世,让普通消费者第一次在自己的显卡上跑起来了能用的大语言模型。谁能想到,仅仅一年多后,智谱AI就交出了GLM-4这份震撼业界的答卷。

从2021年提出GLM架构,到2022年开源GLM-130B,再到三代ChatGLM-6B的快速迭代,最后到2024年的GLM-4系列,智谱AI用三年时间走完了别人十年的路。如今的GLM-4不仅在通用能力上紧追GPT-4,在中文理解、长上下文处理、工具调用等方面甚至实现了反超。
在这里插入图片描述

图片1:ChatGLM家族发展时间线

分析:这张时间线清晰地展示了ChatGLM家族的爆发式增长。从2021年3月的GLM基础架构,到2024年6月的GLM-4-Air,平均每3个月就有一个重大版本更新。更难得的是,智谱AI始终坚持开源路线,从ChatGLM-6B到最新的GLM-4-9B-1M,累计下载量超过1000万次,极大地推动了国内大模型生态的发展。


一、ChatGLM核心技术解密:四大支柱打造全能大模型

GLM-4的成功不是偶然,而是建立在一系列扎实的技术创新之上。下面我们就来拆解一下支撑GLM-4的四大核心技术支柱。

1.1 预训练数据:10万亿token的"知识盛宴"

大模型的能力上限,本质上是由训练数据的质量和数量决定的。GLM-4在10万亿token的多语言语料上进行了预训练,其中主要是中文和英文,还包含了24种其他语言的少量语料。

数据处理三阶段

  1. 去重:同时使用精确去重和模糊去重,去除重复或相似的文档,提高数据多样性
  2. 过滤:过滤掉包含冒犯性语言、占位符文本、纯源代码等低质量文档
  3. 分词:使用字节级BPE算法,单独学习中文和多语言token,最终合并成一个包含150,000个token的统一词汇表

通俗解释:这就像给大模型准备食材。去重就是把重复的菜去掉,过滤就是把坏掉的菜扔掉,分词就是把食材切成合适的大小,这样大模型才能更好地消化吸收。

1.2 模型架构:每一个细节都经过千锤百炼

GLM-4在Transformer架构的基础上,进行了一系列精心的优化,每一个选择都经过了严格的实验验证。

GLM-4架构核心改进

  • 仅保留QKV偏置:除了注意力层的Query、Key、Value矩阵外,移除了所有其他偏置项。这不仅提高了训练速度,还略微改善了长度外推能力
  • RMSNorm替代LayerNorm:RMSNorm只计算方差不计算均值,比LayerNorm更快更稳定
  • SwiGLU激活函数:替代传统的ReLU,显著提升了模型的非线性表达能力
  • 二维RoPE位置编码:将旋转位置编码扩展到二维,更好地处理结构化数据
  • 分组查询注意力(GQA):替代多头注意力(MHA),将KV缓存大小减少了75%,大幅提升了推理速度

分组查询注意力公式
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk QKT)V

  • QQQ:查询矩阵,形状为(nq,dk)(n_q, d_k)(nq,dk)nqn_qnq是查询头数量
  • KKK:键矩阵,形状为(nk,dk)(n_k, d_k)(nk,dk)nkn_knk是键头数量,GQA中nk<nqn_k < n_qnk<nq
  • VVV:值矩阵,形状为(nk,dv)(n_k, d_v)(nk,dv)
  • dkd_kdk:每个头的维度
  • softmax(⋅)\text{softmax}(\cdot)softmax():softmax函数,用于计算注意力权重

通俗解释:GQA就像把原来每个老师(查询头)单独配一个助教(键值头),改成几个老师共享一个助教。这样助教的数量大大减少,需要的内存也少了,同时教学质量几乎不受影响。

上下文长度扩展
GLM-4的上下文长度从初代的2K,一路扩展到32K、128K,甚至实验性的1M(约200万汉字)。这不仅通过位置编码插值和长文本持续训练实现,还通过专门的长上下文对齐技术,确保模型在长上下文下的性能不下降。

1.3 对齐技术:让大模型听懂人话

预训练只是让大模型学会了知识,对齐技术才是让大模型学会和人类交流的关键。GLM-4采用了多阶段对齐流程:

  1. 监督微调(SFT):使用高质量的人工标注prompt-response对进行微调
  2. 人类反馈强化学习(RLHF):让人类标注者对模型的多个输出进行排序,训练奖励模型,然后用PPO算法优化模型

关键发现:真实的人类交互数据比模板生成或模型生成的数据对对齐质量的提升要大得多。RLHF还能有效解决回复拒绝、安全性、双语token混合、多轮对话连贯性等问题。

1.4 All Tools:让大模型成为"全能助手"

GLM-4最令人兴奋的能力莫过于它的All Tools功能。它不仅能理解用户意图,还能自主决定什么时候调用什么工具,甚至可以同时调用多个工具来完成复杂任务。
在这里插入图片描述

图片2:GLM-4 All Tools工作流程示例

分析:在这个例子中,用户要求"搜索2000到2023年的全球人口,然后计算年均增长率"。GLM-4自动完成了以下步骤:

  1. 分析任务,发现需要先搜索信息再进行计算
  2. 调用浏览器工具,搜索全球人口数据
  3. 调用Python解释器,使用CAGR公式计算年均增长率
  4. 整合结果,用自然语言回答用户
    在这里插入图片描述
图片3:GLM-4 All Tools整体架构

All Tools支持的工具类型

  • 网页浏览器:可以搜索最新信息、浏览网页、总结内容
  • Python解释器:可以执行代码、解决数学问题、进行数据分析
  • 文生图模型:可以调用CogView3生成高质量图片
  • 用户自定义函数:可以调用用户提供的API和外部知识库

二、GLM-4能力全面评估:和GPT-4掰手腕

为了全面评估GLM-4的能力,研究人员在学术基准、指令遵循、中文对齐、长上下文、代码、函数调用、Agent等多个维度进行了测试,结果令人惊艳。

2.1 开源模型的进化:从ChatGLM-6B到GLM-4-9B

首先让我们看看三代ChatGLM-6B和最新的GLM-4-9B的性能对比,感受一下大模型的进化速度。

表格1:开源ChatGLM系列模型性能对比

语言 数据集 ChatGLM-6B (2023-03-14) ChatGLM2-6B (2023-06-25) ChatGLM3-6B-Base (2023-10-27) GLM-4-9B (2024-06-05)
英文 GSM8K 1.5 25.9 72.3 84.0
MATH 3.1 6.9 25.7 30.4
BBH 0.0 29.2 66.1 76.3
MMLU 25.2 45.2 61.4 74.7
HumanEval 0.0 9.8 58.5 70.1
中文 C-Eval 23.7 51.7 69.0 77.1
CMMLU 25.3 50.0 67.5 75.1
GAOKAO-Bench 26.8 46.4 67.3 74.5
出处:论文表1

分析:这组数据简直是大模型进化的完美写照!

  • GSM8K(小学数学)从1.5%暴涨到84.0%,提升了55倍!
  • MMLU(综合知识)从25.2%提升到74.7%,已经超过了很多7B甚至13B的开源模型
  • 仅仅一年多时间,9B模型的能力就已经超过了初代130B模型,这在以前是不可想象的

2.2 通用能力:紧追GPT-4,超越Claude 3

在最能体现模型综合能力的学术基准上,GLM-4已经达到了世界一流水平。

表格2:GLM-4在主流学术基准上的性能

模型 MMLU GSM8K MATH BBH GPQA HumanEval
GPT-4 (0314) 86.4 92.0 52.9 83.1 35.7 67.0
GPT-4 Turbo (2024-04-09) 86.7 95.6 73.4 88.2 49.3 88.2
Claude 3 Opus 86.8 95.0 60.1 86.8 50.4 84.9
Gemini 1.5 Pro 85.9 90.8 67.7 89.2 46.2 84.1
GLM-4 (0520) 83.3 93.3 61.3 84.7 39.9 78.5
出处:论文表2

分析

  • GLM-4在MMLU上达到了83.3%,达到了GPT-4(0314)的96.3%
  • 在GSM8K上达到了93.3%,超过了GPT-4(0314)的92.0%
  • 整体来看,GLM-4的通用能力已经非常接近GPT-4和Claude 3 Opus,处于世界第一梯队

2.3 指令遵循:中英文双优

指令遵循能力是衡量大模型实用性的关键指标。GLM-4在中英文指令遵循上都表现出色。

表格3:GLM-4在IFEval上的指令遵循能力

模型 英文 中文
L-P S-P L-I S-I L-P S-P L-I S-I
GPT-4 Turbo (2024-04-09) 84.5 81.2 88.7 85.9 79.3 72.6 84.2 79.1
Claude 3 Opus 90.6 85.5 93.7 90.0 78.3 73.3 84.3 80.4
GLM-4 (0520) 83.7 79.1 88.7 85.0 79.7 71.9 84.2 78.0
注:L=宽松模式,S=严格模式,P=prompt级别,I=instruction级别
出处:论文表3

分析

  • 在宽松模式下,GLM-4的中英文指令级准确率都和GPT-4 Turbo完全相同
  • 在严格模式下,GLM-4达到了GPT-4 Turbo的99.0%(英文)和98.6%(中文)
  • 这意味着GLM-4几乎能完美理解用户的各种指令,无论是简单的"写一首诗"还是复杂的"写一个Python脚本"

2.4 中文对齐:碾压级优势

作为国产大模型,GLM-4在中文理解和对齐上有着天然的优势。

表格4:GLM-4在AlignBench上的中文对齐性能

模型 数学 逻辑 语言 中文 QA 写作 角色扮演 专业 整体
GPT-4 Turbo (2024-04-09) 8.32 7.67 7.60 7.57 8.37 7.75 8.18 8.59 8.00
Claude 3 Opus 7.27 7.11 7.94 7.71 8.21 7.61 7.73 8.02 7.53
Gemini 1.5 Pro 7.07 7.77 7.31 7.22 8.55 7.83 7.79 8.52 7.47
GLM-4 (0520) 7.89 7.95 8.00 7.86 8.11 8.04 8.06 8.47 8.00
出处:论文表4

分析

  • GLM-4的整体得分和GPT-4 Turbo并列第一
  • 中文逻辑推理语言理解两个维度上,GLM-4显著超过了所有其他模型
  • 这说明GLM-4对中文的理解深度已经超过了GPT-4和Claude 3,是目前中文能力最强的大模型之一

2.5 长上下文:128K无压力,1M不是梦

长上下文能力是大模型处理文档、书籍、代码等长文本的关键。GLM-4在这方面表现出色。

表格5:GLM-4在LongBench-Chat上的长上下文性能

模型 英文 中文
GPT-4 Turbo (2024-04-09) 85.0 82.1
Claude 3 Opus 87.7 82.7
GLM-4 (0520) 87.3 84.0
出处:论文表5

分析

  • 在英文长上下文上,GLM-4(87.3)几乎和Claude 3 Opus(87.7)持平
  • 在中文长上下文上,GLM-4(84.0)超过了GPT-4 Turbo(82.1)和Claude 3 Opus(82.7)
  • 此外,智谱AI还开源了实验性的GLM-4-9B-Chat-1M模型,支持100万token的上下文长度,相当于一本《红楼梦》的长度

2.6 函数调用:和GPT-4旗鼓相当

函数调用能力是大模型连接外部世界的桥梁。GLM-4在这方面的表现令人惊喜。

表格6:GLM-4在Berkeley函数调用排行榜上的性能

模型 AST Summary Exec Summary Relevance Overall
Llama-3-8B-Instruct 59.25 70.01 45.83 58.88
GPT-4 Turbo (2024-04-09) 82.14 78.61 88.75 81.24
GLM-4-9B-Chat 80.26 84.40 87.92 81.00
GLM-4 (0520) 82.59 87.78 84.17 81.76
出处:论文表7

分析

  • GLM-4的整体得分(81.76)超过了GPT-4 Turbo(81.24)
  • 更令人惊讶的是,只有9B参数的GLM-4-9B-Chat得分(81.00)几乎和GPT-4 Turbo一样,大幅超过了Llama-3-8B-Instruct(58.88)
  • 这说明GLM-4的函数调用能力已经达到了世界顶级水平

2.7 Agent能力:超越GPT-4 Turbo

Agent能力是大模型未来的发展方向,GLM-4在这方面已经走在了世界前列。

表格7:GLM-4在AgentBench上的Agent性能

模型 操作系统 数据库 知识图谱 横向思维 家务 网购 网页浏览 整体
GPT-4 Turbo (2024-04-09) 41.0 46.7 53.2 19.4 72.0 55.1 19.0 3.68
Claude 3 Opus 23.6 55.0 53.4 20.0 70.0 48.5 28.0 3.62
GLM-4 (0520) 36.8 52.7 51.4 15.3 82.0 68.3 29.0 3.79
出处:论文表8

分析

  • GLM-4的整体得分(3.79)超过了GPT-4 Turbo(3.68)和Claude 3 Opus(3.62)
  • 家务网购两个场景上,GLM-4表现尤为出色,得分远高于其他模型
  • 数据库网页浏览场景上,GLM-4也和GPT-4 Turbo相当

2.8 All Tools能力:浏览器检索反超GPT-4

最后,我们来看看GLM-4 All Tools的实际表现。

表格8:GLM-4 All Tools性能

GLM-4 All Tools (Web, 0116) GPT-4 (Web, 0110)
Python解释器 GSM8K 91.59 92.72
MATH 63.60 65.00
Math23K 88.50 88.40
浏览器 信息检索 78.08 67.12
出处:论文表9

分析

  • 在Python解释器解决数学问题上,GLM-4和GPT-4几乎持平
  • 浏览器信息检索上,GLM-4(78.08)大幅超过了GPT-4(67.12)
  • 这说明GLM-4在获取和处理实时信息方面比GPT-4更出色

三、核心代码实现

下面是GLM-4的核心调用代码,包括基础对话、函数调用和All Tools使用。

3.1 基础对话调用

from zhipuai import ZhipuAI

# 初始化客户端
client = ZhipuAI(api_key="你的API_KEY")

def chat_glm4(prompt, temperature=0.7, max_tokens=2048):
    """调用GLM-4进行基础对话"""
    response = client.chat.completions.create(
        model="glm-4",
        messages=[{"role": "user", "content": prompt}],
        temperature=temperature,
        max_tokens=max_tokens,
        top_p=0.9
    )
    return response.choices[0].message.content.strip()

# 使用示例
if __name__ == "__main__":
    # 1. 普通问答
    print("=== 普通问答 ===")
    response = chat_glm4("解释一下什么是大语言模型")
    print(response)
    
    # 2. 代码生成
    print("\n=== 代码生成 ===")
    response = chat_glm4("写一个Python函数,计算斐波那契数列的第n项")
    print(response)

3.2 函数调用

import json
from zhipuai import ZhipuAI

client = ZhipuAI(api_key="你的API_KEY")

# 定义工具函数
def get_weather(city: str) -> str:
    """获取指定城市的天气"""
    # 这里模拟天气API调用
    weather_data = {
        "北京": "晴,25-32℃",
        "上海": "多云,23-29℃",
        "广州": "雷阵雨,26-33℃"
    }
    return weather_data.get(city, f"未找到{city}的天气信息")

# 工具描述
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,如北京、上海"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

def chat_with_tools(prompt):
    """带工具调用的对话"""
    messages = [{"role": "user", "content": prompt}]
    
    # 第一步:让模型决定是否调用工具
    response = client.chat.completions.create(
        model="glm-4",
        messages=messages,
        tools=tools,
        tool_choice="auto"
    )
    
    message = response.choices[0].message
    messages.append(message)
    
    # 如果模型决定调用工具
    if message.tool_calls:
        for tool_call in message.tool_calls:
            function_name = tool_call.function.name
            function_args = json.loads(tool_call.function.arguments)
            
            # 调用工具函数
            function_response = globals()[function_name](**function_args)
            
            # 添加工具返回结果
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "name": function_name,
                "content": function_response
            })
        
        # 第二步:让模型根据工具返回结果生成最终回答
        second_response = client.chat.completions.create(
            model="glm-4",
            messages=messages
        )
        return second_response.choices[0].message.content.strip()
    
    # 如果不需要调用工具,直接返回回答
    return message.content.strip()

# 使用示例
if __name__ == "__main__":
    response = chat_with_tools("今天北京的天气怎么样?")
    print(response)
    # 输出:今天北京的天气是晴,气温在25到32摄氏度之间,适合外出活动。

3.3 All Tools调用

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="你的API_KEY")

def chat_all_tools(prompt):
    """调用GLM-4 All Tools"""
    response = client.chat.completions.create(
        model="glm-4-alltools",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7,
        max_tokens=4096,
        tools=[
            {"type": "web_browser"},
            {"type": "code_interpreter"},
            {"type": "cogview"}
        ]
    )
    return response.choices[0].message.content.strip()

# 使用示例
if __name__ == "__main__":
    # 1. 搜索信息+计算
    response = chat_all_tools("搜索2024年上半年中国GDP数据,然后计算同比增长率")
    print(response)
    
    # 2. 生成图片
    response = chat_all_tools("生成一张赛博朋克风格的猫咪图片")
    print(response)

四、GLM-4的神奇能力展示

GLM-4的能力远不止于纸上谈兵,下面我们来看几个真实的使用案例。

案例1:全能数据分析助手

用户:“帮我分析一下2024年上半年全球智能手机市场份额数据,然后生成一个饼图”

GLM-4 All Tools自动完成:

  1. 调用浏览器搜索2024年上半年全球智能手机市场份额数据
  2. 调用Python解释器,使用matplotlib生成饼图
  3. 对数据进行分析,给出结论

输出:
"根据IDC发布的2024年上半年全球智能手机市场份额数据:

  • 三星:20.8%
  • 苹果:17.3%
  • 小米:14.1%
  • OPPO:9.8%
  • vivo:8.7%
  • 其他:29.3%

分析:三星继续保持全球第一的位置,苹果紧随其后。小米、OPPO和vivo占据了第三到第五位,中国品牌合计占比超过30%。"

案例2:智能编程助手

用户:“写一个Python脚本,爬取豆瓣电影Top250的电影名称、评分和简介,保存到CSV文件”

GLM-4输出:

import requests
from bs4 import BeautifulSoup
import csv
import time

def crawl_douban_top250():
    """爬取豆瓣电影Top250"""
    base_url = "https://movie.douban.com/top250"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
    
    movies = []
    
    for start in range(0, 250, 25):
        url = f"{base_url}?start={start}"
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, "html.parser")
        
        items = soup.find_all("div", class_="item")
        for item in items:
            title = item.find("span", class_="title").text
            rating = item.find("span", class_="rating_num").text
            quote = item.find("span", class_="inq").text if item.find("span", class_="inq") else ""
            
            movies.append({
                "title": title,
                "rating": rating,
                "quote": quote
            })
        
        time.sleep(1)  # 避免请求过快
    
    # 保存到CSV文件
    with open("douban_top250.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=["title", "rating", "quote"])
        writer.writeheader()
        writer.writerows(movies)
    
    print("爬取完成,已保存到douban_top250.csv")

if __name__ == "__main__":
    crawl_douban_top250()

案例3:多工具协同工作

用户:“帮我写一篇关于人工智能发展趋势的文章,要求包含最新的数据和图表”

GLM-4 All Tools自动完成:

  1. 调用浏览器搜索2024年人工智能发展的最新趋势和数据
  2. 调用Python解释器生成相关的图表,如市场规模增长图
  3. 整合信息和图表,生成一篇结构完整、数据详实的文章

五、安全与风险:负责任的AI

智谱AI非常重视模型的安全性,采取了一系列措施来确保GLM-4安全、负责任地运行。

风险缓解措施

  1. 预训练数据清洗:移除包含敏感关键词的文本和黑名单网页
  2. 对齐阶段安全过滤:评估每个训练样本的安全性,移除有风险的样本
  3. 红队测试:组建专门的红队,不断用刁钻的问题挑战模型,收集有害的问答对进行优化
  4. RLHF安全对齐:将无害性作为偏好对齐的重要标准

表格9:GLM-4在SafetyBench上的安全性能

模型 伦理道德 非法活动 心理健康 冒犯性 身体健康 隐私财产 不公平偏见 整体
GPT-4 (0613) 92.7 93.3 93.0 87.7 96.7 91.3 73.3 89.7
GPT-4 Turbo (2024-04-09) 90.3 91.3 91.7 85.3 92.0 89.3 75.0 87.9
Claude 3 Opus 92.7 91.7 92.7 86.3 94.7 88.7 66.0 87.5
GLM-4 (0520) 92.3 91.3 93.3 86.3 92.3 88.6 66.0 87.2
出处:论文表10

分析

  • GLM-4的整体安全性能和Claude 3 Opus相当
  • 心理健康维度上,GLM-4(93.3)甚至超过了GPT-4(93.0)
  • 目前的主要差距在身体健康维度,这也是未来需要重点改进的方向

六、结论与未来工作

GLM-4系列是ChatGLM发展史上的一个里程碑。它不仅在通用能力上紧追GPT-4等世界顶级模型,在中文理解、长上下文处理、工具调用、Agent能力等方面还实现了反超。更重要的是,智谱AI始终坚持开源路线,将GLM-4-9B等模型免费开放给社区,极大地推动了国内大模型生态的发展。

回顾ChatGLM的发展历程,我们可以看到一条清晰的进化路径:从基础架构创新,到大规模预训练,再到精细对齐,最后到工具调用和Agent能力。每一步都走得扎实而坚定。

未来,智谱AI将在以下几个方向继续努力:

  1. 更大规模的模型:继续扩大模型规模,提升模型的基础能力
  2. 多模态融合:整合视觉、语音等更多模态,打造真正的通用人工智能
  3. 更强的Agent能力:让模型能够自主完成更复杂的任务
  4. 更安全的AI:进一步提升模型的安全性和可控性

GLM-4的成功证明了中国在大模型领域已经具备了和世界顶尖水平竞争的能力。相信在不久的将来,我们会看到更多来自中国的世界级大模型。


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐