Slide 1

Slide 1 text

Dify - LINE Bot連携 考え方と実用テクニック 2024.8.29 うな技研 うえぞう LINE DC Generative AI Meetup #2

Slide 2

Slide 2 text

自己紹介 うえぞう うな技研 代表/プログラマー LINE API Expert 金融DXコンサルタント 高校卒業後に単身上京。バリスタの見習いをしながら独学でプロ グラミングを習得。 その後金融業界に転身し、損害保険会社と銀行にて各種デジタル トランスフォーメーション案件をリード。現在はテクノロジー企 業にて金融業界向けAIソリューションの事業責任者を務めるほか、 総務省地方公共団体経営・財務マネジメント強化事業にてDX分野 のアドバイザーを務める。近年は生成AIとXR関連技術を活用した AIアシスタントの開発や書籍・記事の執筆等を中心に活動。 uezo uezo uezo uezo uezo uezo @uezochan @uezochan

Slide 3

Slide 3 text

ChatGPTに関する書籍を執筆しました ベストセラー1位 amazon 表計算ソフトカテゴリー 2023年9月7日時点 ⚫ Excel上で動作する対話型のアシスタントツールの作成 ⚫ アンケート回答一覧から重要なキーワードと聴講者の要 望を一括で抽出 ⚫ 問い合わせを分類し、内容に応じて商品在庫の確認など を自動化 ⚫ 1つの製品を元に、その競合製品を比較した表を自動生成 ⚫ 複数のWebページの情報を要約してワークシートに転記 ⚫ マニュアルの内容など事実に基づいたQ&Aやコンテンツ の作成 \次世代の生産性Hack/ ChatGPT API×Excel VBAで業務を徹底的に効率化! ✅ChatGPT APIがゼロからわかる ✅Excelと組み合わせて身近な業務に役立てられる ✅応用テクニックで業務全体を自動化できる ChatGPTを現場で自ら活用することにこだわり抜いた内容です。考え方から実践的テク ニックまでこれ一冊で幅広く網羅。 業務担当者やデジタル担当者、エンジニアなどあらゆる方々にお役立ていただけます! ⚫ ChatGPTを使った大量データの処理 や業務自動化の方法を知りたい人 ⚫ ChatGPTのより便利な活用方法を知 りたい人 ⚫ Excel VBAを実務で使っていて、 ChatGPTと組み合わせる手法を知り たい人 ⚫ ChatGPT APIを使ってみたい人 ▼本書で解説している内容の一例 ▼このような方におすすめ 詳細 / Amazon商品ページ https://www.amazon.co.jp/dp/429501768X

Slide 4

Slide 4 text

いもうとBOT2.0 ⚫かわいい妹とLINEやビデオ通話でおしゃべりできるLINE Bot ⚫性格を調整できるツンデレスライダー、義妹モード(要課金)など本格派も納得の機能を搭載 ⚫リマインダーやWeb検索、天気予報といったエージェント機能も搭載。今後も拡充する予定 ⚫バックエンドにはDifyを利用 https://news.livedoor.com/article/detail/27005702/ @imoutobot

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

本日お話しすること 1. Dify連携のメリット 2. アーキテクチャー超ざっくり解説 3. Dify-LINE Bot連携各論 ① セッション管理 ② さまざまな要求メッセージへの対応(テキスト、画像、スタンプほか) ③ さまざまな応答メッセージへの対応(Flex、Quick Reply、スタンプほか) ④ 入力引数(LINEユーザーIDの連携) 4. おまけ:マルチチャネル連携 5. まとめ

Slide 7

Slide 7 text

01 Dify連携のメリット

Slide 8

Slide 8 text

Why Dify × LINE Bot ⚫対話フロー制御、スキル実行、応答メッセージ生成(キャラクターの一貫性管理)といった LINE Botの主要な処理をほぼフルカバー ⚫開発・実行・運用それぞれの環境もオールインワンで提供 ⚫ログ取得や利用状況モニタリングといった運用上必要な機能も充実 ⇨Time-to-Marketの大幅な短縮が可能 開発環境(ノーコード) 実行環境(API/画面)

Slide 9

Slide 9 text

Why Dify × LINE Bot(続き・運用環境) モニタリング 会話ログ/処理トレース

Slide 10

Slide 10 text

02 アーキ超ざっくり解説

Slide 11

Slide 11 text

アーキテクチャー超ざっくり解説 ⚫LINEからのWebhookをDifyで受け取るのが難しい(多分無理?) ⚫LINEへの各種応答メッセージを作って送信するのが難しい(コードブロックでギリできる?) ⚫要求から応答までを非同期的に処理するのが難しい(私が知らないだけかも?) 対話フロー制御 スキル実行 応答メッセージ生成 文脈管理 LLM呼び出し制御 リマインダーAPI 天気予報API Web検索API LINE Dify 外部機能(Tools) LINEからのWebhook データを読み取るのし んどい LINEへの応答メッ セージ作るのしんどい

Slide 12

Slide 12 text

アーキテクチャー超ざっくり解説(続き) ⚫LINE-Difyインテグレーション層を設け、主にLINE⇄Difyの入出力マッピングを行う ⚫その他、ユーザー管理やセッション管理などDifyの外で管理したいものもこの層で行う ⚫Difyのアプリタイプはユースケース次第だが、マルチスキルであればAgentが柔軟性高そう セッション管理 要求メッセージ処理 応答メッセージ処理 その他イベント処理等 対話フロー制御 スキル実行 応答メッセージ生成 文脈管理 LLM呼び出し制御 リマインダーAPI 天気予報API Web検索API LINE LINE-Dify インテグレーション層 Dify 外部機能(Tools)

