見出し画像

Dify の新規ツールなど based on v.0.6.13 ---WorkFlowによるNominatimツールを用いたAIアプリ(位置座標取得)

はじめに

前回までの私のプライベート環境でのDifyのバージョンは、0.6.11でした。
このバージョンから、Firecrawlと連携して ウェブスクレイピングして得た情報をRAGによってオリジナルの "知識" を作ることができるようになりました。
いざ、RAGの世界へ!

前回、前々回では、それを実際に試してみました。

も少し色々これで遊ぼうと思ったら、7月上旬で、今月分のFirecrawlのフリーのトークンがほぼなくなってしまってました。そしてCohereも、なんかフリーのリミットを超えてる、、とかアラートがでました。トホホです。

という状況なので、Difyを最新版にして、新機能を少し試してみようかという気分になったという次第。

現在のDifyの最新バージョンは、0.6.13 です。
この間、様々な機能やモデルなどが追加されています。

それらについて、一部を実際に試してみながらDifyをさらに学習する、というのが今回のメモの目的です。

なお、DIfyのバージョン履歴は、下記に記載されてます。

それぞれ、あまりに項目が多く、わかりにくく感じるぐらいです。これらからポイントをピックアップしていただける先達の皆様のnote等の投稿がありがたく感じます。

一方、基本の開発インフラの見直しも行いつつ、恐ろしい勢いで進化しているのがわかります。まだ、v. 0.6…です。

初めに、少し、過去2つのバージョンアップのおさらいをします。

v.0.6.12(v0.6.12-fix1)

このバージョンアップの内容は、たくさんあります。
特に、管理面で、大きな変更となっているようです。
主なパッケージ管理ツールとしてpipを廃止し、Poetryを採用、とのことです。かなり抜本的な変更に感じます。これに関連してアップデート方法も変わっています。

また、LangSmithとLangfuseがそれぞれ使えるようになりました。開発とデバッグツールとしてDifyの性能評価や改善のための機能として期待されます。

さらに、次の2つのモデルが使えるようになっているのが、私的には、注目です。

・JinaのRerank / Embed models
・Claude 3.5 sonnet model
 

Rerankモデルは、RAGでは必須ですが、現在OpenAIのが使えなくなっているので、私の使えるAPIでは、Cohereしかない、という状況にありました。

またエンベッドモデルは、OpenAIとCoreheの2つのベンダーのみです。従って、新たなベンダーとモデルの登場は心強いです。ただし、Jinaは日本語には少し弱い、という評価のようです。

Claude 3.5 sonnetについては、言わずもがなといいますか、とても評判がよく、色々応用もありそうです。まずはベラドンナ様の回答が、他のLLMと比較してどうなるかなど試したいと思います。

というか、早く、マルチモーダルで試したいですね。大きな課題です。
それができると、AIアプリの幅が飛躍的に広がると思います。

v.0.6.13

このバージョンは、これまた、さまざまな機能が増えていますが、あえて、この2つを取り上げます。

下記の2つのツールが使えるようになりました。

  • Nominatim OpenStreetMap検索ツール

  • Firecrawlツール: スクレイプ、クロールと検索

今回は、特にNominatim OpenStreetMap検索ツールの使い方を具体的に確認します。上記の理由で、Firecrawlが当分使えないという事情もあります。

なお、後者のFirecrawlツールは、前回までのような知識作成用に用いる使い方ではなく、ブロックのツールとして次の3つが使えるようになった、ということです。

Scrape: Extract data from a single URL.
     単一のURLからデータを抽出します。
Crawl: Extract data from a website by crawling through a URL.
     URLをクロールしてウェブサイトからデータを抽出します。
Search: Search, and output in Markdown format
     検索し、Markdown形式で出力する

この機能の定義をみると、前回、前々回での使い方はウェブクロールだったわけですね。訂正しました。

なお、今回のツール適用のトライアルついては、今後、モジュール的な使い方も想定されるので、これまでのChatflowではなく、WorkFlowで作成してみます。

