首页
/ generative-ai-for-beginners 实战指南:理解开源大模型(Llama、Mistral、Falcon)并做出选型决策

generative-ai-for-beginners 实战指南:理解开源大模型(Llama、Mistral、Falcon)并做出选型决策

2026-09-05 20:42:55作者:乔或婵

本篇技术文章基于课程第 16 课 开源模型,系统讲解"开源/开放模型"的准确定义与判定标准、开放模型相对专有模型的可定制性、成本与灵活性优势,以及 Llama 2、Mistral、Falcon 三大开放模型家族的架构特点与衍生模型。读完后,你将掌握在 Hugging Face 与 Microsoft Foundry 模型目录中筛选、对比开放模型的完整方法论,并能结合本仓库配套的 Mistral 实操课Meta 家族实操课 中的可运行代码样例,真正动手调用这些开放模型。

课程封面横幅

开源大模型:为什么需要重新定义"开源"

开源软件在技术发展的各个领域中发挥了关键作用。开源促进会(Open Source Initiative,OSI)定义了软件被归类为"开源"需要满足的 10 条标准,其中最核心的一条是:源代码必须在 OSI 认可的许可证下公开共享

然而,大语言模型(LLM)的开发过程虽然与软件开发有相似之处,但并不完全相同。这导致社区对"LLM 语境下的开源"定义产生了大量讨论。按照传统开源定义,一个模型要做到完全"开源",以下信息都必须公开:

  • 用于训练模型的数据集(Datasets)
  • 训练过程中的完整模型权重(Full model weights as a part of the training)
  • 评估代码(Evaluation code)
  • 微调代码(Fine-tuning code)
  • 完整模型权重与训练指标(Full model weights and training metrics)

目前只有极少数模型符合这一严格标准。由艾伦人工智能研究所(Allen Institute for AI,AllenAI)发布的 OLMo 就是符合该标准的代表性模型之一。

正因如此,本课程的行文将统一使用 "open models"(开放模型) 这一表述——因为许多主流模型在撰写本文时未必满足上述全部标准。理解这一术语区分很重要:开放权重(open-weight)≠ 完全开源,许可证条款、训练数据是否公开、评估与微调代码是否可审计,都是选型时需要单独核实的维度。这一点也与课程第 2 课 探索与比较不同 LLM 中对"open-weight / open-source / proprietary"三类的划分相呼应:开放权重模型可供检查、下载和定制,但各家许可证并不一致,有些是完全开源,有些则是带使用限制的开放权重模型。

开放模型的核心优势

高度可定制(Highly Customizable)

开放模型在发布时通常附带详细的训练信息,研究者和开发者因此可以修改模型内部结构,创建针对特定任务或研究领域的高度专业化模型。典型方向包括代码生成、数学运算和生物医学。

这种"可定制"不只是理论优势——本仓库中大量衍生模型正是这一思路的产物:

  • 课程第 16 课列举的 Japanese Llama(日语特化)与 Llama Pro(基座增强版)都基于 Llama 微调而来;
  • BioMistral(医疗领域)与 OpenMath Mistral(数学计算)都基于 Mistral 微调而来;
  • OpenAssistant(基于开放模型的助手)与 GPT4ALL(性能高于基座)都基于 Falcon 微调而来。

如果你想深入理解"如何自己微调一个模型",可以继续阅读课程第 18 课 微调 LLM。其中讲清楚了微调(fine-tuning)的定位:它是在提示工程(prompt engineering)与检索增强生成(RAG)都难以满足需求时的第三类手段——通过用新数据重新训练模型本身来针对特定任务改进表现,同时也附带了决策清单(用例、替代方案基线、成本、收益),帮助你判断"该不该走微调这条路"。

成本(Cost)

使用与部署开放模型的单 token 成本普遍低于专有模型。在构建生成式 AI 应用时,应当针对你的具体用例对开放模型做"性能 vs 价格"的权衡分析。下图展示了不同模型的每 token 成本对比(来源:Artificial Analysis):

开放模型单 token 成本对比图(来源:Artificial Analysis)

灵活性(Flexibility)

使用开放模型意味着你可以在不同模型之间自由切换或组合。一个直观的例子是 HuggingChat:用户可以直接在用户界面中选择底层使用的模型,无需改动任何后端代码:

