AI, LLM, RAG, Dify, ...
LLM(Large Language Model)、RAG(Retrieval-Augmented Generation)など、AI技術を利用して業務の効率化を図ることが多くなっています。こんなことを考えることはないでしょうか?
- わからないことがあったときになんでも答えてくれるAIが欲しい...
- AIを問い合わせ対応に利用したい...
こうしたときに、社内情報を回答してもらうには、社内情報を検索し、その結果をLLMに渡し、回答を作成する流れになります。いわゆる RAG(Retrieval-Augmented Generation:検索拡張生成)というものですね。
また、業務で使用するには、誤った情報は大敵ですので、AIの知識で答えさせる必要はなく、検索結果の要約と引用元を教えてもらう流れにするのがよさそうです。
Difyはこうした流れをローコードで簡単に作ることができるということですので、試してみました。
SaaSとしても、セルフホストでも簡単に始めることができます。
ローカルでのセルフホストの記事はこちら↓
作ってみました
参考にしたのはこちらのページ
まずはより簡単に、SaaSで試してみます。
参考ページの時点からは進化していて、「最初から作成」から始めることになります。
2024/10/0現在では、ほぼほぼ参考ページの内容で構築できるのですが、一か所動作しない部分がありました。
検索結果を受け取るには
Serp API: Google Search API を使うところなのですが、このアウトプットはtextではなくjsonに入ってくるようなのです。なので、textを次のフローに渡しても何も渡していないことになり、LLMがLLMの知識で答えることに・・・
そこでjsonを渡すと、次のようなエラーになってしまいます。
Invalid context structure
調べてみると次の事象のようでした。
https://github.com/langgenius/dify/issues/8095
バージョン0.6.xまでは動作していたようですが、現行バージョンではJSONの構造に'content'がないとエラーになるんですね。この対応は、サンプルの「Interview Preparation」にありました。Google Search API の後に「Code」ノードをつなげ、JSONをテキスト形式に変換するようです。
def main(arg1):
import json
data = json.dumps(arg1)
return {
'result': data
}
コードはPythonかJavascriptが使えるようです。
これで動作しました。
検索キーワードをアレンジ
せっかくなので、少しアレンジを加えてみます。
開始とGoogle Search の間にLLMノードを追加し、次のようなプロンプトを入力します。
あなたはGoogle検索のための検索語ジェネレーターです。[入力内容]をもとにGoogle検索をするための検索キーワードを出力します。
出力は「」や""は使わず、キーワードとsite設定をスペース区切りで並べます。
[入力内容]:{{#input#}}
特定のサイトのみ検索
正確な情報だけほしいので、公式サイトのみ検索させます。Googleの場合は" site:aaa.com"のような書き方で設定できます。GoogleSearch検索ノードのQuery Stringに加えましょう。
回答を作成
例えば次のようなプロンプトを設定します。目的に応じて書き換えていくことで精度が高くなりそうです。
あなたは優秀な検索アシスタントシステムです。
[検索結果]をもとに[問い合わせ内容]に対する回答を行います。
回答は[検索結果]をもとに日本語で回答します。引用元を確認できるよう、[検索結果]のURLへのリンクもすべて引用元として回答の後に出力してください。[問い合わせ内容]:{{#input#}}
[検索結果]:以下の内容
{{#context#}}
まとめ
上記のような簡単な設定で、それなりに正確な情報源となりうるRAG応答システムが構築できそうな感じでした。元ネタがGoogle検索結果のスニペットだけなのですが、それなりに返してきます。
このあたりの動作の中身がログに残っていて、各ノードの入出力内容が簡単に確認できるので、改善に役立てられそうです。
2024年10月4日現在、Difyの情報はインターネット上にまだ少ないようで、検索に苦労しますが、テンプレートがいろいろ用意されているので、そちらのほうが参考になりそうな感じでした。
社內情報をナレッジとして登録し、検索・參照して回答することも簡単にできます。今後活用していくのが楽しみです。
補足
今回紹介した[GoogleSearch]APIはフリープランだと月100回までなのですが、GoogleのCustom Search APIを使うと1日100回まで無料になりますので、そちらの記事もどうぞ!