Flutter AI功能集成插件together_ai_sdk的使用

Flutter AI功能集成插件together_ai_sdk的使用

Together AI Dart Package

Together AI Dart 包提供了一种方便的方式,使用 Dart 与 Together AI API 进行交互。它提供了简单直观的接口,用于生成文本、图像等,支持多种 AI 模型。

功能

  • 简单易用的 API 用于生成文本和图像
  • 支持多种 AI 模型,包括聊天和图像生成模型
  • 与 Together AI API 无缝集成
  • 强大的错误处理,带有详细的错误信息
  • 使用实体模型的强类型响应
  • 基于枚举的模型选择,确保类型安全和代码可读性

安装

pubspec.yaml 文件中添加以下依赖项:

dependencies:
  together_ai_sdk: ^2.0.2

然后运行 dart pub get 来获取包。

使用

首先,在 Dart 代码中导入包:

import 'package:together_ai_sdk/together_ai_sdk.dart';
安全声明

⚠️ 重要:API 密钥安全 ⚠️

  • 永远不要在客户端代码中暴露你的 API 密钥TogetherAISdk 的初始化不应直接在分发给最终用户的移动或 Web 应用程序中进行。
  • 使用环境变量 存储 API 密钥以进行开发和测试。永远不要将这些密钥提交到版本控制系统中。
初始化 Together AI SDK

创建一个 TogetherAISdk 类的实例,并传入你的 API 密钥和所需的模型:

final togetherAI = TogetherAISdk('YOUR_API_KEY');
生成聊天

使用 chatCompletion 方法生成文本:

final chatResponse = await togetherAI.chatCompletion([
  {'role': 'system', 'content': 'You are a helpful'},
  {'role': 'user', 'content': 'Once upon a'},
], ChatModel.qwen15Chat72B);

print(chatResponse);
使用流生成聊天

使用 streamResponse 方法生成流:

final chatResponse = await togetherAI.streamResponse([
  {'role': 'system', 'content': 'You are a helpful AI assistant'},
  {'role': 'user', 'content': 'Tell me a cyberpunk story'},
], ChatModel.qwen15Chat72B);

print(chatResponse);
使用视觉模型生成聊天

使用 visionChatCompletion 方法生成文本:

String imagePath = '/path/to/your_image_name.jpeg';

// 将图像转换为 base64
String base64ImageUrl = await imageToBase64(imagePath);

// 消息对象是一个包含角色和内容键的映射列表
final messages = [
  {'role': 'system', 'content': 'You are a helpful AI'},
  {
    'role': 'user',
    'content': [
      {'type': 'text', 'text': 'What\'s in this image?'},
      {
        'type': 'image_url',
        'image_url': {'url': base64ImageUrl}
      }
    ]
  },
];

// 请使用 ChatVision 模型
// LlamaVFree 是免费模型之一

final chatVisionResponse = await togetherAI.visionChatCompletion(
    messages, ChatVisionModel.llama3290BV);

print(chatVisionResponse);
生成文本

使用 textCompletion 方法生成文本:

final textResponse = await togetherAI.textCompletion(
    'Once upon a', LanguageModel.qwen1572B);

print(textResponse);
简单对话记忆类

使用 ConversationBufferWindowMemoryConversationBufferMemory 类来管理对话历史:

ConversationMemory memory = ConversationBufferWindowMemory(4);
memory.addMessage(chatResponse.choices[0].message);

print(memory.getMessages());

// 输出示例:
// [{role: assistant, content: Diverse, multicultural, modern, cosmopolitan, city-state, financial hub, green spaces, food paradise, vibrant nightlife, 狮城。}]
生成图像

使用 imageGeneration 方法生成图像:

final imageResponse = await togetherAI.imageGeneration(
    'Group of cats', imageModel: ImageModel.stableDiffusionXL1_0);

print(imageResponse);

请注意,目前只支持一个模型:

  • stabilityai/stable-diffusion-xl-base-1.0
错误处理

Together AI Dart 包提供了全面的错误处理。如果在 API 请求期间发生错误,将抛出 TogetherAIError 实例。你可以根据错误代码捕获并处理特定类型的错误:

