Skip to content

第13天:国内大模型详解

学习目标

  • 了解国内主流大模型
  • 掌握文心一言、通义千问、混元、豆包、GLM、Kimi、DeepSeek、Yi的特点
  • 对比国内大模型的差异
  • 能够调用国内大模型API

课程内容

1. 文心一言(百度)

1.1 模型概述

基本信息

  • 开发者:百度
  • 发布时间:2023年3月
  • 架构:ERNIE(Enhanced Representation through Knowledge Integration)
  • 参数量:未公开(估计千亿级)

核心特点

  • 知识增强预训练
  • 多模态能力
  • 中文优化
  • 企业级应用

1.2 架构特点

ERNIE架构

python
class ERNIEEncoderLayer(nn.Module):
    def __init__(self, d_model, nhead, d_ff, dropout=0.1):
        super().__init__()
        
        # 知识增强注意力
        self.knowledge_attn = KnowledgeEnhancedAttention(d_model, nhead)
        
        # 自注意力
        self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        
        # 前馈网络
        self.ffn = nn.Sequential(
            nn.Linear(d_model, d_ff),
            nn.ReLU(),
            nn.Dropout(dropout),
            nn.Linear(d_ff, d_model)
        )
        
        # 层归一化
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.norm3 = nn.LayerNorm(d_model)
        
        # Dropout
        self.dropout1 = nn.Dropout(dropout)
        self.dropout2 = nn.Dropout(dropout)
        self.dropout3 = nn.Dropout(dropout)
    
    def forward(self, x, knowledge_mask=None, attention_mask=None):
        """
        Args:
            x: 输入 [batch_size, seq_len, d_model]
            knowledge_mask: 知识掩码
            attention_mask: 注意力掩码
        
        Returns:
            output: 输出 [batch_size, seq_len, d_model]
        """
        # 知识增强注意力
        knowledge_output = self.knowledge_attn(x, knowledge_mask)
        x = x + self.dropout1(knowledge_output)
        x = self.norm1(x)
        
        # 自注意力
        attn_output, _ = self.self_attn(x, x, x, key_padding_mask=attention_mask)
        x = x + self.dropout2(attn_output)
        x = self.norm2(x)
        
        # 前馈网络
        ffn_output = self.ffn(x)
        x = x + self.dropout3(ffn_output)
        x = self.norm3(x)
        
        return x

class KnowledgeEnhancedAttention(nn.Module):
    def __init__(self, d_model, nhead):
        super().__init__()
        self.d_model = d_model
        self.nhead = nhead
        
        # 知识查询
        self.knowledge_query = nn.Linear(d_model, d_model)
        
        # 知识键
        self.knowledge_key = nn.Linear(d_model, d_model)
        
        # 知识值
        self.knowledge_value = nn.Linear(d_model, d_model)
    
    def forward(self, x, mask=None):
        """
        Args:
            x: 输入 [batch_size, seq_len, d_model]
            mask: 知识掩码
        
        Returns:
            output: 知识增强输出 [batch_size, seq_len, d_model]
        """
        batch_size, seq_len, _ = x.shape
        
        # 计算知识Q、K、V
        Q = self.knowledge_query(x)
        K = self.knowledge_key(x)
        V = self.knowledge_value(x)
        
        # 计算注意力分数
        scores = torch.matmul(Q, K.transpose(-2, -1))
        scores = scores / torch.sqrt(torch.tensor(self.d_model, dtype=torch.float32))
        
        # 应用掩码
        if mask is not None:
            scores = scores.masked_fill(mask == 0, -1e9)
        
        # 计算注意力权重
        weights = F.softmax(scores, dim=-1)
        
        # 计算输出
        output = torch.matmul(weights, V)
        
        return output

1.3 API调用

安装SDK

bash
pip install qianfan

调用示例

python
import qianfan

# 初始化客户端
client = qianfan.ChatCompletion(
    ak="your-access-key",
    sk="your-secret-key"
)

