首页
/ generative-ai-for-beginners 第 21 课实战:基于 Meta 家族模型 Llama 3.1 / 3.2 构建生成式 AI 应用

generative-ai-for-beginners 第 21 课实战:基于 Meta 家族模型 Llama 3.1 / 3.2 构建生成式 AI 应用

2026-09-07 10:47:49作者:俞予舒Fleming

本篇文章围绕开源课程 generative-ai-for-beginners 的第 21 课(仓库内正文见 translations/de/21-meta/README.md,英文主版见 21-meta/README.md)展开,系统讲解 Meta 家族("Llama 羊群")中两大主力模型 Llama 3.1 与 Llama 3.2 的定位、适用场景与编码方式。读完本文,你将掌握:如何在模型推理 API 上选用 Llama 3.1 变体触发原生函数调用,以及如何调用 Llama 3.2 视觉模型同时处理"文本 + 图片"两类输入,把开源模型能力真正落到可运行的生成式 AI 应用里。

课程导读:本节学什么

第 21 课的核心学习目标非常聚焦,共三条:

  • 认识 Meta 家族两大主模型——Llama 3.1 与 Llama 3.2;
  • 理解每个模型的典型应用场景(use-case);
  • 通过代码示例演示每个模型独有的能力。

课程配套的动手练习以 Notebook 形式提供:英文源 21-meta/python/githubmodels-assignment.ipynb,德文翻译版 translations/de/21-meta/python/githubmodels-assignment.ipynb。Notebook 中的环境准备单元会先执行两条安装命令:

%pip install azure-core
%pip install azure-ai-inference

也就是说,本课示例依赖 azure-ai-inference(推理客户端)与 azure-core(凭据与传输基础库)两个 Python 包。

Meta 家族模型概览:Llama "羊群"中的两大主力

本课挑选了 Meta 家族中发布时序相邻的两个代表——Llama 3.1 与 Llama 3.2。它们以多种参数规模变体出现,可从模型市场(GitHub Models)直接选用。课程中可用的变体清单如下:

模型 变体 定位(按课程描述)
Llama 3.1 70B Instruct 文本指令模型,体量相对轻量
Llama 3.1 405B Instruct 旗舰级开源参数规模,函数调用 / RAG 场景主力
Llama 3.2 11B Vision Instruct 中等规模的视觉-语言多模态模型
Llama 3.2 90B Vision Instruct 大参数多模态模型,图像理解能力更强

需要说明:Llama 3 同样存在于模型市场,但本课不将其作为讲解对象,示例代码均围绕 Llama 3.1 / 3.2 展开。

要理解两个模型的差异,关键线索在于"代际分工":Llama 3.1 把文本大模型的上下文与工具调用推向新高度,Llama 3.2 则在保持文本能力的同时补齐多模态输入。下文分别深入。

Llama 3.1:以 405B 开源参数支撑复杂应用场景

Llama 3.1 405B Instruct 拥有约 4050 亿参数,属于典型的开源大型语言模型(open-source LLM)阵营。课程明确把它定位为 Llama 3 的一次代际升级,升级体现在三个可量化的维度上:

  • 更大的上下文窗口:128k Tokens(Llama 3 为 8k Tokens),可一次性容纳长文档、长对话或大批检索片段;
  • 更大的最大输出长度:4096 Tokens(Llama 3 为 2048 Tokens),单次生成的文本量上限翻倍;
  • 更好的多语言支持:得益于训练语料 token 数量的增加,跨语言能力随之增强。

上下文窗口扩大并非只是"能读更多字",它直接解锁了三类更具工程价值的复杂用例:

  1. 原生函数调用(Native Function Calling)——模型可以判断"何时需要调用外部工具",并发出调用外部函数/工具的指令,把流程延伸到 LLM 工作流之外;
  2. 更强的 RAG 效果——更大的上下文窗口允许把更多检索到的资料一次性注入提示词,从而改善检索增强生成的质量;
  3. 合成数据生成——模型可为微调(fine-tuning)等任务批量构造高质量训练数据。

这三类能力在本课程体系中均有后续纵深。函数调用的完整工程范式见第 11 课 11-integrating-with-function-calling/README.md;RAG 检索与向量数据库在第 15 课 15-rag-and-vector-databases/README.md 有系统讲解;微调(含数据准备)则在第 18 课 18-fine-tuning/README.md

