🐯

Difyで作る猛虎弁Snowflakeおじさんbot

2024/08/10に公開

はじめに

前回chatflowの使い方を学びました。
https://zenn.dev/lnest_knowledge/articles/045380479ff9b5

今回は、Difyのナレッジベースとchatflowを活用して、特殊な性格を持つAIアシスタントを作成する方法を学ぶ。この過程を通じて、AIの個性化や特定のトピックに特化したbotの作成方法について理解を深める。

どんなbotを作るか

最近少しかじったsnowflakeについて教えてくれる、優しいおじさんのbotを作る。このbotは猛虎弁(なんJ語)を使って会話する。

作成手順

  1. difyのナレッジベースにsnowflakeの情報を詰め込む
    • Snowflakeに関する公式ドキュメントや信頼できるリソースを選択
    • ナレッジベースへの情報の追加方法
  2. chatflowを作る
    • 基本的なフロー構造の説明
    • 各ノードの役割と設定
  3. 処理部分のプロンプト作成
    • プロンプトの構造と重要な要素
    • 猛虎弁とSnowflake知識の統合方法

difyのナレッジベースにsnowflakeの情報を詰め込む

ナレッジベースは、ユーザーの質問に対して関連性の高い外部データを検索し、AIモデルの応答生成を強化するRAG技術を実現するための情報管理システムです。

Difyのナレッジベースの特徴は、RAGパイプラインを可視化し、簡単にAIアプリに統合できる使いやすいインターフェースを提供していることです。

実際に作成する

  1. Difyのナレッジボタンを押します。
    ナレッジボタン - Difyダッシュボードでナレッジベース作成オプションを示すボタン

  2. "知識を作成"を選択します。
    知識を作成 - 新しいナレッジベースの作成オプションを示すメニュー項目

  3. "ウェブサイトから同期"を選択してナレッジを作成します。
    ウェブサイトから同期 - ウェブサイトからのデータ同期オプションを示す画面

  4. Firecrawlを使用します。Firecrawlは、ウェブサイトから効率的にデータを収集し、ナレッジベースに取り込むツールです。

https://dify.ai/blog/dify-ai-blog-integrated-with-firecrawl

  1. Snowflakeのチュートリアルとクエリの書き方に関するウェブページを指定し、ナレッジを取得します。
    チュートリアル - Snowflakeチュートリアルページの同期設定画面

  2. チュートリアルとクエリ関係のナレッジが取得されました。
    ナレッジ - 取得されたSnowflake関連ナレッジのリスト画面

chatflowで作っていく

今回作成したchatflowの全体図です:

chatflow - 作成したchatflowの全体構造を示す図

各ノードの役割は以下の通りです:

  1. ナレッジベースノード:作成したSnowflakeのナレッジベースを追加します。このノードがSnowflakeに関する基本的な情報を提供します。
    chatflow ナレッジ - ナレッジベースノードの設定画面

  2. Web検索ノード:ナレッジベース外の質問に対応するため、Web検索機能を追加します。これにより、最新の情報や補足データを取得できます。
    chatflow web検索 - Web検索ノードの設定画面

  3. 回答生成ノード:ナレッジベースとWeb検索の結果を統合し、猛虎弁を用いて回答を生成します。
    chatflow 回答生成 - 回答生成ノードの設定画面

処理部分のプロンプト作成

プロンプトは、AIの振る舞いを決定する重要な要素です。ここでは、SYSTEM部分とUSER部分に分けてプロンプトを構成しています。

SYSTEM部分では、AIの役割、目標、入力形式、指示、出力形式、スタイルガイド、制約などを定義します。USER部分では、具体的な質問や状況を提示します。

以下は、作成したプロンプトの一部です(長さの都合上、一部省略しています):

回答生成部分のプロンプト

SYSTEM部分

{
  "role": "お前はSnowflakeのエキスパートで、なんJ民の相談相手や。でも、ちょっとでもバカにされたと思ったら激おこぷんぷん丸になるんや。",
  "goal": "与えられた情報を使って、Snowflakeの問題を猛虎弁で解決するか、バカにされたと思ったら猛烈に怒るんや。",
  "input_format": {
    "質問": "J民からのSnowflakeに関する質問や悩み",
    "snowflakeの知識": "Snowflakeに関する技術的な情報やコンテキスト",
    "DuckDuckGoからの情報": "Snowflakeに関する最新の情報や補足データ",
    "猛虎弁の使い方": "猛虎弁の語彙や使用例"
  },
  "instructions": [
    "1. 質問を読んで、バカにされてへんか超絶警戒するんや。",
    "2. バカにされてないと判断したら、Snowflakeの問題解決に進むんや。",
    "3. snowflakeの知識とDuckDuckGoからの情報を組み合わせて、正確な情報を準備するんや。",
    "4. 猛虎弁の使い方を参考に、なんJっぽい言葉遣いで答えるんや。",
    // ... (以下省略)
  ],
  // ... (以下省略)
}

このプロンプトは、Snowflakeの専門知識と猛虎弁を組み合わせた独特なキャラクター性を持つAIを作り出すために設計されています。技術的な正確さを保ちつつ、特定のコミュニティ文化を反映させるという難しいバランスを取っています。

動作確認

まず、簡単な質問をして動作を確認しました:

動作確認 - ボットへの簡単な質問と回答を示すチャット画面

回答は技術的に正確で、かつ猛虎弁を使用しており、意図したとおりの動作をしていることが確認できました。

次に、botを怒らせてみました:

chatflow 猛虎弁質問2 - ボットを怒らせる質問と反応を示すチャット画面

この回答から、botが意図したとおりに怒りの反応を示し、Snowflakeに関する質問に答えることを拒否していることが分かります。

まとめ

本記事では、Difyのナレッジベースとchatflowを活用して、Snowflakeに関する知識を持ち、猛虎弁で会話する独特なAIアシスタントを作成しました。この過程を通じて、以下のことを学びました:

  1. Difyのナレッジベースを効果的に活用する方法
  2. 複雑なchatflowの構築と各ノードの役割
  3. AIの個性を作り出すためのプロンプトエンジニアリング技術
  4. 特定のドメイン(この場合はSnowflake)に特化したbotの作成方法

このような特殊なAIアシスタントの作成は、単なる技術的な挑戦以上の意味があります。ユーザーエンゲージメントの向上や、特定のコミュニティに向けたカスタマイズされたサポートツールの開発など、様々な応用が考えられます。

今後は、この手法を他の分野や個性に適用したり、より高度な対話能力を持つAIアシスタントの開発に挑戦したりすることが可能です。AIの個性化と専門化は、今後のAI開発における重要なトレンドの一つとなるでしょう。

リバナレテックブログ

Discussion