Flutter插件mistralai_dart的潜在使用

Flutte插件mistralai_dart的潜在使用

Mistral AI Dart Client

tests mistralai_dart Discord MIT

非官方的Dart客户端,用于Mistral AI API。

注意:Mistral AI API 目前处于封闭测试阶段。您可以在此处申请访问权限:申请访问

功能

  • 由官方Mistral AI OpenAPI规范生成
  • 完全类型安全、文档齐全且经过测试
  • 支持所有平台(包括网页流)
  • 自定义基础URL、头部和查询参数支持(例如HTTP代理)
  • 自定义HTTP客户端支持(例如SOCKS5代理或高级用例)

支持的端点:

  • 聊天完成(支持流式传输)
  • 嵌入
  • 模型

目录

使用方法

有关API的更多信息,请参阅Mistral AI 文档

聊天完成

给定一组构成对话的消息,模型将返回一个响应。

生成聊天完成

final res = await client.createChatCompletion(
  request: ChatCompletionRequest(
    model: ChatCompletionModel.model(ChatCompletionModels.mistralMedium),
    temperature: 0,
    messages: [
      ChatCompletionMessage(
        role: ChatCompletionMessageRole.user,
        content: 'Why is the sky blue?',
      ),
    ],
  ),
);
print(res.choices.first.message?.content);
// 天空为什么是蓝色的?由于一种称为瑞利散射的现象...

ChatCompletionModel 是一个密封类,提供了两种指定模型的方式:

  • ChatCompletionModel.modelId('model-id'): 以字符串形式指定模型ID(例如 'mistral-small')。
  • ChatCompletionModel.model(ChatCompletionModels.mistralMedium): 从 ChatCompletionModels 枚举中选择可用模型的一个值。

目前可用的模型有:

  • mistral-tiny: Mistral 7B Instruct v0.2(Mistral 7B Instruct 的次要版本)。仅适用于英语,并在MT-Bench上获得7.6分。
  • mistral-small: Mixtral 8x7B。掌握英语/法语/意大利语/德语/西班牙语和代码,并在MT-Bench上获得8.3分。
  • mistral-medium: 当前性能最好的原型模型之一,基于标准基准测试。掌握英语/法语/意大利语/德语/西班牙语和代码,并在MT-Bench上获得8.6分。

请注意,此列表可能不是最新的。有关更新列表,请参阅Mistral AI 文档

流式传输聊天完成

final stream = client.createChatCompletionStream(
  request: const ChatCompletionRequest(
    model: ChatCompletionModel.model(ChatCompletionModels.mistralMedium),
    temperature: 0,
    messages: [
      ChatCompletionMessage(
        role: ChatCompletionMessageRole.user,
        content: 'Why is the sky blue?',
      ),
    ],
  ),
);
String text = '';
await for (final res in stream) {
  text += res.choices.first.delta.content?.trim() ?? '';
}
print(text);
// 天空为什么是蓝色的?由于一种称为瑞利散射的现象...

嵌入

给定一个提示,模型将生成一个表示该提示的嵌入。

生成嵌入

final generated = await client.createEmbedding(
  request: const EmbeddingRequest(
    model: EmbeddingModel.model(EmbeddingModels.mistralEmbed),
    input: ['Why is the sky blue?'],
  ),
);
print(generated.data.first.embedding);
// [-0.0182342529296875, 0.03594970703125, 0.0286102294921875, ...]

EmbeddingModel 是一个密封类,提供了两种指定模型的方式:

  • EmbeddingModel.modelId('model-id'): 以字符串形式指定模型ID(例如 'mistral-embed')。
  • EmbeddingModel.model(EmbeddingModels.mistralEmbed): 从 EmbeddingModels 枚举中选择可用模型的一个值。

目前可用的模型有:

  • mistral-embed: 一个具有1024维嵌入空间的嵌入模型,旨在提高检索能力。它在MTEB上获得了55.26的检索分数。

模型

列出模型

列出可用的模型。

final res = await client.listModels();
print(res.data);
// [Model(id: mistral-medium, object: model, created: 1702396611, ownedBy: mistralai), ...]

进阶用法

默认HTTP客户端

默认情况下,客户端使用 https://api.mistral.ai/v1 作为 baseUrl 和以下 http.Client 实现:

  • 非网页环境:IOClient
  • 网页环境:FetchClient(为了支持网页流)

