注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Foundry のイベントリスナーを使用すると、Foundry の外部にあるチャットワークスペースとやり取りできる AI 搭載のボットを作成できます。このガイドでは Slack を使用した例を紹介しますが、同様の方法で Microsoft Teams(Microsoft Bot Framework 経由)などのほかのプラットフォームにも接続できます。
このチュートリアルでは、Slack ユーザーがテニスについて詳しく知るための AI アシスタント「Tennis Bot」を作成します。
この Slack ボットの例は、次のコンポーネントで構成されます。
最初のステップでは、Slack アプリを作成して Slack ワークスペースにインストールし、リスナーを使用してチャットイベントの取り込みを開始します。Slack リスナーのセットアップガイドに沿って、Slack リスナーを作成します。
ユーザーは Tennis Bot にダイレクトメッセージで質問するため、Slack アプリに関連するスコープ、イベント、設定を追加する必要があります。Slack アプリの設定の詳細については、Slack の公式ドキュメント ↗を参照してください。
アプリに im:history と chat:write のスコープを追加します。

さらに、アプリで message.im イベントを購読します。

ユーザーがボットにダイレクトメッセージを送信できるようにする必要もあります。この設定は、Slack アプリの設定の機能 > アプリホームにあります。

リスナーを設定したら、リスナーのセットアップウィザードのテストタブで、リスナーが正しく設定されていることを確認できます。

次に、チャットプラットフォームに書き戻すための資格情報を指定して、新しい Slack ソースを作成する必要があります。
Slack アプリをワークスペースにインストールした後、インストール済みアプリの設定で、ソースの設定に使用する Bearer トークンを確認できます。

接続設定に移動して、ソースのエクスポートとコードリポジトリへのインポートを有効にする必要があります。


さらに、コードからソースを参照できるように、ソースのAPI名を設定する必要があります。API名の設定は、接続設定 > コードインポート設定にあります。
このステップでは、AIP Chatbot(旧称 Agent Studio)で新しいチャットボットを作成します。チャットボットの指示と検索コンテキストを設定する必要があります。
テニス情報ボットとして応答する方法をチャットボットに教えるには、タスクに特化した指示をチャットボットに入力します。プロンプトの例を以下に示します。
You are an assistant for answering questions about tennis.
If a query is not related to tennis, you should respond politely and explain that your purpose is only for answering questions about tennis, and suggestion some possible topics the user may like to ask about related to tennis.
Keep your responses concise and friendly.
チャットボットにテニスに関する情報源を与えるには、テニスのルールを記載した PDF をドキュメントコンテキストとしてチャットボットに指定します。これにより、チャットボットはこのコンテキストを使用してユーザーのクエリに回答できるようになります。

チャットボットがレスポンスに XML 引用を含めないように、引用を無効にしてください。これにより、チャットボットが Slack のレスポンスにドキュメントへのリンクを含めなくなります。

さらに、チャットボットをテストして、適切に応答することを確認できます。アドホックなテストには Chatbot Studio を使用し、評価スイート全体でテストするには AIP Evals を使用します。

チャットボットの性能に満足できたら、イベント処理ワークフローでチャットボットを使用できるように、チャットボットを関数として公開します。
チャットボットをセットアップしたら、チャットボットが Slack とやり取りできるようにする必要があります。まず、TypeScript 関数を記述するための新しいコードリポジトリを作成します。作成後、作成したソースと公開済みのチャットボット関数の両方をリポジトリにインポートします。

メッセージに応答するには、ボットが受信したリスナーのイベントペイロードを処理できる必要があります。リスナーのイベントペイロード処理を有効にする TypeScript 関数を作成します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40import { OntologyEditFunction } from "@foundry/functions-api"; import { Queries } from "@foundry/ontology-api"; import { ExternalSystems } from "@foundry/functions-api"; import { TennisBotSlackSource } from "@foundry/external-systems/sources"; export class MyFunctions { @ExternalSystems({ sources: [TennisBotSlackSource] }) @OntologyEditFunction() public async processTennisBotEvent(decodedEventPayload: string): Promise<void> { const message = (JSON.parse(decodedEventPayload) as any).event; // ボット以外のメッセージのみを処理します(ボットとして送信したメッセージは再処理しません) if (message == null || message.bot_id != null) { return; } const messageText = message.text; const channel = message.channel; if (messageText == null || channel == null) { return; } // メッセージをエージェントに渡します const agentResponse = await Queries.tennisAgentDocumentContextExample({ userInput: messageText }); // エージェントのレスポンスを Slack に送り返します const postMessageUrl = `${TennisBotSlackSource.getHttpsConnection().url}/api/chat.postMessage`; const response = await TennisBotSlackSource.fetch(postMessageUrl, { method: "POST", headers: { ["Authorization"]: `Bearer ${TennisBotSlackSource.getSecret("SLACK_BEARER_TOKEN_AUTH")}`, ["Content-Type"]: "application/json" }, body: JSON.stringify({ channel: channel, text: agentResponse.markdownResponse, }) }) } }
TypeScript 関数でのソースの使用について詳しくは、関連ドキュメントを参照してください。
コミットしてバージョンにタグを付け、この関数を公開します。
Ontology Manager に移動し、イベント処理関数を使用して関数ベースのアクションを作成します。このアクションは、受信した Slack メッセージイベントごとにトリガーされます。

次に、新しいリスナーイベントごとに関数ベースのアクションを実行する新規の自動化を作成します。新規の自動化には「ストリーム」条件を設定します(ストリームに新しい行が追加されると実行されます)。この自動化の入力には、作成した Slack リスナーの出力ストリームを指定します。

これで、Tennis Bot をテストする準備ができました。Slack でボットにダイレクトメッセージを送信し、レスポンスを待ちます。ボットはテニスに関する情報で応答するはずです。

これで、AI を活用した基本的なチャットボットを作成できました。ここから、ボットに機能を追加していくことができます。拡張機能と改善の例には、次のようなものがあります。
sessionRid パラメーターを使用して、会話のコンテキストを有効にできます。
Slack® のすべてのスクリーンショットは参考用にのみ掲載されており、Slack Technologies, LLC の所有物です。