Flutter性能监控与分析插件dash_agent的使用

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

Flutter性能监控与分析插件dash_agent的使用

Dash Agent 是一个框架,它允许你在 CommandDash 市场创建并发布代理。

开始使用

你可以使用 dash-cli 创建一个新的 Dash Agent,它会自动为你创建一个起始项目。

dart pub global activate dash-cli

激活 CLI 后,运行以下命令来创建你的代理项目。将 {{agent}} 替换为代理的唯一名称。

dash_cli create {{agent}}

使用方法

该包包含了创建 Dash Agent 的构建块:

AgentConfiguration

AgentConfiguration 是框架的主要部分,用于粘合代理配置。以下是 AgentConfiguration 的示例:

class MyAgent extends AgentConfiguration {
  final docsSource = DocsDataSource();
  final blogsSource = BlogsDataSource();

  [@override](/user/override)
  List<DataSource> get registerDataSources => [docsSource, blogsSource];

  [@override](/user/override)
  List<Command> get registerSupportedCommands =>
      [AskCommand(docsSource: docsSource)];

  [@override](/user/override)
  Metadata get metadata => Metadata(
    name: 'My Agent',
    avatarProfile: 'assets/images/agent_avatar.png',
    tags: ['flutter', 'dart'],
  );

  [@override](/user/override)
  String get registerSystemPrompt => '''
  你是一个 Flutter 专家,负责回答用户关于框架的问题。
  
  注意:
  1. 如果引用无法解决问题,请说:“我无法从文档源获取答案,但我将尝试用自己的知识回答。”
  2. 答案要真实、完整且详细,并在必要时包含代码片段
  ''';
}

上述 AgentConfiguration 注册了数据源、支持的命令、元数据和系统提示。

  • DataSource: 数据源是提供代理所需信息的关键。这可以是官方文档、博客文章、代码示例甚至自定义知识库。在上面的例子中,docsSourceblogsSource 表示潜在的数据源。
  • Command: 命令定义了代理可以执行的特殊任务。这些是更复杂任务的构建块。示例使用了 AskCommand,允许代理根据提供的 docsSource 回答用户的查询。
  • Metadata: 元数据提供了有关代理的信息,如名称、显示头像和关联标签。这有助于用户了解代理的功能及其用途。
  • System Prompt: 系统提示为代理设置了初始上下文。这就像给代理指令或定义其人格。在这个例子中,提示明确说明了代理是一个 Flutter 专家,如何处理响应以及其答案的详细程度。

DataSource

如上所述,数据源使你能够附加代理执行任务所需的任何数据。它可以是文件、目录、JSON、网页甚至仓库中的数据。

class DocsDataSource extends DataSource {
  [@override](/user/override)
  List<FileDataObject> get fileObjects => [
    FileDataObject.fromFile(File('your_file_path')),
    FileDataObject.fromDirectory(Directory('directory_path_to_data_source'))
  ];

  [@override](/user/override)
  List<ProjectDataObject> get projectObjects => [
    ProjectDataObject.fromText('Data in form of raw text')
  ];

  [@override](/user/override)
  List<WebDataObject> get webObjects => [
    WebDataObject.fromWebPage('https://sampleurl.com'),
    WebDataObject.fromWebPage('https://sampleurl.com', deepCrawl: true), // 索引 sampleurl.com 的所有页面
    WebDataObject.fromSiteMap('https://sampleurl.com/sitemap.xml'),
    WebDataObject.fromGithub('https://github.com/user/repo', '<personal access token>', codeFilter: CodeFilter(pathRegex: '.*\.dart'),  issueFilter: IssueFilter(labels: ['bug']))
  ];
}

注意:目前仅支持存储文本文件,如代码、markdown 或原始文本。

Commands

命令是你希望代理执行的专门任务(例如重构、代码生成、代码分析等)。一旦代理发布,用户可以在 Command Dash 客户端(如 VS Code 扩展)中调用此命令并使用。

class AskCommand extends Command {
  AskCommand({required this.docsSource});

  final DataSource docsSource;