try {
  final response = await togetherAI.chatCompletion(...);
  // 处理响应
} on TogetherAIError catch (error) {
  if (error is AuthenticationError) {
    // 处理认证错误
  } else if (error is BadRequest) {
    // 处理请求错误
  } else {
    // 处理其他错误
  }
}

模型

Together AI Dart 包支持多种聊天和图像生成模型。你可以在 enum_ai_models.dart 文件中找到可用的模型,该文件位于 common 文件夹中。如果你发现有缺失的模型,请告知我。

冲突

如果你的现有代码库中存在冲突,请使用 as 关键字导入 SDK。

贡献

欢迎对 Together AI Dart 包进行贡献!如果你发现任何问题或有改进建议,请在 GitHub 仓库中提交问题或拉取请求。

许可证

此包发布在 MIT 许可证下。


完整示例 Demo

以下是一个完整的示例,展示了如何在 Flutter 项目中使用 together_ai_sdk 插件:

import 'package:flutter/material.dart';
import 'package:together_ai_sdk/together_ai_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final TextEditingController _controller = TextEditingController();
  String _response = '';

  // 初始化 TogetherAISdk
  final TogetherAISdk togetherAI = TogetherAISdk('YOUR_API_KEY');

  Future<void> _generateText() async {
    try {
      final textResponse = await togetherAI.textCompletion(
          _controller.text, LanguageModel.qwen1572B);
      setState(() {
        _response = textResponse.choices[0].text;
      });
    } catch (e) {
      setState(() {
        _response = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Together AI Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              decoration: InputDecoration(labelText: 'Enter prompt'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _generateText,
              child: Text('Generate Text'),
            ),
            SizedBox(height: 20),
            Text(_response),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter AI功能集成插件together_ai_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter AI功能集成插件together_ai_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用together_ai_sdk插件来实现AI功能的示例代码。请注意,实际使用时需要确保你已经在pubspec.yaml文件中添加了together_ai_sdk依赖,并且已经运行了flutter pub get

1. 添加依赖

首先,在pubspec.yaml文件中添加together_ai_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  together_ai_sdk: ^latest_version  # 替换为实际的最新版本号

2. 导入插件

在你的Flutter项目的Dart文件中导入together_ai_sdk

import 'package:together_ai_sdk/together_ai_sdk.dart';

3. 初始化插件

在使用之前,通常需要对插件进行初始化。这通常涉及到配置API密钥或其他必要的参数。假设together_ai_sdk需要初始化API密钥,你可以这样做:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Together AI SDK
  await TogetherAiSdk.instance.initialize('your_api_key_here');

  runApp(MyApp());
}

4. 使用AI功能

假设together_ai_sdk提供了一个文本识别功能,你可以这样调用它:

import 'package:flutter/material.dart';
import 'package:together_ai_sdk/together_ai_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await TogetherAiSdk.instance.initialize('your_api_key_here');

  runApp(MyApp());
}

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

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

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

  Future<void> recognizeText(String imagePath) async {
    try {
      var result = await TogetherAiSdk.instance.recognizeText(imagePath: imagePath);
      setState(() {
        recognizedText = result.text;
      });
    } catch (e) {
      print('Error recognizing text: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter AI Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Recognized Text:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 10),
            Text(
              recognizedText,
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 假设你有一个图像路径
                String imagePath = 'path/to/your/image.jpg';
                await recognizeText(imagePath);
              },
              child: Text('Recognize Text from Image'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. API密钥:确保你已经获得了有效的API密钥,并将其替换到初始化代码中。
  2. 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,以处理网络错误、API限制等问题。
  3. 图像路径:在上面的示例中,imagePath是硬编码的。在实际应用中,你可能需要从用户那里获取图像,例如通过文件选择器或相机。
  4. 插件文档:由于插件的具体API和功能可能会变化,建议查阅最新的together_ai_sdk文档(假设它存在于pub.dev上)以获取最准确的信息。

希望这个示例能帮助你理解如何在Flutter项目中集成和使用together_ai_sdk插件。如果你有更具体的需求或问题,请随时提问!

回到顶部