WorkFlowだと、オリジナルのツールとして定義できますから、いわばモジュール化ができるわけで、応用範囲が広がるかと思います。

ワークフローによるAIアプリの作成例

地図検索ツール(Nominatim)を用いたAIアプリの例

v.0.6.13で、地図検索系のNominatim関連のツールが3種類つかえるようになりました。

しかしながら、私は、地図や座標系などは、もっぱらGoogle Mapに依存の状態で、この分野については、あまり詳しくありません。
そこで、まず、調査のためNominatim のサイトにいってみました。下記の説明がありました。

Nominatimとは

Nominatim (ラテン語で「名前で」という意味) は、名前と住所で OSM (OpenStreetMap) データを検索し、OSM ポイントの合成住所 (逆ジオコーディング) を生成するツールです。また、限定的に、地物をそのタイプ (パブ、ホテル、教会など) で検索する機能もあります。

また、次の様な説明が、あります。

Nominatim は、OpenStreetMap (OSM) データに基づくジオコーディングを提供します。データの保存には、バックエンドとして PostgreSQL データベースを使用します。

とのことです。
なお、もっと詳しい説明をGoogle AI Studioに教えてもらいましたので、最後に参考として示します。

Dify での Nominatimツール

下記の図にあるように3種類用意されています。

1.Nominatim OSM Lookup

Look up OSM objects using their IDs with Nominatim
Nominatimを使用してIDでOSMオブジェクトを検索します
*1;これについては、最後に参考として、GoogleAI Studioの検索結果を示します。

2.Nominatim Reverse Geocoding

Convert coordinates to addresses using Nominatim
Nominatimを使用して座標を住所に変換します

3.Nominatim Search

Search for locations using Nominatim
Nominatimを使用して場所(座標)を検索します

1は、ちょっと特殊なので、今回は省きます。なお、私は、よく理解できなかったので、GoogleAI Studioに尋ねてみました。世界中の場所にIDがつきつつあるんですね。最後に付録として、添付します。

さて、ということで、まずは、3を試してみます。この場合の座標とは、緯度 (Latitude)と経度 (Longitude)のことです。

地名や住所を入れると、緯度と経度、それに国名を答えるアプリを作ってみます。

ワークフロー1 (場所の緯度と経度を取得)

地名や構造物、住所の緯度と経度とそこの国名を得るモジュール

  1. 開始: 緯度と経度を得たい場所の地名、または構造物名、住所、などを入力します。Input機能です。なお、入力変数の定義は、このnodeでしかできないようですが、この開始nodeは、ワークフローを始めると自動的に表示され、かつ、追加ブロックには表示されません。

  2. Nominatim Search: 今回のキモのツールです。開始で入れた場所の緯度、経度などを返します。日本語のデータを受け付けるようです。

  3. LLM: Nominatim Searchの出力から、緯度と軽度、またそこの国名を出力させます。

  4. 終了: LLMの結果を出力します。また、プログラムの終わりの宣言となります。

次に、それぞれのnodeを具体的に示します。

開始 node

ワークフローの開始nodeは次のようになっています。

赤丸の+マークをクリックすることで、下記のような入力フィールドの編集画面がポップアップするので、ここで、入力変数を定義します。

赤枠が変数名です。" place "という名前にしています。オレンジ枠が、その定義を示すラベルです。このプログラムを実行するとこのラベルが表示されます。

赤枠の上で、変数の型の定義ができます。ここでは、住所もしくは、地名、建物名、などを入れるので、ショートテキストにしています。黄緑の枠で文字数を最大60に設定しています。

その結果を反映した開始nodeが、下記です。オレンジの枠内に入力されています。

ちなみに、ChatFlowでの開始nodeは、下記です。

赤枠で囲んだチャットボット用の入力フィールドが最初から用意されています。

Nominatim Search ツール

今回初登場のNominatimツールの一つです。