原生函数调用实战:让 Llama 3.1 自己决定"调什么工具"

Llama 3.1 经过针对性微调,在执行函数/工具调用时更加可靠。特别地,它内置了两个开箱即用的工具,模型会根据用户提示词自行判断是否需要触发:

  • Brave Search——通过网页搜索获取实时信息(例如天气这类对时效性敏感的数据);
  • Wolfram Alpha——处理复杂数学计算,免去自行编写数学函数的成本。

除了内置工具,开发者也可以自定义工具交给 LLM 调用。课程给出的示例演示了一个完整链路:先在系统提示词中声明可用工具集(brave_searchwolfram_alpha),随后发送一条询问"斯德哥尔摩天气"的用户消息,模型将返回对 Brave Search 的工具调用,其文本形态为 <|python_tag|>brave_search.call(query="Stockholm weather")

import os
from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage
from azure.core.credentials import AzureKeyCredential

token = os.environ["GITHUB_TOKEN"]
endpoint = "https://models.inference.ai.azure.com"
model_name = "meta-llama-3.1-405b-instruct"

client = ChatCompletionsClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(token),
)

# 在系统提示词中声明可用工具,并给出运行环境约束
tool_prompt = f"""
<|begin_of_text|><|start_header_id|>system<|end_header_id|>

Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 July 2024

You are a helpful assistant<|eot_id|>
"""

messages = [
    SystemMessage(content=tool_prompt),
    UserMessage(content="What is the weather in Stockholm?"),
]

response = client.complete(messages=messages, model=model_name)

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

从代码可以拆解出几个关键实现细节:

  • 提示词模板:系统提示词以 <|begin_of_text|> 开头,用 <|start_header_id|>system<|end_header_id|> ... <|eot_id|> 界定系统消息段,<|python_tag|> 则用于标记模型返回的 Python 风格工具调用,这些特殊标记是 Llama 模型约定格式的一部分,需要照原文保留;
  • 工具声明Tools: brave_search, wolfram_alpha 一行把可用工具集合告知模型,这是"模型自行决定调用哪个工具"的前提;
  • 客户端构造:通过 ChatCompletionsClient(endpoint=..., credential=AzureKeyCredential(token)) 建立会话,其中 GITHUB_TOKEN 从环境变量读取;
  • 一次补全client.complete(messages=messages, model=model_name) 完成单轮调用,结果从 response.choices[0].message.content 取出打印。

需要特别提醒(课程原注):上述示例仅演示"模型做出工具调用"这一决策动作,并不会真正执行搜索。若想拿到真实搜索结果,还需要在 Brave API 平台注册免费账号,自行实现该函数并把工具调用分发到函数执行逻辑上。

Llama 3.2:开源模型补上多模态短板

Llama 3.1 虽然强大,但本质上仍是纯文本 LLM——它无法把图片等异质输入当作提示词理解并作出回应。这正是 Llama 3.2 的核心卖点,其特性可归纳为三点:

  • 多模态能力——可同时评估文本与图像提示词,是开源模型世界迈出的一大步;
  • 中大规模变体(11B / 90B)——在能力与部署成本之间提供灵活选项;
  • 纯文本轻量变体(1B / 3B)——面向边缘设备 / 移动端部署,可提供低延迟推理。

其中 1B/3B 这类小参数纯文本模型,与课程第 19 课对小型语言模型(SLM)的讨论相呼应(见 19-slm/README.md):小体量换来了端侧可部署性与低延迟。而视觉能力让 Llama 3.2 补上了 Meta 家族此前缺失的"看图说话"链路。

图文双模态实战:用 Llama 3.2 90B 做图像分析

下面的示例同时携带"文本问题 + 本地图片"两类内容请求模型分析:系统消息要求助手"详细描述图像",用户消息则由文本 What's in this image? 与一张本地图片组成。

代码中图片正是仓库内的 21-meta/python/sample.jpg:一幅生成式 AI 教学场景的截图,画面左侧是戴着耳机的讲解者,右侧展示了一个 AI 模型目录(MODEL CATALOG)页面,可用于直观验证"模型是否真的看懂了画面中的人与界面元素"。

