Gemini の Function Calling を用いたデータの分類

2024/07/22に公開されました。
2024/07/22に更新されました。

Google Cloud の Gemini で Function Calling を用いてカレンダー icsファイルから予定の分類を行いました。


author: morishu

はじめに

こんにちは、チーム4のmorishuです。

今回は、GeminiのFunction Callingを用いてカレンダーのデータ(ics形式)から予定の分類をします。

例えば、以下のような形で、予定と参加者のメールアドレスから予定の内容をいくつかの分類に当てはめることを実施しました。

  • 「打ち合わせ」の場合は「社内MTG」
  • 「〇〇社様設計共有会」の場合は「顧客MTG」
  • 「終日不在」の場合は「休暇」
  • 「私用のため離席」の場合は「その他」

Function Calling を利用した変換

Function Callingはあらかじめ用意した関数を用いて、引数をテキストの中から抽出してくれます。
また、引数と戻り値の形式も指定できるため、icsのカレンダーイベントからIDとタイトル、参加者等の情報を引数として、変換したタイトルと合わせて予定ごとの配列で返す形にしました。

実例

ここからは実際のコードです。
以下の順番で解説します。

  1. 関数宣言を作成
  2. プロンプトの設定
  3. 関数の実行

1.関数宣言を作成

カレンダーのイベントごとにUID、Summary(タイトルに当たる)、Conversion_Summary(変換したタイトル)を要素として持つ構造体の配列として返す形としました。

func GenerateFunctionCallDecl() genai.FunctionDeclaration {
	params := genai.Schema{
	 Type: genai.TypeObject,
	 Properties: map[string]*genai.Schema{
	  "schemas": {
	   Type:        genai.TypeArray,
	   Description: "カレンダーのイベント配列",
	   Items: &genai.Schema{
		Description: "イベントの構造体",
		Type:        genai.TypeObject,
		Properties: map[string]*genai.Schema{
		 "uid": {
		  Type:        genai.TypeString,
		  Description: "UIDを格納する",
		 },
		 "summary": {
		  Type:        genai.TypeString,
		  Description: "SUMMARYを格納する",
		 },
		 "conversion_summary": {
		  Type:        genai.TypeString,
		  Description: "SUMMARYを変換した内容を格納する",
		 },
		},
		Required: []string{"uid", "summary", "conversion_summary"},
	   },
	  },
	 },
	}

	return genai.FunctionDeclaration{
	 Name:        "generate_ics_schema",
	 Description: "icsデータを構造化し、変換したSUMMARYの項目を追加した構造体の配列を返す",
	 Parameters:  &params,
	}
}

2.プロンプトの設定

今回、使用したプロンプトは以下の通りです。

const prompt = `
カレンダーデータのSUMMARYを変換します。
一つの予定データはBEGIN:VEVENTで始まり、END:VEVENTで終わります
UIDとSUMMARYは変更しません。
SUMMARYを以下の5つの名称で分類し、CONVERSION_SUMMARYとします。
- 社内MTG
- 顧客MTG
- 休暇
- 個人作業
- その他

---
分類の補助情報は以下となります。
自社のメールアドレスのドメインは「@gicloud.co.jp」になります。
ATTENDEE、ORGANIZERがない場合は「休暇」か「個人作業」をSUMMARYの内容から判断してください。
各ATTENDEEの末尾にあるmailto:以降のメールアドレスのドメインに自社のメールアドレスのドメイン以外のものが含まれる場合は「顧客MTG」とします。
どの条件にもあたらない場合、「その他」を入れてください。
---
`

3.関数の実行

以下が関数が返した戻り値です。

{
  "icsSchemas": [
    {
      "UID": "2b94eefm0cas8cv5a2m7bbbb3m@google.com",
      "Summary": "DB設計相談会",
      "ConversionSummary": "社内MTG"
    },
    {
      "UID": "3a88agjllopo8eo39d507gbi3u@google.com",
      "Summary": "アーキテクチャ相談",
      "ConversionSummary": "社内MTG"
    },
    {
      "UID": "3itgk650hidai6hst2hbv8f6as@google.com",
      "Summary": "定例会後認識合わせ",
      "ConversionSummary": "社内MTG"
    },
    {
      "UID": "10s778lkrcg2e8m5ok8ouc0g1u@google.com",
      "Summary": "API設計打ち合わせ",
      "ConversionSummary": "社内MTG"
    },
    {
      "UID": "1o9vhh8nfr4b6tbb4lmv0t69hd@google.com",
      "Summary": "〇〇社様 設計共有会",
      "ConversionSummary": "顧客MTG"
    },
    {
      "UID": "7odn7n9po6jlcuotqpmll8a14n@google.com",
      "Summary": "健康診断",
      "ConversionSummary": "休暇"
    },
    {
      "UID": "7reb2j2h19jmv8gr8khc02mqfk@google.com",
      "Summary": "予定あり",
      "ConversionSummary": "個人作業"
    },
    {
      "UID": "508e3dj61us4ts7e8jbaobq64h@google.com",
      "Summary": "休暇予定",
      "ConversionSummary": "休暇"
    },
    {
      "UID": "2jaifffaji4ngt8mllhi121phv@google.com",
      "Summary": "私用の打ち合わせ",
      "ConversionSummary": "個人作業"
    }
  ]
}

まとめ

Function CallingをGeminiで行い、プロンプトで指示した内容にサマリーを変換し、意図した形式で返すことができました。
色々なユースケースに対応できると考えられるので、ぜひお試し下さい。

参照

参考

https://github.com/GoogleCloudPlatform/java-docs-samples/tree/main/dataflow/templates



GI Cloudは事業の拡大に向けて一緒に夢を追う仲間を募集しています

当社は「クラウドで日本のIT業界を変革し、世の中をもっとハッピーに」をミッションに掲げ、Google Cloudに特化した技術者集団として、お客様にコンサルティングからシステム開発、運用・保守まで一気通貫でサービスを提供しています。

まだ小規模な事業体ですが、スタートアップならではの活気と成長性に加えて、大手総合商社である伊藤忠グループの一員としてやりがいのある案件にもどんどんチャレンジできる環境が整っています。成長意欲の高い仲間と共にスキルを磨きながら、クラウドの力で世の中をもっとハッピーにしたい。そんな我々の想いに共感できる方のエントリーをお待ちしています。

採用ページ

※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。

※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。