Flutter深度搜索功能插件deepseek_client的使用

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

Flutter深度搜索功能插件deepseek_client的使用

深度介绍

DeepSeek Base Client 是一个用于与 DeepSeek API 进行交互的非官方 Dart 客户端库,提供了发送消息并接收来自 DeepSeek 服务响应的功能。

特性

消息发送: 轻松地向 DeepSeek 服务发送消息,并处理响应。

模型选择: 支持不同的模型(如 chatcoder)以适应不同的上下文,从而定制 AI 的响应。

开始使用

前提条件

获取 API 密钥: 在 DeepSeek 平台 上注册以获取您的 API 密钥。作为注册的一部分,您将免费获得 400 万令牌。

传递 API 密钥: 将获取到的 API 密钥通过 deepseek_token 环境变量传递给您的 Dart 应用程序。这可以通过在操作系统中设置环境变量或在启动应用程序时使用 --dart-define 标志来实现。

安装

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

dependencies:
  deepseek_client: ^latest_version

^latest_version 替换为 pub.dev 上的实际最新版本。

示例代码

以下是一个简单的示例,演示如何使用 DeepSeekApiClient 发送消息并打印响应:

import 'package:deepseek/deepseek_client.dart';

void main() async {
  final response = await DeepSeekClient.sendMessage(
    messages: [
      Message(content: "Hello, how can I assist you?", role: "system"),
    ],
    model: DeekSeekModels.chat,
  );

  print(response.choices.first.message.content);
}

Flutter 示例

这是一个完整的 Flutter 示例,展示了如何使用 deepseek_client 插件创建一个聊天界面。请注意,这是一个非官方实现,使用时应谨慎。务必确保进行充分的审查和测试后再将其集成到生产环境中。

import 'package:deepseek/deepseek_client.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DeepSeek Chat',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const DeepSeepChat(),
    );
  }
}

class DeepSeepChat extends StatefulWidget {
  const DeepSeepChat({super.key});

  [@override](/user/override)
  DeepSeepChatState createState() => DeepSeepChatState();
}

class DeepSeepChatState extends State<DeepSeepChat> {
  final TextEditingController _controller = TextEditingController();
  DeekSeekModels model = DeekSeekModels.chat;
  bool isLoading = false;
  final List<Message> _messages = [
    Message(content: "You are a helpful assistant", role: "system")
  ];
  String? _response;