# 调用模型
response = client.do(
    model="ERNIE-Bot-4",
    messages=[
        {"role": "user", "content": "请介绍一下文心一言"}
    ],
    temperature=0.7,
    top_p=0.9,
    max_output_tokens=1000
)

# 获取结果
print(response["result"])

流式输出

python
# 流式调用
response = client.do(
    model="ERNIE-Bot-4",
    messages=[
        {"role": "user", "content": "请写一首关于春天的诗"}
    ],
    stream=True
)

for chunk in response:
    print(chunk["result"], end="", flush=True)

1.4 应用场景

适合场景

  • 知识问答
  • 文本生成
  • 代码生成
  • 多模态理解
  • 企业应用

不适合场景

  • 实时对话(延迟较高)
  • 长文本处理(上下文限制)

2. 通义千问(阿里)

2.1 模型概述

基本信息

  • 开发者:阿里云
  • 发布时间:2023年4月
  • 架构:Transformer Decoder
  • 参数量:72B(Qwen-72B)

核心特点

  • 多尺寸模型系列
  • 强大的中文能力
  • 开源友好
  • 多模态支持

2.2 模型系列

Qwen系列

  • Qwen-0.5B:超轻量级
  • Qwen-1.8B:轻量级
  • Qwen-7B:小型
  • Qwen-14B:中型
  • Qwen-72B:大型
  • Qwen-110B:超大型

Qwen-VL:多模态版本

2.3 API调用

安装SDK

bash
pip install dashscope

调用示例

python
from dashscope import Generation

# 配置API Key
import dashscope
dashscope.api_key = "your-api-key"

# 调用模型
response = Generation.call(
    model="qwen-max",
    prompt="请介绍一下通义千问",
    max_tokens=1000,
    temperature=0.7,
    top_p=0.9
)

# 获取结果
print(response.output.text)

流式输出

python
# 流式调用
response = Generation.call(
    model="qwen-max",
    prompt="请写一个Python函数计算斐波那契数列",
    stream=True,
    result_format='message'
)

for chunk in response:
    if chunk.output.choices:
        print(chunk.output.choices[0].message.content, end="", flush=True)

2.4 本地部署

使用Hugging Face

python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# 加载模型
model_name = "Qwen/Qwen-7B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    trust_remote_code=True
).eval()

# 生成文本
prompt = "请介绍一下通义千问"
inputs = tokenizer(prompt, return_tensors="pt")
inputs = inputs.to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=500,
        temperature=0.7,
        top_p=0.9
    )

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

2.5 应用场景

适合场景

  • 代码生成
  • 文本生成
  • 知识问答
  • 多语言处理
  • 本地部署

3. 混元(腾讯)

3.1 模型概述

基本信息

  • 开发者:腾讯
  • 发布时间:2023年9月
  • 架构:Transformer
  • 参数量:未公开

核心特点

  • 多模态能力
  • 腾讯生态集成
  • 企业级服务
  • 中文优化

3.2 API调用

调用示例

python
import requests
import json

# 配置
url = "https://hunyuan.tencentcloudapi.com/"
secret_id = "your-secret-id"
secret_key = "your-secret-key"

# 请求
payload = {
    "Model": "hunyuan-lite",
    "Messages": [
        {
            "Role": "user",
            "Content": "请介绍一下混元大模型"
        }
    ],
    "Stream": False
}

# 发送请求
response = requests.post(
    url,
    headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {secret_id}.{secret_key}"
    },
    data=json.dumps(payload)
)

# 获取结果
result = response.json()
print(result["Response"]["Reply"])

3.3 应用场景

适合场景

  • 腾讯生态应用
  • 多模态处理
  • 企业服务
  • 内容生成

4. 豆包(字节跳动)

4.1 模型概述

基本信息

  • 开发者:字节跳动
  • 发布时间:2023年
  • 架构:Transformer
  • 参数量:未公开

核心特点

  • 对话能力强
  • 推荐算法结合
  • 多模态支持
  • 移动端优化

4.2 API调用

调用示例

python
import requests
import json