HuggingChat 界面中可直接选择底层模型的截图

这种"模型可插拔"的架构对本仓库配套课程的设计影响很大:同样的 ChatCompletionsClient 调用骨架,只需替换 model_name 参数即可在 Mistral、Llama、Phi 等不同家族间切换,后文的代码示例会具体展示。

认识三大开放模型家族

Llama 2:为对话场景优化的开放模型

Llama 2 由 Meta 开发,是一个针对聊天类应用优化的开放模型。这种定位源于其微调方式——训练过程中包含了大量对话数据与人类反馈(RLHF 类方法),使模型输出更贴近人类预期,从而提供更好的用户体验。

课程列举的两个微调版本值得了解:

  • Japanese Llama:日语特化版本;
  • Llama Pro:对基座模型进行增强(enhanced version of the base model)的版本。

仓库纵深:本仓库的第 21 课 Meta 家族模型实战 把这条线索延续到了更新的 Llama 3.1 / 3.2,并给出了可运行的代码:Llama 3.1(405B)将上下文窗口从 8k 扩大到 128k、支持原生函数调用(内置 Brave Search 与 Wolfram Alpha 工具);Llama 3.2 则补上了 Llama 3.1 缺失的多模态能力(11B/90B 视觉版本,以及可部署到端侧的 1B/3B 纯文本版本)。其多模态调用示例展示了如何在消息中同时携带文本与图片:

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

# 从 Microsoft Foundry 项目 "Overview" 页面获取
token = os.environ["AZURE_INFERENCE_CREDENTIAL"]
endpoint = os.environ["AZURE_INFERENCE_ENDPOINT"]
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)

上述代码与配套示例图片 sample.jpg 完整保存于 21-meta 课程作业 notebook,展示了开放模型从"纯文本对话"走向"原生多模态"的演进路径——这正是课程开篇所说开放模型生态"不断演进"的具体体现。

Mistral:以 Mixture-of-Experts 兼顾性能与效率

Mistral 是一个主打高性能与高效率的开放模型。它采用 Mixture-of-Experts(MoE,专家混合) 架构:将一组"专家模型"组合进同一个系统,根据输入内容动态选取部分专家参与计算。由于模型只处理自己擅长的输入,整体计算更省、效率更高。

其微调版本包括:

  • BioMistral:聚焦医疗领域;
  • OpenMath Mistral(NVIDIA 出品):聚焦数学计算。

仓库纵深:本仓库的第 20 课 Mistral 模型实战 系统讲解了 Mistral 家族中的 Mistral Large、Mistral Small、Mistral Nemo 三个型号,并给出完整可运行代码,例如用 Mistral Large 2 跑一个 RAG 流程:

pip install faiss-cpu
import requests
import numpy as np
import faiss
import os

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

# 从 Microsoft Foundry 项目 "Overview" 页面获取
endpoint = os.environ["AZURE_INFERENCE_ENDPOINT"]
model_name = "Mistral-large"
token = os.environ["AZURE_INFERENCE_CREDENTIAL"]

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

# 1. 下载文档并切块
response = requests.get(
    'https://raw.githubusercontent.com/run-llama/llama_index/main/'
    'docs/docs/examples/data/paul_graham/paul_graham_essay.txt'
)
text = response.text
chunk_size = 2048
chunks = [text[i:i + chunk_size] for i in range(0, len(text), chunk_size)]

# 2. 用多语言 embedding 模型向量化
embed_model_name = "cohere-embed-v3-multilingual"
embed_client = EmbeddingsClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(token)
)
embed_response = embed_client.embed(input=chunks, model=embed_model_name)

text_embeddings = np.array([item.embedding for item in embed_response.data])

# 3. 构建 faiss 向量索引并检索
d = text_embeddings.shape[1]
index = faiss.IndexFlatL2(d)
index.add(text_embeddings)

question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요?"
question_embedding = embed_client.embed(
    input=[question], model=embed_model_name
)
question_embeddings = np.array(question_embedding.data[0].embedding)

D, I = index.search(question_embeddings.reshape(1, -1), k=2)
retrieved_chunks = [chunks[i] for i in I.tolist()[0]]

