🌟

初心者がDifyでAIチャットボット的なものを作ってみた

2024/12/26に公開

筆者について

アクセンチュア株式会社のTfLSという組織に所属しています、小野と申します。
関西所属で、現在は新卒3年目になります。
ちなみに大学までは全くの文系で、Techの知識は基本情報技術者試験合格程度です。

本記事の目的

関西TfLSのコミュニティ活動の一環として、WSE(Work Style Excellence)というチームがあります。その活動の一つとして、TfLSの関西所属メンバーには「技術の観点でこんなことをやっている/できる方がいるんだよ」という外部発信を目的とした「テクニカルインフルエンサー企画」を推進しています。
WSEチームの責任者を担当させてもらっていることもあり、そんなテクニカルインフルエンサー企画の第一弾として、Tech/AI超初心者である私がDifyを用いてチャットボットまがいのものを作ってみたという経験について書こうと思います。

取り組みの背景

関西TfLSではよく有志の飲み会が開かれますが、良さそうな飲食店を探す手間を省くために、簡単なチャットボットをAIの勉強がてら作ってみないかという話になりました。そこでWSEチームでその開発を引き受けることになりました。

やってみたこと

1. Difyを始めてみる

まずは触ってみないことには何もわからない!ということで、インターネットの記事などを見ながら、初期設定などを手探りで実施しました。詳細は割愛しますが、適当に「Dify 初心者」とかで検索すると参考になる記事がたくさん見つかりました。

2. LLMモデルを設定する

ログインなどの初期設定が完了したところで、次にWSEチームで契約しているAzure OpenAIをDifyのモデルプロバイダーに追加しました。DifyはいろんなLLMを使うことができるようで、自分で契約しているOpenAIのモデルも追加できそうです。

3. チャットボットに指示を与える

2まで完了したらもうチャットボット的に使うことができるようになったので、以下のような指示を与えてみました。
 ・役割:あなたはおすすめの飲食店をレコメンドできるグルメに詳しい評論家です。
 ・活用シーン:会社の飲み会を開催する際に、よさげな飲食店を探すために質問されます。
 ・依頼事項:飲み放題プランの用意があるお店を紹介してください。
 ・制約事項:出力時は必ず「#出力形式」の形を順守してください。
 ・出力形式:店名、住所、電話番号、席数、ホームページのリンク

4. 出力結果を確認してみる

実際にチャットボットに質問して、その回答結果を確認してみました。すると、一見それっぽい内容で回答してくれるのですが、ホームページのリンクをクリックすると全く違うお店のページに遷移したり、そもそも回答されたお店が存在していなかったりと、思いっきり嘘をついてきました。これがいわゆるハルシネーションというやつかと感嘆していました。
↓チャットのやり取り

↓ホームページのリンクを踏んだら遷移したサイト

5. RAGを設定してみる

Difyのチャットボットでは、簡単にRAG(Retrieval-Augmented Generation)を実装できるようです。今回はアクセンチュアの関西オフィス周辺のお店を教えてほしいので、梅田・淀屋橋エリアのお店の情報を一覧化して、それをソースにしようと考えました。
ホットペッパーAPIを使って、梅田・淀屋橋周辺のお店約2,000店を一覧化し、それを参照用のデータとして格納しました。
参考にしたサイト:https://note.com/yukiko_python/n/n84d1eb104f4a
ちなみにPythonを一から書くスキルはないので、ChatGPTにやりたいことを伝えてコードを生成してもらいました。本題からはそれますが、初心者でもGenAIだけでやりたいことが実現できるコードを書けるのは、わかってはいたもののやはり衝撃的でした。

6. 再度回答させてみる

RAGのソースを登録してから改めて同じ内容で回答してもらいました。結論として、先ほどまでリンクを踏んでも全く違うお店に誘導されていたのが、正しいお店のページに飛ぶことができました!やはり情報を与えてそれを基に回答することで精度が上がることを実感できました。一方で5回に1回くらいは依然として嘘をつくことがあり、ハルシネーション対策として何ができるのかは検討の余地がありそうです。
↓チャットのやり取り

↓ホームページのリンクを踏んだら遷移したサイト

躓いたポイント

やはりプログラミングの経験がないため、RAGとして挟むデータが欲しい場合はPythonでスクレイピングすれば良いとは分かったものの、それを実現するのに苦労しました。結果的にChatGPTに何度も聞きながら作業を進めましたが、基礎的な知識を持っていると助かるなと感じました。

やってみた感想

RAGのようなものを実装してみたものの、5回に1回くらい嘘をつく(=ハルシネーションが起きる)ことが分かったので、単純に情報源を与えるだけでは精度が担保できないことが分かりました。RAGは万能ではなく、情報を基に回答するもののミスをすることもあるという、人間らしい一面を持っていると思いました。

今後の展望

このチャットボットを改良することももちろんですが、Difyでは定型業務を自動化するワークフローを作成することもできるらしく、自分のプロジェクトで活かせる部分もありそうだなと感じています。そうした他の使い道も探りながら、GenAIやDifyについてさらに深く理解していきたいと考えています。

さいごに

最後になりましたが、今後このような形で関西TfLS所属メンバーから様々な発信を行っていく予定です。
もし何かお気づきの点があればコメントなどでお知らせいただけると、発信するメンバーの成長につなげられると思いますので、ぜひ今後もチェックしてください!

今回はこのあたりにしておきます。拙い文章ながらここまでお読みいただき、ありがとうございました。

Accenture Japan (有志)

Discussion