DifyをAzure OpenAIで試してみる
Difyとは?
Difyは、オープンソースのLLM(大規模言語モデル)アプリケーション開発プラットフォーム。Difyを使用すると、さまざまなLLMやAIワークフローを簡単に構築し、迅速にプロトタイプから製品化に移行できる。
主な機能
1. ワークフロー構築: AIワークフローを視覚的に構築できるキャンバスを提供し、様々なタスクを自動化。
2. エージェント機能: LLMエージェントを作成し、複数のツールやモデルと連携させることが可能。Google検索、DALL·E、Stable Diffusionなど、50以上のツールをエージェントに組み込むことができる。
3. RAGパイプライン: 文書の取り込みや検索に対応するRAG(Retrieval-Augmented Generation)機能を備えており、PDFやPPTからのテキスト抽出をサポートできる。
4. 自己ホスティング: Dockerを利用してDifyを自分の環境に展開でき、特定のLLMやエンベディングモデルを組み込んで運用することが可能。
Langflowと同じジャンルのサービス・製品。ノー・ローコードでオリジナルチャットやLLMワークフローを作成できる。
インストール&起動
リポジトリからソースをcloneして、付帯のdockerfileを起動するだけ。
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker-compose up -d
ローカル起動ポートは80なので、変更したい場合は以下のとおり。(.envのサンプルがあるため、これをコピーして設定)
cp .env.example .env
vim .env
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
#EXPOSE_NGINX_PORT=80 #コメントアウト
EXPOSE_NGINX_PORT=8082 #追加
EXPOSE_NGINX_SSL_PORT=443
(補足)
個人的備忘録。docker→podmanに移行したため、podman-composeで起動する場合、defaultNW関連のエラーが出る。(dockerとpodmanの差異)
docker-compose.yamlにdefaultネットワークを追加する。
vim ./docker-compose.yaml
networks:
ssrf_proxy_network:
driver: bridge
internal: true
default: #追加
driver: bridge #追加
podman-compose up -d
実行
ブラウザから http://localhost:8082/ にアクセスすると、ログイン画面が開く。
初回アクセスであれば、「管理者アカウントの設定」からユーザ登録をする。
ユーザ登録後、再度トップから登録したユーザにてログインすると、Difyのトップ画面が開く。
最初から作成で、チャットボットを作成してみる。
プレイグラウンドライクな画面が表示される。LLMプロバイダーキーの設定にて、AzureOpenAIのいつもの設定を行う。
チャットが機能することを確認する。ここまでで利用疎通は完了。
ワークフローの作成、実行
ワークフローの作成
作成シナリオ
Pythonコードの実行とLLM問い合わせの組み合わせを試したいため、以下のようなシナリオを考えてみる。
・コード実行にて、pythonで「今日の日付」を取得する。
・取得した「今日の日付」をプロンプトに埋め込み、「今日の日付」を起点とした、「明後日の日付」をLLMに回答させてみる。
コード
以下のように引数なしで「今日の日付」を返す関数を作成する。戻り値はデフォルトの辞書型をそのまま踏襲。
引数などは不要なので削除した。
LLM(プロンプト)
モデルは先ほど定義済みのものを使用。
コードの出力の「今日の日付」(result)を入力となるようにコンテキストを設定。またプロンプト(USER)の中に{x}から指定してこれを埋め込む。(LangchainのTemplate部のような定義)
実行
コードで取得した「今日の日付」を利用して、LLMに引き渡して問い合わせ、回答を正しく得ていることが確認できる。
このように他にもRAG連携などを視覚的に組むことができ、手軽にアプリとして公開することも可能。
その場合、このワークフローだと実行結果がわからないので、「終了」にてLLMの実行結果を出力するようにする。
ただし、portを変更している場合、アプリを実行のURLをブラウザで手動で変更する必要がある。
http://localhost/workflow/I5poEv4322jZa3MX
↓
http://localhost:8082/workflow/I5poEv4322jZa3MX
まとめ
LangChainでのChain部分を視覚的にさくっと試せるのは大きい。また修正したチャットも手軽に公開できるため、活用の幅は大きい。複雑なロジックはコードの記載制限もありそうな点、セキュリティ面の懸念もあるので、使い所は要検討。