示例代码(节选自课程正文)如下:

import os
from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import (
    SystemMessage,
    UserMessage,
    TextContentItem,
    ImageContentItem,
    ImageUrl,
    ImageDetailLevel,
)
from azure.core.credentials import AzureKeyCredential

token = os.environ["GITHUB_TOKEN"]
endpoint = "https://models.inference.ai.azure.com"
model_name = "Llama-3.2-90B-Vision-Instruct"

client = ChatCompletionsClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(token),
)

response = client.complete(
    messages=[
        SystemMessage(
            content="You are a helpful assistant that describes images in details."
        ),
        UserMessage(
            content=[
                TextContentItem(text="What's in this image?"),
                ImageContentItem(
                    image_url=ImageUrl.load(
                        image_file="sample.jpg",
                        image_format="jpg",
                        detail=ImageDetailLevel.LOW)
                ),
            ],
        ),
    ],
    model=model_name,
)

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

这段代码相较纯文本调用,有四处结构差异值得关注:

  1. 模型名切换model_name 指向视觉模型 Llama-3.2-90B-Vision-Instruct
  2. 用户消息多模态化UserMessagecontent 不再是一个字符串,而是一个内容项列表,由 TextContentItem(文本)与 ImageContentItem(图片)拼装而成;
  3. 本地图片装载ImageUrl.load(image_file="sample.jpg", image_format="jpg") 负责从本地文件读取并上传图片,image_format 显式声明格式为 jpg
  4. 细节等级参数detail=ImageDetailLevel.LOW 指定请求图片时采用的细节档位,示例选择较低档以控制传输开销。

运行前提是示例图片文件 sample.jpg 位于代码执行目录下(仓库内对应文件为 21-meta/python/sample.jpg);若在其他目录执行,可把 image_file 改为指向该文件的完整或相对路径。模型返回的 response.choices[0].message.content 即为对画面内容的文字描述,可直接打印查看。

运行环境与仓库实操提示

在动手前,请先确认以下几点(均与本仓库第 21 课相关文件的描述一致):

  • 依赖安装:先执行 pip install azure-core azure-ai-inference(Notebook 环境中写作 %pip install);
  • 凭据注入:两个示例都通过 os.environ["GITHUB_TOKEN"] 读取访问令牌,请确保运行前已设置 GITHUB_TOKEN 环境变量,例如在终端执行 export GITHUB_TOKEN=<你的令牌>,或在 Notebook 中先写入该变量;
  • 默认端点:两个示例均指向公共推理端点 https://models.inference.ai.azure.com,模型名称按变体区分(meta-llama-3.1-405b-instructLlama-3.2-90B-Vision-Instruct);
  • 可用代码载体:上述两段代码都已完整收录于课程 Notebook 21-meta/python/githubmodels-assignment.ipynb,逐格运行即可复现。

关于平台的版本演进提示:仓库当前英文主版 21-meta/README.md 指出,GitHub Models 将于 2026 年 7 月底停用,推荐迁移至 Microsoft Foundry Models 目录进行 AI 模型原型验证;迁移后代码中对应改为从 AZURE_INFERENCE_ENDPOINT / AZURE_INFERENCE_CREDENTIAL 读取端点与凭据,模型名也调整为 Foundry 目录中的规范名(如 Meta-Llama-3.1-405B-Instruct)。本课德文翻译 translations/de/21-meta/README.md 仍保留旧版调用形态,对照英文版 translations/en/21-meta/README.md 可以清晰看到这一迁移路径。因此在实际运行时,请以你所用平台当前支持的端点、凭据变量名与模型标识为准。

学完本课之后:把 Llama 放进更大的课程拼图

本课聚焦"选对 Meta 模型并调用其独有能力",是整条 21 课学习路径的收尾一环,可与邻近主题串联成完整能力链:

回到本课本身:一句话总结就是——文本大任务交给 Llama 3.1 的长上下文与工具调用,图文混合理解交给 Llama 3.2 的多模态变体,再按部署端(云端大模型 / 端侧小模型)选取合适的参数规模,即可把 Meta 家族模型快速接入你的生成式 AI 应用。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
915
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388