  // 输入
  final userQuery = StringInput('您的查询');
  final codeAttachment = CodeInput('代码附件');
  
  // 命令的唯一标识符
  [@override](/user/override)
  String get slug => '/ask';

  // 命令的简短描述
  [@override](/user/override)
  String get intent => '问我任何问题';

  // 在命令生命周期中使用的 `DashInput` 列表
  [@override](/user/override)
  List<DashInput> get registerInputs => [userQuery, codeAttachment];

  // 命令完成任务所需执行的一系列操作
  [@override](/user/override)
  List<Step> get steps {
    // 输出
    final matchingDocuments = MatchDocumentObject();
    final queryOutput = QueryOutput();

    return [
      MatchingDocumentStep(
          query: '$userQuery$codeAttachment',
          dataSources: [docsSource],
          output: matchingDocuments),
      PromptQueryStep(
          prompt: '''
          你是一个 X 代理。
          
          这是 $userQuery,这里是文档引用:$matchingDocuments。
          
          回答用户的查询。
          ''',
          postProcessKind: PostProcessKind.raw,
          output: queryOutput),
      AppendToChatStep(
          value: '这是您的查询:$userQuery,这是您的输出:$queryOutput'),
    ];
  }

  // 当命令被调用时向用户显示的短语
  [@override](/user/override)
  String get textFieldLayout => "你好,我在这里帮助你。$userQuery $codeAttachment";
}

更多关于Flutter性能监控与分析插件dash_agent的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter性能监控与分析插件dash_agent的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用性能监控与分析插件 dash_agent 的示例代码和步骤。请注意,此示例假设您已经有一个Flutter项目,并且熟悉基本的Flutter开发流程。

步骤一:添加依赖

首先,您需要在您的 pubspec.yaml 文件中添加 dash_agent 依赖。确保您的依赖项部分如下所示:

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

然后,运行以下命令来安装依赖:

flutter pub get

步骤二:初始化 Dash Agent

在您的应用的主入口文件(通常是 main.dart)中,初始化 DashAgent。您需要在应用的 MaterialAppCupertinoApp 之外进行初始化,以确保它在整个应用生命周期内都可用。

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

void main() {
  // 初始化 Dash Agent
  DashAgent.initialize(
    apiKey: '您的Dash API密钥',  // 替换为您从Dash平台获取的API密钥
    appName: '您的应用名称',
    appVersion: '1.0.0',  // 替换为您的应用版本
    enableLog: true,  // 是否启用日志记录
    enablePerformanceTracking: true  // 是否启用性能跟踪
  );

  runApp(MyApp());
}

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Dash Agent Demo'),
      ),
      body: Center(
        child: Text('Hello, Flutter!'),
      ),
    );
  }
}

步骤三:捕获性能数据

dash_agent 插件会自动捕获一些基本的性能数据,如页面加载时间、帧率等。但是,您也可以手动捕获自定义事件或性能数据。

例如,您可以捕获一个按钮点击事件及其耗时:

import 'package:flutter/material.dart';
import 'package:dash_agent/dash_agent.dart';
import 'dart:async';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Dash Agent Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Hello, Flutter!'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 开始自定义事件计时
                var startTime = DateTime.now();

                // 模拟一个耗时操作
                await Future.delayed(Duration(seconds: 2));

                // 结束自定义事件计时
                var endTime = DateTime.now();
                var duration = endTime.difference(startTime);

                // 发送自定义事件到Dash
                DashAgent.trackCustomEvent(
                  eventName: 'button_click',
                  properties: {
                    'duration': duration.inMilliseconds.toString(),
                  },
                );
              },
              child: Text('Click Me'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. API密钥:确保您使用的是从Dash平台获取的有效的API密钥。
  2. 权限:某些性能数据可能需要额外的权限,确保您的应用已经请求并获得了这些权限。
  3. 隐私:确保您遵守所有相关的隐私和数据保护法规,特别是在收集和处理用户数据时。

通过上述步骤,您应该能够在Flutter项目中成功集成并使用 dash_agent 插件进行性能监控与分析。

回到顶部