news 2026/9/10 23:47:55

使用 Mistral 模型构建生成式 AI 应用:Large / Small / NeMo 选型与实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Mistral 模型构建生成式 AI 应用:Large / Small / NeMo 选型与实战

使用 Mistral 模型构建生成式 AI 应用:Large / Small / NeMo 选型与实战

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

本指南是 generative-ai-for-beginners 课程第 20 课(Mistral 模型)的完整技术解读。课程围绕Mistral Large、Mistral Small、Mistral NeMo三个模型展开,讲解如何通过 Microsoft Foundry Models(原 GitHub Models)统一推理端点免费调用它们,并给出三个可直接运行的实战代码:基于 Mistral Large 2 的检索增强生成(RAG)、Mistral Small 与 Large 的延迟对比、以及 Mistral NeMo 与 Large 的 Tokenizer 对比。读完本文,你将掌握三大 Mistral 模型的适用场景、azure-ai-inference客户端的标准调用范式,以及从文档切片、向量检索到增强生成的全链路 RAG 实现。

课程定位与配套资源

本节课程在整套「面向初学者的生成式 AI」课程中属于模型实战选型环节。课程正文(20-mistral/README.md)与可运行的 Notebook(20-mistral/python/githubmodels-assignment.ipynb)配套存在,Notebook 中保留了真实的执行输出(如 faiss 安装日志、RAG 问答结果、token 计数结果),可作为结果预期的参照。

课程涵盖三部分能力目标:

  • 探索不同的 Mistral 模型;
  • 理解每个模型的使用场景与典型用例;
  • 通过展示各模型独特能力的代码示例进行实践。