Slide 13

Slide 13 text

03 Dify-LINE Bot連携各論

Slide 14

Slide 14 text

セッション管理 ⚫会話の文脈はDify側で自動的に管理されるが、LINEとDifyをそのまま接続するとすべてのユー ザーが1つの文脈を共有してしまう ⚫そのため、LINEのUserIDごとに会話(conversation_id)を割り当てる対応が必須 ⚫無会話時間などの条件により会話セッションを破棄する対応も必要に応じて検討 LINE LINE-Dify インテグレーション層 Dify line_uid conv_id updated_at U1234 D9876 xxx U2345 D8765 xxx U3456 D7654 xxx : : : U2345 D8765 conv_id 会話履歴 D7654 xxxx D8765 U2345との会話履歴 D9876 xxxx D1111 U9999との会話履歴 (新規) U9999 (なし)

Slide 15

Slide 15 text

さまざまな要求メッセージへの対応 ⚫テキストはテキスト、画像は画像データとしてDifyに送信

Slide 16

Slide 16 text

さまざまな要求メッセージへの対応(続き) ⚫スタンプや位置情報はテキストに変換した上でDifyに送信

Slide 17

Slide 17 text

さまざまな応答メッセージへの対応 ⚫よりLINEらしい良質なユーザー体験を創出するためには、Flex Message、Template Message、 Sticker、Quick Reply等を組み合わせることが望ましい ⚫Difyからの応答に含まれる情報を利用して、プログラムでメッセージを組み立てる { "event": "agent_thought", "conversation_id": ”xxxxxxxxxxx", : 中略 “observation”: “{\”createReminder\“: \”{\“message\”: \“{\”id\“:123,\”user_id\“:\”U123456789\“,\”reminder_datetime\“:\”2024-08- 30T03:00:00\“,\”content\“:\”お昼にパンを買うよ!\",\"notified\":false}\", \"status_code\": 200}\"}", "tool": "createReminder", "tool_labels": { "createReminder": { "en_US": "createReminder", "zh_Hans": "createReminder" } }, "tool_input": "{\"createReminder\": {\"text\": \"お昼にパンを買うよ!\", \"user_id\": \”U123456789\", \"reminder_datetime_utc\": \"2024-08- 30T03:00:00Z\"}}", "message_files": [] } Difyからの応答(チャンク) インテグレーション層で Template Message組立

Slide 18

Slide 18 text

さまざまな応答メッセージへの対応(続き) ⚫スタンプは応答に含まれる[sticker]タグ方式で対応してみました ⚫画像生成にはDALE-E3を使用 インテグレーション層で画像 生成&画像メッセージ組立 Difyでのプロンプト設定

Slide 19

Slide 19 text

入力引数 ⚫DifyのAPIで inputs にあたる入力引数を使用してユーザー情報や設定情報をDifyに送信 ⚫Toolでユーザーを特定するためのキー情報を渡す際には漏洩することを前提とした対策が必須 ⚫会話(conversation_id単位)の初回に送信した(しなかった)値は以後更新できない点に注意 { "inputs": { "user_id": "U123456789" }, “query”: "おはよう", "response_mode": "streaming", "user": "myuser", "auto_generate_name": False, } 会話の初回ターン ここに「U123456789」が埋め込まれる Difyでのプロンプト設定

Slide 20

Slide 20 text

04 マルチチャネル連携

Slide 21

Slide 21 text

LINE-ビデオ通話の文脈共有 ⚫いもうとBOT2.0では、LINEメッセージとビデオ通話(LIFF)とで文脈を共有 ⚫Difyアプリはそれぞれに用意し、ビデオ通話起動時にはLINEメッセージ文脈情報を用いて会話 を初期化、ビデオ通話の会話ターン毎に要求・応答をLINEメッセージの文脈にフィードバック することでコンテキストの相互共有を実現 Dify Agent for Video Call Dify Agent for LINE Bot チャネルブリッジ LIFF 文脈情報 要求・応答 LIFF Token conversation_id ①初期化要求 ③通話初期化 conversation_id ④会話 conversation_id ⑤会話内容の通知 要求・応答のコピー 要求・応答のコピー ⑤’会話内容の通知 文脈情報 ②文脈取得

Slide 22

Slide 22 text

05 まとめ

Slide 23

Slide 23 text

まとめ ⚫ DifyはLINE Botに必要な制御をフルカバーするほか、開発・実行・運用 という各局面をサポートしているため、Time-to-Marketを大幅に短縮 ⚫ インテグレーション層を設けることで、ユーザー毎に異なる文脈の管理 やLINEらしいユーザー体験に繋がるメッセージの調整を行う ⚫ マルチチャンネル連携のような仕組みも、マネージドコードの大幅な削 減により超短期間に構築・リリース ⇨Difyは、LINE Botを「どう作るか」ではなく「どんなLINE Botを作る か」「LINE Botでどんな価値を提供するか」への集中を可能にする

Slide 24

Slide 24 text

おみやげ https://github.com/uezo/linedify https://github.com/uezo/linedify linedify on GitHub Quick Startのコード ⚫本日ご紹介したLINE-Dify間連携の実装を「linedify」というライブラリーとしてGitHubに公開 ⚫そのままでも実装の参考にでもお好きなようにご利用ください

Slide 25

Slide 25 text

Thank you うな技研 うえぞう uezo uezo uezo uezo uezo uezo @uezochan @uezochan