# 配置
url = "https://ark.cn-beijing.volces.com/api/v3/chat/completions"
api_key = "your-api-key"

# 请求
payload = {
    "model": "ep-2024xxxx",
    "messages": [
        {
            "role": "user",
            "content": "请介绍一下豆包大模型"
        }
    ],
    "temperature": 0.7,
    "max_tokens": 1000
}

# 发送请求
response = requests.post(
    url,
    headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    },
    data=json.dumps(payload)
)

# 获取结果
result = response.json()
print(result["choices"][0]["message"]["content"])

4.3 应用场景

适合场景

  • 对话系统
  • 内容推荐
  • 短视频生成
  • 移动应用

5. GLM(智谱AI)

5.1 模型概述

基本信息

  • 开发者:智谱AI(清华大学)
  • 发布时间:2023年
  • 架构:GLM(General Language Model)
  • 参数量:130B(GLM-130B)

核心特点

  • 自研架构
  • 开源友好
  • 多模态支持
  • 强大的中文能力

5.2 GLM架构

GLM架构特点

python
class GLMDecoderLayer(nn.Module):
    def __init__(self, d_model, nhead, d_ff, dropout=0.1):
        super().__init__()
        
        # 双向注意力(编码器)
        self.bilateral_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        
        # 自回归注意力(解码器)
        self.autoregressive_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        
        # 前馈网络
        self.ffn = nn.Sequential(
            nn.Linear(d_model, d_ff),
            nn.GELU(),
            nn.Dropout(dropout),
            nn.Linear(d_ff, d_model)
        )
        
        # 层归一化
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.norm3 = nn.LayerNorm(d_model)
        
        # Dropout
        self.dropout1 = nn.Dropout(dropout)
        self.dropout2 = nn.Dropout(dropout)
        self.dropout3 = nn.Dropout(dropout)
    
    def forward(self, x, mask=None):
        """
        Args:
            x: 输入 [batch_size, seq_len, d_model]
            mask: 注意力掩码
        
        Returns:
            output: 输出 [batch_size, seq_len, d_model]
        """
        # 双向注意力
        bilateral_output, _ = self.bilateral_attn(x, x, x, key_padding_mask=mask)
        x = x + self.dropout1(bilateral_output)
        x = self.norm1(x)
        
        # 自回归注意力
        causal_mask = torch.triu(torch.ones(x.size(1), x.size(1)), diagonal=1)
        causal_mask = causal_mask.masked_fill(causal_mask == 1, float('-inf'))
        autoregressive_output, _ = self.autoregressive_attn(x, x, x, attn_mask=causal_mask)
        x = x + self.dropout2(autoregressive_output)
        x = self.norm2(x)
        
        # 前馈网络
        ffn_output = self.ffn(x)
        x = x + self.dropout3(ffn_output)
        x = self.norm3(x)
        
        return x

5.3 API调用

安装SDK

bash
pip install zhipuai

调用示例

python
from zhipuai import ZhipuAI

# 初始化客户端
client = ZhipuAI(api_key="your-api-key")

# 调用模型
response = client.chat.completions.create(
    model="glm-4",
    messages=[
        {"role": "user", "content": "请介绍一下GLM大模型"}
    ],
    temperature=0.7,
    max_tokens=1000
)

# 获取结果
print(response.choices[0].message.content)

流式输出

python
# 流式调用
response = client.chat.completions.create(
    model="glm-4",
    messages=[
        {"role": "user", "content": "请写一个Python冒泡排序"}
    ],
    stream=True
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

5.4 本地部署

使用Hugging Face

python
from transformers import AutoTokenizer, AutoModel
import torch

# 加载模型
model_name = "THUDM/chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(
    model_name,
    trust_remote_code=True
).half().cuda()
model = model.eval()

# 生成文本
response, history = model.chat(tokenizer, "请介绍一下GLM大模型", history=[])
print(response)

5.5 应用场景

适合场景

  • 代码生成
  • 知识问答
  • 文本生成
  • 多模态处理
  • 本地部署

6. Kimi(月之暗面)