三个模型(Mistral LargeMistral SmallMistral NeMo)均可通过 Microsoft Foundry Models(https://models.inference.ai.azure.com)免费原型验证,代码统一使用azure-ai-inferenceazure-coreSDK 驱动。该端点以「一个端点、多模型、统一 OpenAI 兼容接口」的方式工作,是课程后续多种模型实验共用的基础设施。

运行环境准备

开始前需要准备 Python 环境与密钥。本仓库根目录的 requirements.txt 声明了azure-ai-inferencenumpytiktoken等依赖,Mistral 实验涉及的额外包(faiss-cpumistral-common)由 Notebook 内pip install完成。

端点与密钥

课程代码通过环境变量读取推理端点与凭据(Notebook 中注释明确标注:从 Microsoft Foundry 项目的 Overview 页面获取):

  • AZURE_INFERENCE_ENDPOINT:推理端点,对应https://models.inference.ai.azure.com
  • AZURE_INFERENCE_CREDENTIAL:访问令牌(GitHub 场景下即GITHUB_TOKEN)。

代码中不硬编码密钥,而是通过os.environ[...]读取。仓库在 shared/python/env_utils.py 中封装了配套的环境变量管理工具(get_required_envvalidate_env_vars),其测试见 tests/test_env_utils.py——缺失或空值的环境变量会抛出带明确提示的ValueError,这正对应 Mistral 实验中「忘了设 token 就运行会报错」的场景。建议在.env文件中管理这些变量,用python-dotenv(仓库根 requirements.txt 已声明)加载。

依赖安装

pip install azure-ai-inference azure-core numpy faiss-cpu mistral-common

其中azure-ai-inference提供ChatCompletionsClient(对话补全)与EmbeddingsClient(向量化);faiss-cpu用于 RAG 示例的向量检索;mistral-common用于 tokenizer 对比实验。

Mistral Large 2(2407):企业级旗舰模型

Mistral Large 2 是 Mistral 当前的旗舰模型,定位企业级应用,是初代 Mistral Large 的升级版本。课程给出的关键升级点:

  • 更大的上下文窗口:128k vs 初代 32k(提升 4 倍),可容纳更长文档与更多检索片段;
  • 数学与代码任务表现提升:平均准确率 76.9% vs 60.4%;
  • 多语言能力增强:覆盖英语、法语、德语、西班牙语、意大利语、葡萄牙语、荷兰语、俄语、中文、日语、韩语、阿拉伯语、印地语。

注:以上对比数值为课程文档(20-mistral/README.md)中 Mistral 官方口径的说明数据,属于模型厂商发布信息,具体评测口径以 Mistral 官方文档为准。

凭借这些特性,Mistral Large 擅长三类任务:

  • 检索增强生成(RAG):受益于更大的上下文窗口,可以把更多检索到的相关片段与问题一起交给模型;
  • 函数调用(Function Calling):原生支持函数调用,可集成外部工具与 API,且支持并行调用顺序逐个调用
  • 代码生成:在 Python、Java、TypeScript、C++ 代码生成上表现突出。

RAG 实战:用 Mistral Large 2 问答文本文档

本节示例演示在文本文档上执行完整 RAG 流程:先用Cohere 多语言嵌入模型cohere-embed-v3-multilingual)分别对文档分块和问题做向量化,再用faiss作为向量存储执行最近邻检索,最后把「问题 + 检索到的相似片段」拼进提示词交给 Mistral Large,得到自然语言回答。文档使用 llama_index 仓库中的 Paul Graham 随笔(通过requests直接拉取),问题用韩语提问,验证了模型的多语言理解能力。

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)] len(chunks) # 2. 用 Cohere 多语言嵌入模型对全部切片做向量化 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 = [] for item in embed_response.data: length = len(item.embedding) text_embeddings.append(item.embedding) text_embeddings = np.array(text_embeddings) # 3. 用 faiss 构建 L2 距离索引并灌入向量 d = text_embeddings.shape[1] index = faiss.IndexFlatL2(d) index.add(text_embeddings) # 4. 对用户问题做同样的向量化 question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요?" question_embedding = embed_client.embed( input=[question], model=embed_model_name ) question_embeddings = np.array(question_embedding.data[0].embedding) # 5. 检索与问题最相似的 2 个切片 D, I = index.search(question_embeddings.reshape(1, -1), k=2) # distance, index retrieved_chunks = [chunks[i] for i in I.tolist()[0]] # 6. 组装提示词:上下文 + 问题,约束模型只用给定上下文作答 prompt = f""" Context information is below. --------------------- {retrieved_chunks} --------------------- Given the context information and not prior knowledge, answer the query. Query: {question} Answer: """ # 7. 交给 Mistral Large 生成回答 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)

关键点拆解

  • 切片策略chunk_size = 2048,即按 2048 个字符切块。切片大小直接决定后续检索粒度和上下文占用,过小则语义不完整,过大则可能引入无关信息;
  • 检索参数k=2表示取最相似的 2 个片段,faiss.IndexFlatL2是精确的 L2(欧氏距离)暴力检索索引,适合中小规模向量集;
  • 提示词设计:模板明确声明"Given the context information and not prior knowledge",约束模型不要依赖预训练记忆,这正是 RAG「让模型基于你的数据作答」的核心——与课程 15-rag-and-vector-databases/README.md 中知识库摄取、用户查询、检索、增强生成的 RAG 四阶段流程一脉相承;
  • 推理参数temperature=1.0(采样随机性,值越高越发散)、top_p=1.0(核采样累积概率,1.0 表示不过滤低概率 token)、max_tokens=1000(回答最大生成长度)。

Notebook 中该示例的真实输出(摘自20-mistral/python/githubmodels-assignment.ipynb)展示了一致的结果:模型正确回答作者在进入大学前主要从事写作(短篇故事)与编程(在 IBM 1401 上用早期 Fortran 与打孔卡写程序)两件事,且是英文自然语言回答,印证了嵌入检索与生成链路的有效性。

Mistral Small:低成本低延迟的小语言模型(SLM)

