库名称:transformers
许可证:apache-2.0
支持语言:
- 英语
- 孟加拉语
- 印地语
- 卡纳达语
- 古吉拉特语
- 马拉地语
- 马拉雅拉姆语
- 奥里亚语
- 旁遮普语
- 泰米尔语
- 泰卢固语
基础模型:
- mistralai/Mistral-Small-3.1-24B-Base-2503
基础模型关系:微调
Sarvam-M
模型信息
sarvam-m
是基于 Mistral-Small 构建的多语言、混合推理、纯文本语言模型。该后训练版本相比基础模型实现了显著提升:
- 印度语言基准测试平均提升 20%
- 数学基准测试提升 21.6%
- 编程基准测试提升 17.6%
在印度语言与数学交叉领域表现尤为突出,罗马化印度语言 GSM-8K 基准测试实现了惊人的 86% 提升。
了解更多关于 sarvam-m 的详细信息,请阅读我们的博客文章。
主要特性
-
混合思维模式:单一多功能模型支持"思考"和"非思考"两种模式。思考模式适用于复杂逻辑推理、数学问题和编程任务,非思考模式则用于高效的通用对话。
-
高级印度语言能力:专门针对印度语言与英语进行后训练,体现了真实反映和强调印度文化价值观的特性。
-
卓越推理能力:在编码和数学基准测试中优于大多数同类规模模型,展现出非凡的推理能力。
-
无缝聊天体验:全面支持印度语言的原生文字和罗马化版本,提供流畅易用的多语言对话体验。
快速开始
以下代码片段演示了如何使用 Transformers 运行 sarvam-m
。
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "sarvamai/sarvam-m"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name, torch_dtype="auto", device_map="auto"
)
prompt = "你是谁?你在这个星球上的目的是什么?"
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
enable_thinking=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(**model_inputs, max_new_tokens=8192)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :].tolist()
output_text = tokenizer.decode(output_ids)
if "</think>" in output_text:
reasoning_content = output_text.split("</think>")[0].rstrip("\n")
content = output_text.split("</think>")[-1].lstrip("\n").rstrip("</s>")
else:
reasoning_content = ""
content = output_text.rstrip("</s>")
print("推理内容:", reasoning_content)
print("回复内容:", content)
[!注意]
思考模式推荐使用 temperature=0.5
;非思考模式推荐 temperature=0.2
。
使用 Sarvam API
from openai import OpenAI
base_url = "https://api.sarvam.ai/v1"
model_name = "sarvam-m"
api_key = "您的API密钥"
client = OpenAI(
base_url=base_url,
api_key=api_key,
).with_options(max_retries=1)
messages = [
{"role": "system", "content": "你是一个乐于助人的AI助手"},
{"role": "user", "content": "用简单的术语解释量子计算"},
]
response1 = client.chat.completions.create(
model=model_name,
messages=messages,
reasoning_effort="medium",
max_completion_tokens=4096,
)
print("首次回复:", response1.choices[0].message.content)
messages.extend(
[
{
"role": "assistant",
"content": response1.choices[0].message.content,
},
{"role": "user", "content": "能否用类比说明叠加态?"},
]
)
response2 = client.chat.completions.create(
model=model_name,
messages=messages,
reasoning_effort="medium",
max_completion_tokens=8192,
)
print("后续回复:", response2.choices[0].message.content)
参考API文档:sarvam聊天补全API文档
reasoning_effort
可设置三个值:low
、medium
和 high
以符合OpenAI API规范。设置任一值即可启用sarvam-m的思考模式。
VLLM部署
为简化部署,可使用 vllm>=0.8.5
并创建兼容OpenAI的API端点:vllm serve sarvamai/sarvam-m
。
如需通过Python使用vLLM,可执行以下操作:
from openai import OpenAI
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
messages = [{"role": "user", "content": "为什么42是最好的数字?"}]
response = client.chat.completions.create(model=model, messages=messages)
output_text = response.choices[0].message.content
if "</think>" in output_text:
reasoning_content = output_text.split("</think>")[0].rstrip("\n")
content = output_text.split("</think>")[-1].lstrip("\n")
else:
reasoning_content = ""
content = output_text
print("推理内容:", reasoning_content)
print("回复内容:", content)
messages.append(
{"role": "assistant", "content": output_text}
)