6.1 模型概述

基本信息

  • 开发者:月之暗面
  • 发布时间:2023年
  • 架构:Transformer
  • 参数量:未公开

核心特点

  • 超长上下文(200万token)
  • 强大的记忆能力
  • 多模态支持
  • 文件处理能力强

6.2 API调用

调用示例

python
import requests
import json

# 配置
url = "https://api.moonshot.cn/v1/chat/completions"
api_key = "your-api-key"

# 请求
payload = {
    "model": "moonshot-v1-128k",
    "messages": [
        {
            "role": "user",
            "content": "请介绍一下Kimi大模型"
        }
    ],
    "temperature": 0.7,
    "max_tokens": 1000
}

# 发送请求
response = requests.post(
    url,
    headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    },
    data=json.dumps(payload)
)

# 获取结果
result = response.json()
print(result["choices"][0]["message"]["content"])

6.3 文件上传

上传文件

python
# 上传文件
files = {
    "file": ("document.pdf", open("document.pdf", "rb"), "application/pdf")
}

response = requests.post(
    "https://api.moonshot.cn/v1/files",
    headers={
        "Authorization": f"Bearer {api_key}"
    },
    files=files
)

file_id = response.json()["id"]

# 使用文件
payload = {
    "model": "moonshot-v1-128k",
    "messages": [
        {
            "role": "system",
            "content": "你是一个文档分析助手"
        },
        {
            "role": "user",
            "content": f"请分析这个文件:file://{file_id}"
        }
    ]
}

response = requests.post(
    url,
    headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    },
    data=json.dumps(payload)
)

print(response.json()["choices"][0]["message"]["content"])

6.4 应用场景

适合场景

  • 长文档处理
  • 知识库问答
  • 文件分析
  • 多轮对话
  • 复杂推理

7. DeepSeek(深度求索)

7.1 模型概述

基本信息

  • 开发者:深度求索
  • 发布时间:2023年
  • 架构:Transformer + MoE
  • 参数量:67B(DeepSeek-V2)

核心特点

  • MoE架构
  • 开源友好
  • 强大的代码能力
  • 高性价比

7.2 API调用

调用示例

python
import requests
import json

# 配置
url = "https://api.deepseek.com/chat/completions"
api_key = "your-api-key"

# 请求
payload = {
    "model": "deepseek-chat",
    "messages": [
        {
            "role": "user",
            "content": "请介绍一下DeepSeek大模型"
        }
    ],
    "temperature": 0.7,
    "max_tokens": 1000
}

# 发送请求
response = requests.post(
    url,
    headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    },
    data=json.dumps(payload)
)

# 获取结果
result = response.json()
print(result["choices"][0]["message"]["content"])

7.3 本地部署

使用Hugging Face

python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# 加载模型
model_name = "deepseek-ai/DeepSeek-V2.5"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    torch_dtype=torch.float16
)

# 生成文本
prompt = "请介绍一下DeepSeek大模型"
inputs = tokenizer(prompt, return_tensors="pt")
inputs = inputs.to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=500,
        temperature=0.7,
        top_p=0.9
    )

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

7.4 应用场景

适合场景

  • 代码生成
  • 数学推理
  • 知识问答
  • 本地部署
  • 高性价比应用

8. Yi(零一万物)

8.1 模型概述

基本信息

  • 开发者:零一万物
  • 发布时间:2023年
  • 架构:Transformer
  • 参数量:34B(Yi-34B)

核心特点

  • 多尺寸模型
  • 开源友好
  • 多语言支持
  • 强大的中文能力

8.2 模型系列

Yi系列

  • Yi-6B:小型
  • Yi-9B:中型
  • Yi-34B:大型
  • Yi-VL:多模态版本

8.3 本地部署

使用Hugging Face

python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# 加载模型
model_name = "01-ai/Yi-34B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    torch_dtype=torch.float16,
    trust_remote_code=True
)

# 生成文本
prompt = "请介绍一下Yi大模型"
inputs = tokenizer(prompt, return_tensors="pt")
inputs = inputs.to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=500,
        temperature=0.7,
        top_p=0.9
    )

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

