Mistral AI 是一个大模型提供商,它支持强大的商业模型,也提供了一些开源的本地模型。支持国内访问,速度较快。这里学习它的 Chat Completion API 功能,并通过 JS 做一些使用尝试。
注册试用
打开域名注册,支持使用微软账号登录,支持使用国内电话号码。可试用 14 天。
安装 JS SDK
https://www.npmjs.com/package/@mistralai/mistralai
import MistralClient from '@mistralai/mistralai';
const apiKey = process.env.MISTRAL_API_KEY || 'your_api_key';
const client = new MistralClient(apiKey);
使用 prompt 向 AI 提问
尝试最基础的 AI 使用场景,就是使用 prompt 提问。
- 通过 model 指定模型
- 通过 messages 指定角色和发送的消息
- 通过 temperature 字段设置随机性,接近 1 时答更随机,接近 0 时更具确定性。比如设置为 0.5 ,使其在创造性和可预测性之间取得平衡
const chatRes = await client.chat({
model: 'mistral-tiny',
messages: [
{
// 用户角度发送的消息
role: 'user',
content: '你是资深的前端工程师,请问如何学习 canvas ?'
}
],
temperature: 0.5
})
console.log(chatRes.choices[0].message.content);
通过系统角色提供说明
指定 role: 'system',
,通过系统角色向模型发送消息,为模型提供说明或提示,可影响模型的响应。比如这样设置,用户只需要问简单的问题,都会同时给他一个详细的语法解释。
const chatRes = await client.chat({
model: 'mistral-tiny',
messages: [
{
// 通过系统角色向模型发送消息,为模型提供说明或提示
role: 'system',
content: '你是一位专业的英语老师,当谈及英语问题,请回答问题,并详细解释涉及的语法知识。'
},
{
// 用户角度发送的消息
role: 'user',
content: '请问“我今天开始学英语”用英语怎么说。'
}
],
temperature: 0.5
})
console.log(chatRes.choices[0].message.content);
流式返回
支持流式返回,提升 chat 类应用的用户体验。可结合流式响应返回给前端。
const chatRes = await client.chatStream({
...
})
for await (const chunk of chatRes) {
process.stdout.write(chunk.choices[0].delta.content);
}
可将其封装到 express 接口中:
res.setHeader('Content-Type', 'text/plain');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const chatRes = await client.chatStream({
// ...
})
for await (const part of response) {
res.write(chunk.choices[0].delta.content); // 流式传输
}
res.end(); // 结束 HTTP 响应
指定返回 json 格式
指定 responseFormat 返回 json 格式,方便直接应用于程序中。
比如将这个英语提问组装为 json 格式,方便在回答的同时整理涉及的单词,应用到回答下方的单词界面中。
const chatRes = await client.chat({
model: 'mistral-tiny',
messages: [
{
// 通过系统角色向模型发送消息,为模型提供说明或提示
role: 'system',
content: `
你是一位专业的英语老师,面向中文学生,请回答问题。
请通过 json 对象格式返回,包含以下字段;
1. message 字段是一个字符串,是问题本身的答案,并使用中文来进行辅助性的解释;
2. words 字段一个对象数组,列出涉及的单词,音标和单词中文释义,字段为 word 单词本身、phonetic 音标、description 详细解释;
`
},
{
// 用户角度发送的消息
role: 'user',
content: '请问“我今天开始学英语”用英语怎么说。'
}
],
temperature: 1,
responseFormat: {
type: 'json_object'
}
})
console.log(chatRes.choices[0].message.content);