mcpField
D
dart-genkit

dart-genkit

github.com/dhruvanbhalara開発3039 回インストール8 週間前に更新
リポジトリ

dart-genkit について

Genkit Dart SDK を使って AI ワークフローやエージェントを構築する Dart 開発者向けのガイドです。型安全性と可観測性を重視し、構造化プロンプト、モデル、カスタムツール、フローの構成を扱います。

主な機能

  1. 01構造化プロンプトとモデル呼び出し
  2. 02入出力スキーマ付きツールの定義
  3. 03スキーマに基づくフローの構成
  4. 04テレメトリーとエラー処理の指針
  5. 05エージェントの判断とツール呼び出しの追跡

活用シーン

  1. 01型安全な AI ワークフローの構築
  2. 02エージェントへの独自タスクツールの追加
  3. 03開発中のエージェント実行トレースの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dhruvanbhalara/skills --skill dart-genkit

インストール後、Claude Code で/dart-genkitを入力して読み込まれたか確認します。

詳細

Genkit Dart による AI エンジニアリング

Genkit Dart SDK を使用して、構造化された、型安全で、可観測な AI 搭載ワークフローとエージェントを構築します。

目次


プロジェクトのセットアップ

  1. Dart プロジェクトの pubspec.yaml に Genkit パッケージを追加します。
    dependencies:
      genkit: ^0.1.0-preview  # Replace with the latest version
      google_generative_ai: ^0.4.0
    
  2. 環境変数に API 認証情報(Gemini API キーなど)を設定します。
    export GEMINI_API_KEY="your_api_key_here"
    

プロンプトとモデルの定義

Genkit は、構造化プロンプトを使用して、モデルの呼び出しとプロンプトの構造をコアアプリケーションロジックから分離します。

import 'package:genkit/genkit.dart';
import 'package:google_generative_ai/google_generative_ai.dart';

void main() async {
  // Initialize Genkit
  final ai = Genkit(
    model: 'gemini-1.5-flash',
    apiKey: String.fromEnvironment('GEMINI_API_KEY'),
  );

  // Invoke the model with a simple prompt
  final response = await ai.generate(
    prompt: 'Explain the concept of monads in Dart.',
  );
  
  print(response.text);
}

カスタムツールの作成

Genkit のエージェントは、タスク(データベースクエリ、ウェブスクレイピング、数学的計算など)を実行するためにツールを利用します。

import 'package:genkit/genkit.dart';

// 1. Define schemas for input and output
final additionInputSchema = Schema.object({
  'a': Schema.number(description: 'First number'),
  'b': Schema.number(description: 'Second number'),
});

// 2. Define the tool
final addTool = ai.defineTool(
  name: 'addNumbers',
  description: 'Adds two numbers together.',
  inputSchema: additionInputSchema,
  action: (input) async {
    final a = input['a'] as num;
    final b = input['b'] as num;
    return {'result': a + b};
  },
);

フローのオーケストレーション

フローは、構造化された入出力スキーマ、組み込みのテレメトリ、エラー処理をサポートする実行可能なパイプラインです。

import 'package:genkit/genkit.dart';

// Define the input and output schemas
final jokeRequestSchema = Schema.object({
  'topic': Schema.string(description: 'The topic for the joke'),
});

final jokeResponseSchema = Schema.object({
  'setup': Schema.string(),
  'punchline': Schema.string(),
});

// Define the Flow
final jokeFlow = ai.defineFlow(
  name: 'jokeFlow',
  inputSchema: jokeRequestSchema,
  outputSchema: jokeResponseSchema,
  action: (input) async {
    final topic = input['topic'] as String;
    
    final response = await ai.generate(
      prompt: 'Tell me a structured joke about $topic.',
      responseSchema: jokeResponseSchema,
    );
    
    return response.structuredOutput!;
  },
);

void main() async {
  // Run the flow
  final result = await jokeFlow.run({'topic': 'coding'});
  print('Setup: ${result['setup']}');
  print('Punchline: ${result['punchline']}');
}

ベストプラクティス

  • 網羅的なスキーマ定義:LLM が正しく構造化された引数を生成できるよう、ツールとフローには常に明示的な inputSchema と outputSchema を定義します。
  • 環境の分離:API キーをハードコードしないでください。環境変数または安全な認証情報ストレージを使用します。
  • トレースの可観測性:開発時には Genkit のトレース可観測性を有効にし、エージェントの意思決定ツリーやツールの呼び出しを調査できるようにします。
  • エラー処理:ツールの実行を標準的な try-catch ブロックで囲み、エージェントが自己修正できるよう、エラーの詳細を適切に返します。

コメント