Pelajaran ini akan merangkumi:
- Meneroka Model Mistral yang berbeza
- Memahami penggunaan dan senario bagi setiap model
- Meneroka contoh kod yang menunjukkan ciri unik setiap model.
Dalam pelajaran ini, kita akan meneroka 3 model Mistral yang berbeza: Mistral Large, Mistral Small dan Mistral Nemo.
Setiap model ini tersedia secara percuma di Microsoft Foundry Models. Kod dalam buku nota ini akan menggunakan model-model ini untuk menjalankan kod.
Nota: GitHub Models akan dihentikan pada akhir Julai 2026. Berikut adalah maklumat lanjut mengenai menggunakan Microsoft Foundry Models untuk memprototip dengan model AI.
Mistral Large 2 kini adalah model utama dari Mistral dan direka untuk kegunaan perusahaan.
Model ini adalah naik taraf dari Mistral Large asal dengan menawarkan
- Tetingkap Konteks Lebih Besar - 128k berbanding 32k
- Prestasi lebih baik pada Tugas Matematik dan Pengekodan - ketepatan purata 76.9% berbanding 60.4%
- Peningkatan prestasi pelbagai bahasa - bahasa termasuk: Bahasa Inggeris, Perancis, Jerman, Sepanyol, Itali, Portugis, Belanda, Rusia, Cina, Jepun, Korea, Arab, dan Hindi.
Dengan ciri-ciri ini, Mistral Large cemerlang dalam
- Janaan Tambahan Berpandu Pemulihan (RAG) - disebabkan tetingkap konteks yang lebih besar
- Pemanggilan Fungsi - model ini mempunyai pemanggilan fungsi asli yang membolehkan integrasi dengan alat dan API luaran. Panggilan ini boleh dibuat secara selari atau satu demi satu secara berurutan.
- Penjanaan Kod - model ini cemerlang dalam penjanaan Python, Java, TypeScript dan C++.
Dalam contoh ini, kami menggunakan Mistral Large 2 untuk menjalankan corak RAG ke atas dokumen teks. Soalan ditulis dalam Bahasa Korea dan bertanya tentang aktiviti penulis sebelum kolej.
Ia menggunakan Model Penjelmaan Cohere untuk membuat penjelmaan dokumen teks serta soalan. Untuk contoh ini, ia menggunakan pakej Python faiss sebagai stor vektor.
Arahan yang dihantar ke model Mistral merangkumi kedua-dua soalan dan serpihan yang diambil yang serupa dengan soalan. Model kemudian memberikan respons dalam bahasa semula jadi.
pip install faiss-cpuimport 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
# Dapatkan ini dari halaman "Gambaran Keseluruhan" projek Microsoft Foundry anda
endpoint = os.environ["AZURE_INFERENCE_ENDPOINT"]
model_name = "Mistral-large"
token = os.environ["AZURE_INFERENCE_CREDENTIAL"]
client = ChatCompletionsClient(
endpoint=endpoint,
credential=AzureKeyCredential(token),
)
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)
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)
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) # jarak, indeks
retrieved_chunks = [chunks[i] for i in I.tolist()[0]]
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)Mistral Small adalah satu lagi model dalam keluarga Mistral di bawah kategori premier/perusahaan. Seperti namanya, model ini adalah Model Bahasa Kecil (SLM). Kelebihan menggunakan Mistral Small adalah:
- Penjimatan Kos berbanding LLM Mistral seperti Mistral Large dan NeMo - penurunan harga 80%
- Latensi Rendah - tindak balas lebih pantas berbanding LLM Mistral
- Fleksibel - boleh digunakan merentas persekitaran yang berbeza dengan kurang sekatan ke atas sumber yang diperlukan.
Mistral Small sangat sesuai untuk:
- Tugasan berasaskan teks seperti ringkasan, analisis sentimen dan terjemahan.
- Aplikasi yang memerlukan permintaan kerap disebabkan keberkesanan kosnya
- Tugasan kod dengan latensi rendah seperti semakan dan cadangan kod
Untuk menunjukkan perbezaan latensi antara Mistral Small dan Large, jalankan sel di bawah.
Anda sepatutnya melihat perbezaan masa tindak balas antara 3-5 saat. Juga perhatikan panjang dan gaya respons ke atas arahan yang sama.
import os
endpoint = os.environ["AZURE_INFERENCE_ENDPOINT"]
model_name = "Mistral-small"
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)import os
from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import SystemMessage, UserMessage
from azure.core.credentials import AzureKeyCredential
endpoint = os.environ["AZURE_INFERENCE_ENDPOINT"]
model_name = "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)Berbanding dengan dua model lain yang dibincangkan dalam pelajaran ini, Mistral NeMo adalah satu-satunya model percuma dengan Lesen Apache2.
Ia dianggap sebagai naik taraf kepada LLM sumber terbuka awal dari Mistral, Mistral 7B.
Beberapa ciri lain model NeMo adalah:
-
Tokenisasi lebih cekap: Model ini menggunakan pentoken Tekken berbanding tiktoken yang lebih biasa digunakan. Ini membolehkan prestasi lebih baik untuk lebih banyak bahasa dan kod.
-
Pemantapan: Model asas tersedia untuk pemantapan. Ini membolehkan lebih fleksibiliti untuk kes penggunaan di mana pemantapan mungkin diperlukan.
-
Pemanggilan Fungsi Asli - Seperti Mistral Large, model ini telah dilatih untuk pemanggilan fungsi. Ini menjadikannya unik sebagai salah satu model sumber terbuka pertama yang berbuat demikian.
Dalam contoh ini, kita akan melihat bagaimana Mistral NeMo mengendalikan tokenisasi berbanding Mistral Large.
Kedua-dua contoh menggunakan arahan yang sama tetapi anda sepatutnya melihat NeMo mengembalikan token yang lebih sedikit berbanding Mistral Large.
pip install mistral-common# Import pakej yang diperlukan:
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
# Muatkan pengekod Mistral
model_name = "open-mistral-nemo"
tokenizer = MistralTokenizer.from_model(model_name)
# Pecahkan senarai mesej kepada token
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
# Kira bilangan token
print(len(tokens))# Import pakej yang diperlukan:
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
# Muatkan pengekod Mistral
model_name = "mistral-large-latest"
tokenizer = MistralTokenizer.from_model(model_name)
# Tokenkan senarai mesej
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
# Kira bilangan token
print(len(tokens))Selepas menamatkan pelajaran ini, lihat koleksi Generative AI Learning kami untuk terus meningkatkan pengetahuan anda tentang AI Generatif!
Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.