Mistral Small 属于 Mistral 家族的 premier/enterprise 类别,但如其名所示,它是一个小语言模型(SLM)。课程总结的三大优势:

  • 成本节约:相比 Mistral Large 与 NeMo,价格下降约 80%;
  • 低延迟:相比 Mistral 的大模型,响应更快;
  • 灵活部署:对所需资源限制更少,可部署到更多样的环境。

(价格降幅为课程文档引用的官方口径数据,实际以 Mistral 定价页为准。)

因此 Mistral Small 非常适合:

  • 文本类任务:摘要、情感分析、翻译;
  • 高频请求应用:利用成本优势支撑大量调用;
  • 低延迟代码任务:代码评审与代码建议。

SLM 的概念在本课程体系中另有专章讲解(见 19-slm/README.md):SLM 是 LLM 的缩小版变体,架构原理相通但计算占用显著更低,通过压缩或蒸馏保留大部分功能与语言能力,适合移动端、边缘计算等资源受限场景——Mistral Small 正是这一思想在 Mistral 家族中的落地。

对比实验:Mistral Small vs Mistral Large 的延迟差异

为直观展示 Small 与 Large 的延迟差距,课程给出两个完全相同的提示词(请模型用 Python 编写 Fizz Buzz 函数),分别调用Mistral-smallMistral-large

import os endpoint = os.environ["AZURE_INFERENCE_ENDPOINT"] model_name = "Mistral-small" # 换成 "Mistral-large" 即第二个实验 token = os.environ["AZURE_INFERENCE_CREDENTIAL"] client = ChatCompletionsClient( endpoint=endpoint, credential=AzureKeyCredential(token), ) response = client.complete( messages=[ SystemMessage(content="You are a helpful coding assistant."), UserMessage(content="Can you write a Python function to the fizz buzz test?"), ], temperature=1.0, top_p=1.0, max_tokens=1000, model=model_name ) print(response.choices[0].message.content)

两个实验除model_name外代码完全一致。课程指出:同一提示词下两者响应时间差约3–5 秒(该数值为课程文档给出的经验观察),同时留意回答的长度与风格差异——Large 倾向于生成更详尽、风格更正式的回答,Small 则更简短直接。这类对比的意义在于为选型提供依据:对延迟敏感、调用频繁的场景优先 Small;对回答质量与长上下文要求高的场景选 Large

Mistral NeMo:Apache 2.0 开源模型

与前两者不同,Mistral NeMo 是本次课程三个模型中唯一采用 Apache 2.0 许可证的免费模型,被视作 Mistral 早期开源 LLM——Mistral 7B 的升级。其独特特性:

  • 更高效的 Tokenizer:使用Tekken分词器替代更常见的tiktoken,在更多语言与代码上有更优的表现(更少的 token 意味着更低的成本与更长的有效上下文);
  • 可微调:提供基础模型供微调,为需要领域适配的用例带来灵活性;
  • 原生函数调用:与 Mistral Large 一样经过函数调用训练,是最早支持该能力的开源模型之一

对比实验:NeMo 与 Large 的 Tokenizer 效率

该实验用mistral-common包分别加载open-mistral-nemomistral-large-latest的 tokenizer,对完全相同的消息列表(含一个get_current_weather工具函数定义 + 一条用户消息)做编码并统计 token 数。NeMo 返回更少的 token,直接印证了 Tekken 的分词效率优势。

pip install mistral-common
from mistral_common.protocol.instruct.messages import ( UserMessage, ) from mistral_common.protocol.instruct.request import ChatCompletionRequest from mistral_common.protocol.instruct.tool_calls import ( Function, Tool, ) from mistral_common.tokens.tokenizers.mistral import MistralTokenizer # 实验一:Mistral NeMo model_name = "open-mistral-nemo" tokenizer = MistralTokenizer.from_model(model_name) tokenized = tokenizer.encode_chat_completion( ChatCompletionRequest( tools=[ Tool( function=Function( name="get_current_weather", description="Get the current weather", parameters={ "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA", }, "format": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "The temperature unit to use. Infer this from the user's location.", }, }, "required": ["location", "format"], }, ) ) ], messages=[ UserMessage(content="What's the weather like today in Paris"), ], model=model_name, ) ) tokens, text = tokenized.tokens, tokenized.text print(len(tokens))
# 实验二:Mistral Large —— 仅 model_name 不同 model_name = "mistral-large-latest" # ……其余代码与实验一完全相同…… print(len(tokens))

