Rovo で Forge エージェントを介して外部サービスと連携する

Team 24 Europe イベントで、RovoというアトラシアンのAI製品の一般公開がアナウンスされました。この製品は、様々なデータソースから情報を検索する「Rovo サーチ」、会話形式でAIと情報を整理する 「Rovo チャット」、AIを介してアクションを行う「Rovo エージェント」の3つの軸から成り立ちますが、これらのうち「Rovoチャット」と「Rovoエージェント」を組み合わせて使うと、対話形式で様々な仕事をAIに実行させることができるようになります。

この記事では、この2つの機能に焦点を当ててご説明します。はじめにRovo チャットについてご説明し、そのチャット機能にエージェントを組み合わせるとどのようなことができるかご紹介します。その上で、ユースケースをイメージしてもらうために「外部LLMと連携する」という概念実証(PoC)も実施してみましたのでその結果もご紹介します。

Rovo チャットとは

Rovo チャットは生成AIを用いたチャット機能です。 Atlassian Rovoの一般提供開始:人間とAIとの協働で組織の生産性を最大化 の記事で紹介されているように「組織内の様々な状況で知見を提供するエキスパートとして、企業内の膨大かつ独自の情報を解析し、多様なタスクに対応」することを特徴としています。図で表すと以下のような体験を提供します。

 

Screenshot 2024-10-25 at 13.50.22.png

 

Rovo チャットに Rovo エージェントを組み合わせる

上記の機能だけでもアトラシアンのプラットフォーム内に蓄積された知見を元に回答を行うことができますが、このチャット機能にエージェントの機能を追加することでさらに高度な処理を実行させることができるようになります。 Example using a Forge remote endpoint では、会話に応じてタイムシートを入力するといった例を紹介しています。

Screenshot 2024-10-25 at 13.50.40.png

このようにどこかに情報を「作成する」といったアクションを実行させることができるほか、 何かのデータを取得したり、削除したり様々なアクションをとることができます。

このアクションのバリエーションとしては内部的にはAction moduleActionVerb というパラメタで表現されており、GET取得する、CREATE 作成する, UPDATE 更新する, DELETE 削除する、 TRIGGER起動する、といった区分が定義されています。

外部のLLMと連携させる実験

さて、この記事ではより具体的なユースケースをイメージしてもらうため、もう少し複雑なケースもご紹介しようと思います。

日本でのLLMについての取り組みを調べていた際に、言語独自のLLMを開発しようという試みに関するニュースを目にしました。

例えば 東京大学松尾・岩澤研究室 GENIACプロジェクトにおいて、大規模言語モデル「Tanuki-8×8B」を開発・公開などです。

こういった記事を読む中で、RovoがこれらのAIモデルと対話できたらどうなるだろうというアイデアが浮かびました。特定の業界や業務固有の知識を持っていたり、母国語に優れたローカルLLMがRovoを強化することができたら、面白いユーザー体験を提供できそうです。

Rovo Forge エージェントを使った概念実証 (PoC)

上記の仮説を踏まえて、Rovoを外部のLLM連携させるための簡単な概念実証を実施することにしました。以下の図はこの概念実証で実現しようとしていることです。 ActionVerb としては エージェントを使って、外部の情報を GET 取得する、というユースケースです。

Screenshot 2024-10-25 at 13.50.55.png

 

結果として、Forgeテンプレートと Hugging Face の外部API (Inference API)を使用することで、このアクションを実行するようなエージェントを非常に簡単に構築できました。Prepare to build your first Forge appを元に、forge createコマンドを実行すると、Rovoアクションを定義するテンプレートのプロジェクトファイルの一式が自動的に作成されます。外部のLLMを手軽に試す方法として Hugging Face の API を使うことにし、このAPIに通信するためのコードを組み込んでAtlassian のFaaS (Forge プラットフォーム)にデプロイするだけです。

PoCデモ

実際のデモ動画をお見せします。このPoCで作成したエージェントは、エンドユーザーとの会話を通じて、モデル、トークン、およびクエリなどの詳細情報を収集します。情報が揃ったら、Hugging Face APIにクエリを転送します。残念ながら上述したTanuki-8x8BはPoC実施時点でInference API 経由で試すことができなかったので、gpt-2 モデルを指定しました。gpt-2モデルは少々古いモデルであることから不正確な回答を返してきましたが、Rovo のAIモデルが正しい答えを補完して答えてくれました。

このForge エージェントはアプリとして登録され、裏側でのAPIの実行状況は Developer コンソールから確認することができます。このPoCでは実行したクエリをログに残すようにしておいたので、想定通りDeveloperコンソール画面でログを見ることができました。

