1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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/ にアクセスすると、ログイン画面が開く。
初回アクセスであれば、「管理者アカウントの設定」からユーザ登録をする。

image.png

image.png

ユーザ登録後、再度トップから登録したユーザにてログインすると、Difyのトップ画面が開く。
最初から作成で、チャットボットを作成してみる。
image.png

image.png

プレイグラウンドライクな画面が表示される。LLMプロバイダーキーの設定にて、AzureOpenAIのいつもの設定を行う。
image.png

image.png

LLMの設定が完了すると利用可能状態となる。
image.png

チャットが機能することを確認する。ここまでで利用疎通は完了。
image.png

ワークフローの作成、実行

ワークフローの作成

image.png

image.png

作成シナリオ

Pythonコードの実行とLLM問い合わせの組み合わせを試したいため、以下のようなシナリオを考えてみる。
・コード実行にて、pythonで「今日の日付」を取得する。
・取得した「今日の日付」をプロンプトに埋め込み、「今日の日付」を起点とした、「明後日の日付」をLLMに回答させてみる。

コード

以下のように引数なしで「今日の日付」を返す関数を作成する。戻り値はデフォルトの辞書型をそのまま踏襲。
引数などは不要なので削除した。

image.png

image.png

LLM(プロンプト)

モデルは先ほど定義済みのものを使用。
コードの出力の「今日の日付」(result)を入力となるようにコンテキストを設定。またプロンプト(USER)の中に{x}から指定してこれを埋め込む。(LangchainのTemplate部のような定義)
image.png

image.png

実行

コードで取得した「今日の日付」を利用して、LLMに引き渡して問い合わせ、回答を正しく得ていることが確認できる。
image.png

image.png

image.png

image.png

image.png

このように他にもRAG連携などを視覚的に組むことができ、手軽にアプリとして公開することも可能。

その場合、このワークフローだと実行結果がわからないので、「終了」にてLLMの実行結果を出力するようにする。
image.png

image.png

ただし、portを変更している場合、アプリを実行のURLをブラウザで手動で変更する必要がある。
http://localhost/workflow/I5poEv4322jZa3MX
 ↓
http://localhost:8082/workflow/I5poEv4322jZa3MX

image.png

実行結果
image.png

image.png

まとめ

LangChainでのChain部分を視覚的にさくっと試せるのは大きい。また修正したチャットも手軽に公開できるため、活用の幅は大きい。複雑なロジックはコードの記載制限もありそうな点、セキュリティ面の懸念もあるので、使い所は要検討。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?