Mistral AI 大模型试用,通过 JS 调用 Chat Completion API 功能

Mistral AI 是一个大模型提供商,它支持强大的商业模型,也提供了一些开源的本地模型。支持国内访问,速度较快。这里学习它的 Chat Completion API 功能,并通过 JS 做一些使用尝试。

注册试用

https://mistral.ai/

打开域名注册,支持使用微软账号登录,支持使用国内电话号码。可试用 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);