Screenshot 2024-10-24 at 16.47.42.png

 

Screenshot 2024-10-24 at 16.48.57.png

Forge 上でプロンプトとプログラミング言語を組み合わせて実装する

AIの一般的な問題の1つは、そのブラックボックス性と言われます。AIが特定のアクションに至る方法を人間が理解できないということです。しかしこの点においてForge Rovoアプリが特徴的なのは、自然言語でのプロンプトに全てを委ねるのではなく、重要なアクションをプログラミング言語で実行できるようにしていることです。

具体的には、manifest.ymlファイルで自然言語を用いて指示を記述し、index.jsファイルでJavaScriptを用いて実装することで、自然言語で解釈した内容をプログラミング言語を用いて実行させるといったことが実現されます。

例えば、manifest.ymlでは、以下のように自然言語で指示を記述します。

rovo:agent:
  - key: talk-with-other-llm-hello-world-agent
    ...
    prompt: >
      You are a helpful agent that demonstrates how to use actions.
      You can perform the following jobs:
      Understand the user's query and pass it to the inference api of Hugging Face.
      ...

一方で、index.jsではJavaScriptを用いて以下のように実装します。

export async function fetchInferenceResult(payload) {
  // Extract token and message from payload
  const { model, token, message } = payload;
  ...
}

AI の業務活用は重要なテーマですが、任せる仕事があまりに複雑すぎるとAIがブラックボックスであるゆえにプロンプトのみで制御しきれなくなる可能性が考えられます。そのような場合に「エージェントによるアクション」というレイヤーを挟むことができると、AIが特定のアクションに至るまでのフローを制御しやすくなるはずです。

想定される質問

プログラミングを行うのは敷居が高いので、もっと気軽に作れないか

この記事ではRovo でできることを幅広くご説明するためにあえて高度な設定方法からご紹介しました。今回の概念実証で紹介した「外部LLMと連携する」といった複雑な実装をするには多少のプログラミングが必要ですが、基本的なエージェントであればノーコードのプロンプトで作ることもできますRovo エージェントに対する指示を記述する のドキュメントをご参照ください。

 

外部接続を検討したいが、トークンを保存するのはセキュリティ上好ましくない。PoC ではトークンを利用しているが、それをセキュアに保存する方法は?

実際に業務向けのForgeアプリを作る際には、セキュリティの観点から External authentication のようにOAuth 2.0 APIを利用して通信するように実装する方が好ましいでしょう。Atlassian 製品へのアクセスを行う場合は Fetch API のような組み込みのAPIを利用することも可能です。なお、トークンのようなセンシティブなデータを保存する必要がどうしてもある場合は、 Encrypting stored data を利用するのが良いでしょう。

Forge アプリ経由で外部にアクセスできてしまうとするとセキュリティ面での心配は?

アプリのバックエンドは Runtime egress permissions の Permission 設定によってホワイトリスト化することが可能です。アプリ側でこれらを適切に設定することで外部への接続可能な経路を制御することが可能です。

「Rovo サーチ」に関する説明は?

この記事ではRovo チャット、Rovo エージェントに焦点を当てましたのでRovo サーチに関する説明は含んでおりませんが、Rovo を使用する - 検索 のドキュメントに詳細がありますのでぜひご確認ください。特にRovo サーチで鍵となる「コネクタ」の仕組みはこの記事でご紹介した外部連携とはまた別の仕組みで動作しますので、用途に応じて使い分けることをおすすめします。

Rovo に関する一般的な資料が欲しい

をご覧ください。この記事では Rovo チャットと Rovo エージェントの組み合わせに焦点を当てましたが、これは使い方の一例に過ぎません。 Rovo エージェントはチャットにとどまらず様々な場面(Jira や Confluence のUI上など)から呼び出すことができる点で非常に幅広いユースケースをカバーしますので、業務にあったユースケースをぜひご検討ください。

アプリの実装方法についてアドバイスが欲しい

もしこのコミュニティで紹介した実装例についてご質問があればこの記事のコメント欄にご記入ください。また、Developer コミュニティ内で実装についての相談をすることで、アトラシアン社員やソリューションパートナー、また世界中のアトラシアンユーザーから知見を得ることができます。そのほか、アトラシアンのアドバイザリーサービスという有償サービスの中でもコンサルティングをご提供することが可能です。

0 comments

Comment

Log in or Sign up to comment
TAGS
AUG Leaders

Atlassian Community Events