结果解读:Notebook 中的真实输出为 NeMo 产出128个 token、Large 产出135个 token(同一提示词、同一工具定义)。虽然差值看似不大,但注意这里只包含了一个简短工具函数;在生产场景中,工具定义、系统提示与多轮对话会占据大量 token,tokenizer 的效率差异会被显著放大,直接影响成本上下文预算

注意:实验二直接以模型名加载 tokenizer(MistralTokenizer.from_model("mistral-large-latest")),验证的是本地 tokenizer 库对两个模型词汇表的统计差异;实际的推理计费 token 数以服务端为准。另外,工具函数的 JSON Schema 完整描述了参数类型、枚举、必填项——这也是 Mistral 原生函数调用的底层格式基础。

三个模型的选型对照

维度Mistral Large 2Mistral SmallMistral NeMo
定位企业级旗舰 LLM企业级 SLMApache 2.0 开源模型
上下文窗口128k较短中等
成本最高约低 80%免费/开源友好
延迟较高较低
核心优势RAG、函数调用、多语言、代码生成高频低成本、低延迟文本任务Tekken 分词效率、可微调、原生函数调用
典型场景复杂推理、长文档问答摘要/情感分析/翻译、代码建议开源部署、微调适配、工具调用

选型建议一句话概括:追求质量与长上下文选 Large;追求成本与速度选 Small;需要开源可控、可微调且要原生工具调用时选 NeMo

从本课延伸:仓库内的相关资源

本课并非孤立章节,Mistral 实验所用技术栈在仓库其他课程中都有纵深讲解,可交叉阅读:

  • RAG 全流程:课程 15-rag-and-vector-databases/README.md 系统讲解 RAG 原理、向量数据库与落地集成,并附可运行的 Notebook(15-rag-and-vector-databases/notebook-rag-vector-databases.ipynb)与示例数据(15-rag-and-vector-databases/data);
  • SLM 概念:课程 19-slm/README.md 以 Microsoft Phi-3/3.5 家族为例讲解 SLM 的文本、视觉与 MoE 场景,其 python 目录下还有多个可运行 Demo;
  • 函数调用:课程 11-integrating-with-function-calling/README.md 专门讲解 LLM 工具调用集成,含 JS/Python/TypeScript 多语言示例;
  • 统一客户端模式ChatCompletionsClient/EmbeddingsClient的用法贯穿多个课程(如 06-text-generation-apps、07-building-chat-applications),仓库 shared/python 目录还提供了可复用的 API 与环境变量工具函数。

完成本课后,可继续浏览仓库 README.md 中的完整 21 课课程地图,按「提示工程 → 应用构建 → RAG → 模型微调」的路径持续进阶。

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 23:45:46

企业官网GEO改造指南:5步让官网成为AI搜索的“优选信源“

2026年,越来越多企业注意到一个现象:官网流量结构正在变化——传统搜索引擎带来的访客增速放缓,而AI问答入口带来的品牌曝光快速上升。据公开研究普遍引用的口径,国内生成式AI用户已超过6亿,相当一部分消费者在决策前会…

作者头像 李华
网站建设 2026/9/10 23:42:18

中文电子病历NER实战:CCKS 2019数据集与BERT-BiLSTM-CRF基线

简介:面向中文医学自然语言处理研究者与竞赛学习者,这份数据集源自CCKS 2019中文电子病历命名实体识别评测任务,包含1379例真实病历样本,每份均提供原始文本与实体标注,覆盖手术、解剖部位、药物、疾病和诊断、影像检查…

作者头像 李华