Flutter聊天机器人插件another_chatgpt的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter聊天机器人插件another_chatgpt的使用

another_chatgpt 是一个用于实现OpenAI API的Flutter插件。通过它,你可以轻松地在你的Flutter应用中集成聊天机器人功能。

使用方法

该插件的主要入口点是 GptClient 类,所有已实现的API都通过它暴露出来。

// 初始化GptClient
GptClient client = GptClient(organizationId: AppKeys.orgId, apiKey: AppKeys.apiKey);

// 创建聊天请求对象
GptChatCompletionRequest chatCompletionRequest = GptChatCompletionRequest(model: "gpt-3.5-turbo-16k", messages: messages);

// 发起聊天请求并获取响应
GptCompletion completionResponse = await client.createChatCompletion(request: chatCompletionRequest);

助手对话管理

AssistantConversation 类提供了与单个AI助手进行对话的帮助工具。

// 初始化助手对话对象
AssistantConversation conversation = AssistantConversation(client: client, assistantId: "");

// 监听状态更新
conversation.getProgress().listen((progress) {
    print("Status: ${progress.status}");
    // 当任务完成、取消或过期时,打印消息
    if(progress.status == GptRunStatus.completed || progress.status == GptRunStatus.cancelled || progress.status == GptRunStatus.expired) {
        print(progress.messages);
    }
});

// 向助手发送消息
conversation.postMessage(content: "What does the lifelink ability do?");

完整示例Demo

以下是一个完整的示例,展示了如何使用 another_chatgpt 插件来创建一个简单的聊天机器人界面。

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

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

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

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

class _ChatScreenState extends State<ChatScreen> {
  final List<Map<String, dynamic>> _messages = [];
  late AssistantConversation _conversation;
  late GptClient _client;

  [@override](/user/override)
  void initState() {
    super.initState();
    
    // 初始化GptClient
    _client = GptClient(organizationId: AppKeys.orgId, apiKey: AppKeys.apiKey);
    
    // 初始化助手对话对象
    _conversation = AssistantConversation(client: _client, assistantId: "");
    
    // 监听状态更新
    _conversation.getProgress().listen((progress) {
      setState(() {
        _messages.add({
          'isUser': false,
          'text': progress.messages.toString()
        });
      });
    });
  }

  void _sendMessage(String content) async {
    // 添加用户消息到消息列表
    setState(() {
      _messages.add({'isUser': true, 'text': content});
    });

    // 向助手发送消息
    await _conversation.postMessage(content: content);

    // 清空输入框
    // 这里假设你有一个TextEditingController来管理输入框的内容
    // textEditingController.clear();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with AI'),
      ),
      body: Column(
        children: [
          Expanded(
            child: ListView.builder(
              itemCount: _messages.length,
              itemBuilder: (context, index) {
                final message = _messages[index];
                return ListTile(
                  title: Text(message['text']),
                  trailing: message['isUser'] ? Icon(Icons.person) : null,
                );
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Row(
              children: [
                Expanded(
                  child: TextField(
                    decoration: InputDecoration(hintText: 'Type a message...'),
                    onSubmitted: (value) => _sendMessage(value),
                  ),
                ),
                IconButton(
                  icon: Icon(Icons.send),
                  onPressed: () {
                    // 假设TextField有一个controller
                    // String userInput = textEditingController.text;
                    // _sendMessage(userInput);
                  },
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter聊天机器人插件another_chatgpt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter聊天机器人插件another_chatgpt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于在Flutter项目中使用another_chatgpt插件来实现聊天机器人功能,下面是一个简单的代码案例,展示如何集成和使用该插件。请注意,another_chatgpt插件的具体API和使用方法可能会根据插件版本有所不同,因此请参考最新的官方文档进行调整。

首先,确保你已经在pubspec.yaml文件中添加了another_chatgpt依赖:

dependencies:
  flutter:
    sdk: flutter
  another_chatgpt: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤实现聊天机器人功能:

  1. 导入插件

在你的Dart文件中导入another_chatgpt插件:

import 'package:another_chatgpt/another_chatgpt.dart';
  1. 配置API密钥

在使用another_chatgpt之前,你需要获取一个API密钥(这通常涉及到注册一个账户并获取API访问权限)。然后,在代码中配置这个密钥:

// 假设你的API密钥存储在环境变量或常量中
const String apiKey = '你的API密钥';
  1. 初始化ChatGPT客户端

使用你的API密钥初始化ChatGPT客户端:

ChatGPTClient chatGPTClient = ChatGPTClient(apiKey: apiKey);
  1. 发送请求并处理响应

现在你可以使用chatGPTClient来发送聊天请求并处理响应了。以下是一个简单的示例,展示如何发送一个问题并打印出回答:

void sendMessageToChatBot(String message) async {
  try {
    // 发送请求到ChatGPT服务器
    ChatGPTResponse response = await chatGPTClient.sendMessage(message);
    
    // 打印出ChatGPT的回答
    print('ChatGPT Response: ${response.data?.choices?.first?.text ?? 'No response'}');
  } catch (e) {
    // 处理异常
    print('Error: $e');
  }
}
  1. 在UI中调用

你可以在Flutter的UI组件中调用这个函数,比如在一个按钮点击事件中:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatScreen(),
    );
  }
}

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with ChatGPT'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Expanded(
              child: ListView.builder(
                // 这里你可以添加之前的聊天记录UI
                itemCount: 0,  // 假设这里没有保存聊天记录
                itemBuilder: (_, index) => Container(),  // 占位符
              ),
            ),
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Send a message',
              ),
              onSubmitted: (value) {
                sendMessageToChatBot(value);
                _controller.clear();
              },
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _controller.text.isNotEmpty
              ? sendMessageToChatBot(_controller.text)
              : ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Message cannot be empty')),
                );
          _controller.clear();
        },
        tooltip: 'Send',
        child: Icon(Icons.send),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的聊天界面,用户可以在文本字段中输入消息,然后点击发送按钮或按下回车键来发送消息给ChatGPT,并在控制台中打印出ChatGPT的响应。请注意,这只是一个基本的示例,实际应用中你可能需要更复杂的UI和错误处理逻辑。

再次强调,由于another_chatgpt插件的具体API可能会变化,请参考最新的官方文档和示例代码进行集成。

回到顶部