🚀

[実例ADK] Githubにおける質問や議論の手助けをするAI Agent - ADK Answering Agent -

に公開

こんにちは、サントリーこと大橋です。

Agent Development Kit(ADK)のリポジトリでは、運営をサポートするためにADK製のAIエージェントがいくつか稼働しています。これらのエージェントはGitHub Actions経由で動作し、それ自体が実用的なサンプルとして公開されています。

例えば、GitHubのIssueやPull Requestの内容を解析し、自動でタグ付けを行うエージェントなどが公開されています。

https://github.com/google/adk-python/tree/main/contributing/samples/adk_pr_triaging_agent

https://github.com/google/adk-python/tree/main/contributing/samples/adk_triaging_agent

今回の記事ではその中で最近追加された「ADK Answering Agent」について、非常に興味深かったので紹介したいと思います。

課題: オープンソースソフトウェア(OSS)コミュニティにおける質問回答に対するサポートコスト

OSSコミュニティにおいて、質問に回答するコストは決して小さくありません。

OSSの開発者はそれが仕事か個人的な貢献かにかかわらず、限られた時間でOSSに対してコントリビュートを行っています。
しかし、OSS開発者の作業はコードやドキュメントの作成だけではありません。
私の個人の経験で言えば、非常にストレスと時間がかかる作業として「質問に対する対応」があります。

OSSに対する質問は多岐に渡ります。バグ報告やアプリケーション(フレームワーク)の扱い方、ロードマップや機能に対する要望・批判、よくわからないスカウトまで。
私自身が英語が得意でないことも一因ですが、質問者自身も英語が不得手で、背景情報が全くないまま質問や批判が寄せられることも少なくありません。

場合によっては「え?これお前のコードほぼ俺が作ってね?」って感じでコードのサンプルを求める質問や「ちょ....全然違うアプリケーションの話ししてない?」って質問も来ます。納得してもらうには過去のコミットログや既存のソースコードを用いて質問に答える必要があり非常に時間がかかります。
この時間がOSSの機能追加やバグ修正の時間を潰してしまうことも稀ではありません。

では無視すれば良いかというと、そういうわけでもなく、使ってもらってこそのOSSだと思うと、このユーザーサポートをしっかりすることがOSS自体の利用方法の把握や、ユーザーとの良い関係の構築を生み出し、OSSの発展に繋がります。ユーザーに対するしっかりした対応をすることは良いOSSの条件の一つと言えるのです。

それでも ゴミみたいな 様々な質問に答え続けるのは、非常に精神的にもコスト的にも大変なことなのです。

ADK Answering Agent

そんなOSSコミュニティの強い味方が今回追加された「ADK Answering Agent」です。
このAgentはGithub Actionsを利用して、GithubのDiscussionに新たなQAが追加されたときに動作します。

例:

上の画像のように、ユーザーの質問に対して、Answering Agentが経緯や関連コードなどを説明してくれています。
実際のところなぜこのAgentが追加されたのか、上記の課題に対する対応のためかどうかはわかりませんが、このAI AgentはOSSコミュニティの強い味方になると思います。

ADK Answering Agentの仕組み

ではこのAgentは実際にどの様にして動作しているのでしょうか?
コードを読んでみると以下のような構成になっているようです。

※ この仕組みは、大きく分けて**ナレッジベースの更新(定期的なオフライン処理)とディスカッションへの回答(リアルタイムのオンライン処理)**の2段階で構成されています

処理系1: ナレッジベースの更新

「ADK Answering Agent」はソースコードの構成を理解するために、Vertex AI Searchを利用しています。

Vertex AI Searchとは、Google Cloudが提供する、大規模言語モデルを活用したフルマネージドの検索サービス**です。**単なるキーワード検索だけでなく、文脈を理解するセマンティック検索や類義語の解釈、スペル修正など、高度な自然言語処理機能も備えています。これにより、ユーザーはより自然な言葉で検索することができ、より的確な結果を得ることができます。

「ADK Answering Agent」ではナレッジベースとして、Vertex AI Searchを利用しており、adk-docs(ドキュメント)とadk-python(ソースコード)をVertex AI Searchに保存することで質問を答える際の情報としています。

ただしこのVertex AI Searchをナレッジベースとして利用し、常に最新の情報を回答するためには、Vertex AI Searchの更新が必要です。
このため、「ADK Answering Agent」ではGithub Actionsを用いて、定期的にVertex AI Searchの更新を行っています。

更新処理で行っていることとしては、adk-pythonadk-docs.py.mdを取得し、Markdownの場合はHTMLにしてから、GCSへアップロードします。
※Vertex AI SearchはMarkdownファイルを構造として解釈できず、プレーンテキストとして扱ってしまうため、事前にHTMLへ変換しています。
その後Vertex AI SearchのAPIを呼び出してGCSからDatastoreの更新処理を行っています。

処理系2: Agentの処理

Agentはローカルから呼び出すか、Github Actions経由で呼び出します。
Agentはディスカッションの番号を受け取り、そのディスカッションの内容を取得、Vertex AI Searchから関連コンテンツ取得し回答可能であれば、ディスカッションにコメントを行います。

Github Actionsからの場合はディスカッションの作成時にトリガーを実行し、ディスカッション番号を取得してプロンプトを作成しAgentへ渡しています。

Agentに渡されているツールは以下です。

  • ディスカッションコメントの取得(get_discussion_and_comments)
  • Vertex AI Searchツール(VertexAiSearchTool)(ADKのBuild-in Tool)
  • ディスカッションへのコメント追加)(add_comment_to_discussion)
  • ディスカッションへのラベル追加(add_label_to_discussion)
  • GCSのリンク(gs://)をgithub pageのURLへ変換(convert_gcs_links_to_https)

実際にプロンプトを見てもそれほど大きくなく、必要最低限のツールで効果が高いAgentになっているように感じます。

https://github.com/google/adk-python/blob/main/contributing/samples/adk_answering_agent/agent.py

まとめ

今回はADKのリポジトリ上で運用されている 「ADK Answering Agent」 について書きました。
この「ADK Answering Agent」は Vertex AI Searchのデータストア更新や、AIエージェントを実際のサービスと連携させる方法を示す、非常に実践的で有用なサンプルと言えるでしょう。

例えばQAサイトやCS用チャットなどでも「ナレッジベースの更新」と「Agentの運用」というのはよくある話ですので、参考にしてみてはいかがでしょうか。
実運用の場合、定期的に最新の質問と回答などもVertex AI Searchのデータストアへ投入していけるとより効果が増すと思われます。


お知らせ/宣伝

先日、ADKユーザー向けのイベント「ADK UG #0」が開催され、ADK開発者が集う日本語のDiscordコミュニティが誕生しました。ADKに関する情報交換や議論に興味がある方は、ぜひご参加ください!

https://discord.gg/BKpGRzjtqZ

また、ADKの最新のコミットログやリリースノートを分かりやすく解説するPodcastを、月・水・金に配信しています。ADKの動向を追いかけたい方は、ぜひ聴いてみてください。

https://www.youtube.com/playlist?list=PL0Zc2RFDZsM_MkHOzWNJpaT4EH5fQxA8n

Discussion