入力変数に、先ほど定義した "place" を設定しています。
ちなみに、このツールの入力変数には、日本語表記で大丈夫のようです。

LLM node

このLLMを用いて、Nominatim Search ツールの出力から、緯度、経度、また国名を抽出して表示させるようにします。下記のように設定してみました。

なお、LLMはここでは、ChatGPT4oを使ってますが、この用途ならChatGPT3.5で十分だと思います。

終了node

Chat Flowの場合は、回答で一旦終了します。ただし、その後に別のnodeを接続できます。

ワークフローでは、終了nodeで終わります。また、その後に、nodeを接続することはできません。そして、ワークフローの場合は、開始から終了の一式をツールとして定義して、他のワークフローでツールとして用いることができます。

ここでは、出力として、LLMnodeの text(string) を設定しています。

本ワークフローの実行

開発画面の右上にある "実行" をクリックすることにより、このワークフローを試行することができます。

上記の赤枠で囲んだ実行をクリックすると、その下のTest Runの部分が表示されます。ここで、例として、オレンジ枠のように、アンコールワットと入れました。

次に、黄緑の枠の実行を開始をクリックすると、下記が表示されました。

一応、設定した機能は実現したようです。なお、この試用例は、ChatGPT3.5Turboを使った結果です。

最小構成のワークフローですが、本ツールの動作検証ができたかと思います。
このワークフローについては、全体を一つのツールとして定義することで、他のワークフローから使うことができるようです。

次回以降で、他のツールのワークフロー適用の例や、ワークフロー全体のツールとしての定義と引用などを試してみたいと思います。

またまた、少し長くなったので、一旦ここで終了します。

ここまでのまとめ

Difyの新バージョン0.6.13であらたに導入されたNominatimのツールの一つであるNominatim Searchを用いたAIアプリをDifyのワークフローを使って作成して動作を確認しました。

ワークフローの特徴は、全体を一つの "ツール" として定義できることです。それを他のワークフローで使うことができます。

次回、できれば、その設定方法と使い方についてメモしたいと思います。

また、もう一つ、Claude3.5sonnetが使えるようになったので、前回のベラドンナ様の旅行ガイドの答えの、Claude3.5sonnet版を示したいと思います。

参考(Appendix)

Nominatimを使って、IDでOSMオブジェクトを検索する、とは?

GoogleAI Studioに、問い合わせてみました、下記が回答です。

OSM を Wikipedia のようなものだと考えてみてください。ただし、地図の場合です。 世界中のボランティアが、道路、建物、公園など、あらゆる種類の場所に関する情報を追加しています。 これらの場所やオブジェクトにはそれぞれ、データベース内で一意の ID が割り当てられます。この ID は OSM ID と呼ばれます。

Nominatim は、OSM のこの巨大なデータベース用の検索エンジンと考えてください。 Google マップで住所を入力してその場所を見つける方法と似ています。 ただし、Nominatim を使用すると、名前や住所ではなく、OSM ID を使用して場所を検索することもできます。

では、ID を使用して OSM オブジェクトを検索するとはどういう意味ですか?

誰かが「OSM ID 123456789 を見てください」と言ったとします。 この ID が実際に何を表しているか知りたい場合は、Nominatim を使用して検索できます。 Nominatim は、この ID に関連するすべての情報を検索し、その場所やオブジェクト (その地理的位置、種類、名前など) を正確に教えてくれます。

例:友人があなたに、素晴らしいカフェを見つけたと言い、OSM ID を教えてくれたとします。 この ID を Nominatim に入力すると、次の情報が表示されます。

  • カフェの名前

  • カフェの住所

  • 地図上のカフェの場所

要約すると、Nominatim を使用して ID で OSM オブジェクトを検索すると、OSM データベースから特定の場所やオブジェクトに関する詳細情報を入手できます。 これは、OSM データを操作し、特定の場所に関する詳細情報を取得するための非常に便利なツールです。



この記事が気に入ったらサポートをしてみませんか?