  Future<void> _sendMessage() async {
    isLoading = true;
    _messages.add(Message(role: 'user', content: _controller.text));
    _controller.clear();
    setState(() {});
    final nonStream = await DeepSeekClient.sendMessage(messages: _messages, model: model);
    _response = nonStream.choices?.first.message?.content;
    _messages.add(Message(content: _response!, role: "assistant"));
    isLoading = false;
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(
          title: const Text('DeepSeek Chat'),
          actions: [
            IconButton(
              icon: const Icon(Icons.settings),
              onPressed: () {
                showMenu(
                  context: context,
                  position: const RelativeRect.fromLTRB(25.0, 25.0, 0.0, 0.0),
                  items: DeekSeekModels.values
                      .map(
                        (e) => PopupMenuItem(
                          value: e.name,
                          child: Row(
                            children: [
                              if (model == e) const Icon(Icons.done),
                              Text(e.name),
                            ],
                          ),
                        ),
                      )
                      .toList(),
                ).then((value) {
                  if (value == 'chat') {
                    setState(() {
                      model = DeekSeekModels.chat;
                    });
                  } else if (value == 'coder') {
                    setState(() {
                      model = DeekSeekModels.coder;
                    });
                  }
                });
              },
            ),
          ],
        ),
        body: Column(
          children: [
            Expanded(
              child: ListView.builder(
                reverse: true,
                itemCount: _messages.length + 1,
                itemBuilder: (context, index) {
                  if (index == _messages.length) {
                    return Container();
                  } else {
                    final message = _messages.reversed.toList()[index];
                    if (message.role == "system") {
                      return const SizedBox.shrink();
                    }
                    return ListTile(
                      title: MarkdownBody(data: message.content),
                      subtitle: Text(message.role),
                    );
                  }
                },
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: TextField(
                controller: _controller,
                decoration: InputDecoration(
                    hintText: 'Type a message...',
                    border: const OutlineInputBorder(),
                    suffixIcon: Visibility(
                      visible: isLoading,
                      replacement: IconButton(
                        icon: const Icon(Icons.send),
                        onPressed: _sendMessage,
                      ),
                      child: Transform.scale(
                        scale: 0.5,
                        child: const CircularProgressIndicator(),
                      ),
                    )),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter深度搜索功能插件deepseek_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter深度搜索功能插件deepseek_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中的deepseek_client插件的使用,这里提供一个简单的代码案例来展示如何实现深度搜索功能。deepseek_client是一个假定的插件名称,用于说明目的,因为实际上可能没有名为deepseek_client的官方插件。不过,我们可以基于常见的搜索功能插件的概念来模拟一个实现。

假设deepseek_client提供了基本的搜索API,我们可以按照以下步骤在Flutter应用中集成并使用它:

  1. 添加依赖:首先,在你的pubspec.yaml文件中添加deepseek_client依赖(注意:这里假设该插件存在,实际使用时需要替换为真实存在的插件)。
dependencies:
  flutter:
    sdk: flutter
  deepseek_client: ^x.y.z  # 替换为实际版本号
  1. 导入插件:在你的Dart文件中导入该插件。
import 'package:deepseek_client/deepseek_client.dart';
  1. 初始化插件并搜索:使用插件提供的API进行搜索操作。以下是一个简单的示例,展示了如何初始化插件并执行搜索。
import 'package:flutter/material.dart';
import 'package:deepseek_client/deepseek_client.dart';

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

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

class DeepSearchScreen extends StatefulWidget {
  @override
  _DeepSearchScreenState createState() => _DeepSearchScreenState();
}

class _DeepSearchScreenState extends State<DeepSearchScreen> {
  final TextEditingController _searchController = TextEditingController();
  List<SearchResult> _results = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Deep Search Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: <Widget>[
            TextField(
              controller: _searchController,
              decoration: InputDecoration(
                prefixIcon: Icon(Icons.search),
                hintText: 'Search...',
                suffixIcon: IconButton(
                  icon: Icon(Icons.search),
                  onPressed: _performSearch,
                ),
              ),
            ),
            SizedBox(height: 16),
            Expanded(
              child: _results.isEmpty
                  ? Center(child: Text('No results found.'))
                  : ListView.builder(
                      itemCount: _results.length,
                      itemBuilder: (context, index) {
                        final result = _results[index];
                        return ListTile(
                          title: Text(result.title),
                          subtitle: Text(result.description),
                        );
                      },
                    ),
            ),
          ],
        ),
      ),
    );
  }

  void _performSearch() async {
    setState(() {
      _results = [];
    });

    final searchQuery = _searchController.text;
    if (searchQuery.isEmpty) return;

    try {
      // 假设deepseek_client提供了一个search方法
      final searchResults = await DeepseekClient.search(searchQuery);
      setState(() {
        _results = searchResults;
      });
    } catch (e) {
      print('Error performing search: $e');
    }
  }
}

// 假设DeepseekClient和SearchResult类如下
class DeepseekClient {
  static Future<List<SearchResult>> search(String query) async {
    // 这里应该是实际的网络请求或数据查询逻辑
    // 这里只是模拟返回一些结果
    return [
      SearchResult(title: 'Result 1', description: 'Description for Result 1'),
      SearchResult(title: 'Result 2', description: 'Description for Result 2'),
      // ...更多结果
    ];
  }
}

class SearchResult {
  final String title;
  final String description;

  SearchResult({required this.title, required this.description});
}

注意

  • 上面的代码是一个假设性的示例,用于展示如何在Flutter应用中集成并使用一个假设的搜索插件。
  • 在实际使用中,你需要根据deepseek_client插件的实际API文档来调整代码。
  • 如果deepseek_client是一个网络请求插件,那么DeepseekClient.search方法内部可能会涉及到HTTP请求,你需要处理网络异常和错误。
  • 你可能还需要处理搜索结果的分页、排序等高级功能,这取决于deepseek_client插件提供的功能。
回到顶部