8.4 应用场景

适合场景

  • 文本生成
  • 知识问答
  • 多语言处理
  • 本地部署
  • 开源应用

实践任务

任务:调用5个国内模型API对比

目标:调用5个国内大模型API,对比输出结果

要求

  1. 选择5个国内大模型
  2. 准备相同的输入
  3. 调用API获取输出
  4. 对比分析结果

代码框架

python
import requests
import json

# 配置
models = {
    "文心一言": {
        "url": "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions",
        "api_key": "your-api-key",
        "model": "ERNIE-Bot-4"
    },
    "通义千问": {
        "url": "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation",
        "api_key": "your-api-key",
        "model": "qwen-max"
    },
    "GLM": {
        "url": "https://open.bigmodel.cn/api/paas/v4/chat/completions",
        "api_key": "your-api-key",
        "model": "glm-4"
    },
    "Kimi": {
        "url": "https://api.moonshot.cn/v1/chat/completions",
        "api_key": "your-api-key",
        "model": "moonshot-v1-128k"
    },
    "DeepSeek": {
        "url": "https://api.deepseek.com/chat/completions",
        "api_key": "your-api-key",
        "model": "deepseek-chat"
    }
}

# 准备输入
prompt = "请用Python写一个快速排序算法"

# 调用模型
results = {}
for model_name, config in models.items():
    try:
        payload = {
            "model": config["model"],
            "messages": [
                {"role": "user", "content": prompt}
            ],
            "temperature": 0.7,
            "max_tokens": 1000
        }
        
        response = requests.post(
            config["url"],
            headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {config['api_key']}"
            },
            data=json.dumps(payload)
        )
        
        result = response.json()
        results[model_name] = result["choices"][0]["message"]["content"]
        
        print(f"{model_name}调用成功")
    except Exception as e:
        print(f"{model_name}调用失败: {e}")
        results[model_name] = None

# 对比结果
for model_name, result in results.items():
    print(f"\n{'='*50}")
    print(f"{model_name}:")
    print(f"{'='*50}")
    print(result)

课后作业

作业1:国内大模型对比表

题目:创建国内大模型对比表

要求

  1. 对比文心一言、通义千问、混元、豆包、GLM、Kimi、DeepSeek、Yi
  2. 从架构、参数量、特点、API价格、应用场景等方面对比
  3. 生成对比报告

作业2:模型性能测试

题目:测试国内大模型的性能

要求

  1. 设计测试任务(代码生成、文本生成、知识问答等)
  2. 测试不同模型的表现
  3. 分析性能差异

作业3:成本分析

题目:分析国内大模型的使用成本

要求

  1. 调研各模型的API价格
  2. 计算不同使用场景的成本
  3. 提供成本优化建议

参考资料

官方文档

  1. 文心一言: https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html
  2. 通义千问: https://help.aliyun.com/zh/dashscope/
  3. GLM: https://open.bigmodel.cn/dev/api
  4. Kimi: https://platform.moonshot.cn/docs
  5. DeepSeek: https://platform.deepseek.com/api-docs/

开源模型

  1. Qwen: https://huggingface.co/Qwen
  2. GLM: https://huggingface.co/THUDM
  3. Yi: https://huggingface.co/01-ai
  4. DeepSeek: https://huggingface.co/deepseek-ai

在线资源

  1. ModelScope: https://modelscope.cn/

    • 阿里模型库
  2. WiseModel: https://wisemodel.cn/

    • 智谱模型库

扩展阅读

模型评估

  • C-Eval: 中文大模型评估基准
  • CMMLU: 中文多任务语言理解
  • AGIEval: 通用智能评估

模型优化

  • 量化: 减少模型大小
  • 蒸馏: 知识迁移
  • 微调: 适配特定任务

下节预告

下一节我们将学习国外大模型详解,深入了解GPT、Claude、Gemini、Llama等国外大模型的特点和应用。


架构师AI杜公众号二维码

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态