# 4. 把"问题 + 检索到的相似块"组装进提示词
prompt = f"""
Context information is below.
---------------------
{retrieved_chunks}
---------------------
Given the context information and not prior knowledge, answer the query.
Query: {question}
Answer:
"""

chat_response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content=prompt),
    ],
    temperature=1.0,
    top_p=1.0,
    max_tokens=1000,
    model=model_name
)

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

该示例(完整版本见 20-mistral 作业 notebook)的价值在于:它用约 50 行代码演示了"开放模型 + 向量检索"这一 RAG 完整链路,其中 chunk_size = 2048k=2temperature=1.0top_p=1.0 等参数都是可以直接按需调整的取值。第 20 课还专门对比了 Mistral Small 与 Mistral Large 在相同提示(写 Fizz Buzz 函数)下的延迟与响应风格差异,结论是 Small 的响应时间约快 3–5 秒——这正是"性能 vs 价格"权衡的实测依据。此外,Mistral Nemo 是家族中唯一的 Apache 2.0 许可模型,采用 Tekken 分词器(相比常见的 tiktoken 在多语言与代码上 token 效率更高),并且是首批支持原生函数调用的开源模型之一——用 mistral_common 包的 MistralTokenizer 即可复现分词对比实验。

Falcon:FlashAttention 带来的推理效率优势

Falcon 由技术创新研究所(Technology Innovation Institute,TII)创建。其中 Falcon-40B 拥有 400 亿参数,在更小的计算预算下表现优于 GPT-3。其效率来源是两项关键技术的组合:

  • FlashAttention 算法
  • Multi-Query Attention(多查询注意力)

二者共同削减了推理时的显存占用,降低了推理时间,使 Falcon-40B 能够胜任聊天类应用。

其微调版本包括:

  • OpenAssistant:一个完全构建在开放模型之上的助手;
  • GPT4ALL:性能高于 Falcon 基座的版本。

如何选择合适的开放模型

课程明确给出了一个务实的结论:选择开放模型没有唯一答案。可行的起步路径有三条:

  1. 按任务筛选:使用 Microsoft Foundry 模型目录的"按任务过滤(filter by task)"功能,快速理解各模型是为哪类任务训练的;
  2. 看排行榜:Hugging Face 维护的 LLM Leaderboard 按特定指标展示表现最佳的模型;
  3. 跨类型横评:Artificial Analysis 是跨类型对比 LLM 的另一个优质资源,下图为其模型质量对比截图:

跨模型质量对比图(来源:Artificial Analysis)

在此基础上,课程还给出两条经验法则:

  • 针对具体用例:搜索聚焦于相同领域的微调版本往往比直接用基座模型更有效(对照上文 BioMistral、OpenMath Mistral 等例子);
  • 实验验证:用多个开放模型跑你自己的场景,对照你和用户各自的预期来评估,是行之有效的做法。这也与本仓库 19-slm 课程 的思路一致:小语言模型(SLM)与开放大模型同样要在"尺寸、理解、算力、偏差、推理速度"多个维度上结合具体用例权衡。

快速上手的实操路径

开放模型最大的好处是可以快速上手。课程的推荐路径是:

  1. 打开 Microsoft Foundry 模型目录(其中收录了一个包含本课讨论模型的 Hugging Face 专属集合),用"按任务过滤"缩小候选范围;
  2. 选定候选后,复用本仓库配套课程的调用骨架——20-mistral 课 的 RAG 与延迟对比示例、21-meta 课 的函数调用与多模态示例,均以 azure.ai.inference SDK 的 ChatCompletionsClient 为统一入口,替换 model_name 与环境变量(AZURE_INFERENCE_ENDPOINTAZURE_INFERENCE_CREDENTIAL)即可切换不同开放模型家族;
  3. 如果评估后确定某个模型值得深入,再进入 18 微调课 学习用自有数据定制模型,或在 15 RAG 课 中完善检索链路。

从源码结构看,整个仓库的开放模型课程呈现清晰的分工:第 16 课负责认知框架与选型方法(本文覆盖的 OSI 标准、三大模型家族、成本/质量对比),第 20、21 课负责型号级实操(具体型号的参数、许可、上下文窗口与可运行代码),第 18 课负责定制能力(微调)。按这条路径学习,可以在不偏离主线的前提下逐步深入开放模型生态。

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