自定义HTTP客户端

你可以始终提供你自己的 http.Client 实现以进行进一步的定制:

final client = MistralAIClient(
  apiKey: 'MISTRAL_API_KEY',
  client: MyHttpClient(),
);

使用代理

HTTP代理

你可以通过覆盖 baseUrl 并提供所需的 headers 来使用你的HTTP代理:

final client = MistralAIClient(
  baseUrl: 'https://my-proxy.com',
  headers: {
      'x-my-proxy-header': 'value',
  },
);

如果你需要进一步的定制,你可以始终提供你自己的 http.Client

SOCKS5代理

要使用SOCKS5代理,你可以使用 socks5_proxy 包:

final baseHttpClient = HttpClient();
SocksTCPClient.assignToHttpClient(baseHttpClient, [
  ProxySettings(InternetAddress.loopbackIPv4, 1080),
]);
final httpClient = IOClient(baseClient);

final client = MistralAIClient(
  client: httpClient,
);

更多关于Flutter插件mistralai_dart的潜在使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件mistralai_dart的潜在使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


针对您提到的Flutter未知功能插件 mistralai_dart,由于这是一个假定的、未具体描述的插件,我无法提供确切的使用案例或代码,因为实际的功能和API接口未知。不过,我可以展示一个假设性的Flutter插件使用范例,以帮助您理解如何集成和使用一个Flutter插件。

假设 mistralai_dart 插件提供了一些与AI或机器学习相关的功能,比如文本分析或图像识别。以下是一个假设性的代码示例,展示如何在Flutter项目中集成和使用这个插件:

  1. pubspec.yaml 文件中添加依赖
dependencies:
  flutter:
    sdk: flutter
  mistralai_dart: ^x.y.z  # 假设的版本号

请注意,这里的 ^x.y.z 需要替换为实际的版本号,但由于 mistralai_dart 是假设的,所以版本号也是假设的。

  1. lib 目录下创建一个 Dart 文件,例如 main.dart,并编写以下代码:
import 'package:flutter/material.dart';
import 'package:mistralai_dart/mistralai_dart.dart';  // 假设的导入语句

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Mistralai Dart Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String result = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mistralai Dart Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Enter text to analyze:',
            ),
            TextField(
              onChanged: (value) {
                // 这里可以调用插件的某个方法进行分析
                analyzeText(value);
              },
            ),
            SizedBox(height: 20),
            Text(
              'Result: $result',
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 假设的按钮点击事件,可以触发插件的某个功能
          // 例如,启动一个图像识别任务
          startImageRecognition();
        },
        tooltip: 'Analyze',
        child: Icon(Icons.analyze),
      ),
    );
  }

  // 假设的分析文本方法
  Future<void> analyzeText(String text) async {
    try {
      // 假设插件提供了一个名为 analyzeText 的方法
      var analysisResult = await MistralaiDart.analyzeText(text);
      setState(() {
        result = analysisResult.toString();
      });
    } catch (e) {
      print('Error analyzing text: $e');
    }
  }

  // 假设的启动图像识别方法
  Future<void> startImageRecognition() async {
    try {
      // 这里需要一些机制来选择或获取图像,例如使用图像选择器插件
      // 但为了简化,我们假设插件提供了一个名为 recognizeImage 的静态方法
      // 并且该方法接受一个图像文件的路径作为参数
      // 注意:这只是一个假设,实际插件可能有不同的API
      var imagePath = 'path/to/image.jpg';  // 假设的图像路径
      var recognitionResult = await MistralaiDart.recognizeImage(imagePath);
      // 处理识别结果...
      print('Recognition Result: $recognitionResult');
    } catch (e) {
      print('Error recognizing image: $e');
    }
  }
}

注意

  • 上面的代码完全基于假设,因为 mistralai_dart 插件的具体功能和API是未知的。
  • 在实际使用中,您需要查阅插件的官方文档或源代码来了解其具体的API和使用方法。
  • 插件可能包含更多的配置选项、错误处理机制等,这些都需要根据插件的实际文档进行实现。

如果您有具体的插件或功能需求,建议查找现有的Flutter插件或考虑自己开发一个满足需求的插件。

回到顶部