generative-ai-for-beginners 实战指南:理解开源大模型(Llama、Mistral、Falcon)并做出选型决策
本篇技术文章基于课程第 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):
灵活性(Flexibility)
使用开放模型意味着你可以在不同模型之间自由切换或组合。一个直观的例子是 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 = 2048、k=2、temperature=1.0、top_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 基座的版本。
如何选择合适的开放模型
课程明确给出了一个务实的结论:选择开放模型没有唯一答案。可行的起步路径有三条:
- 按任务筛选:使用 Microsoft Foundry 模型目录的"按任务过滤(filter by task)"功能,快速理解各模型是为哪类任务训练的;
- 看排行榜:Hugging Face 维护的 LLM Leaderboard 按特定指标展示表现最佳的模型;
- 跨类型横评:Artificial Analysis 是跨类型对比 LLM 的另一个优质资源,下图为其模型质量对比截图:
在此基础上,课程还给出两条经验法则:
- 针对具体用例:搜索聚焦于相同领域的微调版本往往比直接用基座模型更有效(对照上文 BioMistral、OpenMath Mistral 等例子);
- 实验验证:用多个开放模型跑你自己的场景,对照你和用户各自的预期来评估,是行之有效的做法。这也与本仓库 19-slm 课程 的思路一致:小语言模型(SLM)与开放大模型同样要在"尺寸、理解、算力、偏差、推理速度"多个维度上结合具体用例权衡。
快速上手的实操路径
开放模型最大的好处是可以快速上手。课程的推荐路径是:
- 打开 Microsoft Foundry 模型目录(其中收录了一个包含本课讨论模型的 Hugging Face 专属集合),用"按任务过滤"缩小候选范围;
- 选定候选后,复用本仓库配套课程的调用骨架——20-mistral 课 的 RAG 与延迟对比示例、21-meta 课 的函数调用与多模态示例,均以
azure.ai.inferenceSDK 的ChatCompletionsClient为统一入口,替换model_name与环境变量(AZURE_INFERENCE_ENDPOINT、AZURE_INFERENCE_CREDENTIAL)即可切换不同开放模型家族; - 如果评估后确定某个模型值得深入,再进入 18 微调课 学习用自有数据定制模型,或在 15 RAG 课 中完善检索链路。
从源码结构看,整个仓库的开放模型课程呈现清晰的分工:第 16 课负责认知框架与选型方法(本文覆盖的 OSI 标准、三大模型家族、成本/质量对比),第 20、21 课负责型号级实操(具体型号的参数、许可、上下文窗口与可运行代码),第 18 课负责定制能力(微调)。按这条路径学习,可以在不偏离主线的前提下逐步深入开放模型生态。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00



