Article

技術記事

生成AI解説

【初心者向け】DifyのAPI+Streamlitで作成するネガポジ判定アプリ〜ログイン認証付きアプリの作成〜

【初心者向け】DifyのAPI+Streamlitで作成するネガポジ判定アプリ〜ログイン認証付きアプリの作成〜
運営会社
サステックス株式会社

サステックス株式会社

元Microsoftエンジニアが立ち上げたAI・システム開発に特化したテクノロジーカンパニー。
機械学習や生成AIを活用したPoC開発や業務効率化、プロダクト構築を支援。

会社概要を見る →

サステックスのバックエンドエンジニアの鈴木です。
本記事では「Dify で作成したネガポジ判定のAPI」を Streamlit に組み込み、商品レビューに対する感情分析(ポジティブ/ネガティブ判定)を行うアプリ作成の手順を、初心者向けに分かりやすくご紹介します。今回は、Basic認証を組み合わせて「ログイン必須」のWebアプリに仕上げます。実装コードも併せて紹介しますので、ぜひDifyのAPIを活用したアプリ開発の参考にしていただけると幸いです。


1. Dify とは?

Dify は、ChatGPTを含む大規模言語モデル(LLM)を活用したアプリをノーコードで素早く作成できる開発プラットフォームです。 本記事では、このDifyを用いて作成したネガポジ(ポジティブ/ネガティブ)判定ができるワークフローをAPI化し、この取得したAPIをStreamlit 内に埋め込んで使用する方法について詳しく解説していきます。


2. このアプリで実現する機能

  • **Basic認証(ログイン)**を組み込み、アプリにアクセスできるユーザーを制限する。

  • 商品レビューを入力すると、Dify の ワークフローで「ポジティブ/ネガティブ」を判定し、その結果をアプリ上で表示させる。

  • チャット履歴を画面に保持し、過去のやり取りを確認できるようにする。

  • ログアウト機能を実装し、ログイン後に明示的にログアウトできるようにする。


3. 環境準備と前提条件

Python をインストールする

仮想環境を作成する

python -m venv venv

仮想環境を有効化する

source ./venv/bin/activate

Streamlit ライブラリ、 streamlit-authenticator ライブラリ、requestsライブラリをインストールする。

pip install streamlit streamlit-authenticator requests

Dify で組んだネガポジに関するチャットフローをAPI化

  • Dify の管理画面からチャットフローを選択

  • systemプロンプトの設定

  • userプロンプトの設定

  • APIキーの発行(APIリファレンスにアクセス)

  • 「APIキー」をクリックし、表示されるキーをコピーしておく。

  • requirements.txt に依存関係を記載する。

※ 以下のコマンドで、requirements.txtを作成できます。

pip freeze > requirements.txt


4. Streamlit アプリの実装

以下がサンプルコードになります。

import streamlit as st
import streamlit_authenticator as stauth
import requests
import json

----- Basic認証の設定 -----

ユーザーの情報を credentials 辞書で定義。

ここで “email” キーが無いとエラーになるバージョンもあるので、事前に用意。

credentials = {
“usernames”: {
“demo”: {
“name”: “Demo User”,
“password”: “demo”, # 本番ではハッシュ化されたパスワードを推奨
“email”: “demo@example.com”,
}
}
}

Authenticator オブジェクトを作成

authenticator = stauth.Authenticate(
credentials,
“test_cookie”, # クッキー名
“abcdef”, # クッキー署名キー(十分に長くランダムな文字列を推奨)
cookie_expiry_days=30,
)

ログインフォームをメイン画面に表示

authenticator.login(
location=“main”,
fields={“Form name”: “ログイン”} # ログインフォームの見出しを日本語に変更
)

ログイン状態を session_state から取得

authentication_status = st.session_state.get(“authentication_status”, None)
name = st.session_state.get(“name”, None)
username = st.session_state.get(“username”, None)

ログイン結果に応じて分岐

if authentication_status is True:
st.success(f”ようこそ、{name}さん!”)
# ----- ここからチャットボットのUI -----
st.title(“商品レビュー感情分析チャットボット”)

# セッションステートにチャット履歴を保存
if "chat_history" not in st.session_state:
    st.session_state.chat_history = []

# 商品レビュー入力欄
user_review = st.text_input("商品レビューを入力してください:")

# 送信ボタン
if st.button("送信"):
    if user_review.strip() == "":
        st.warning("レビューを入力してください。")
    else:
        # ユーザーの発言をチャット履歴に追加
        st.session_state.chat_history.append(
            {"sender": "user", "message": user_review}
        )
        
        # Dify の APIエンドポイント
        api_url = "https://api.dify.ai/v1/chat-messages"
        
        # API に送るペイロード
        payload = {
            "query": user_review,
            "inputs": {},
            "response_mode": "blocking",
            "user": "your_unique_user_id",
            "conversation_id": "",
        }
        
        # API キーの指定
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer {ここにDifyのAPIキーを入力}",
        }
        
        # API を呼び出し → レスポンス解析
        try:
            response = requests.post(
                api_url, data=json.dumps(payload), headers=headers
            )
            response.raise_for_status()
            data = response.json()
            
            # 取得した判定結果をチャット履歴に追加
            bot_message = f"判定: {data.get('answer', '判定結果なし')}"
            st.session_state.chat_history.append(
                {"sender": "bot", "message": bot_message}
            )
        except Exception as e:
            # エラーの場合もチャット履歴に追加
            error_msg = f"エラーが発生しました: {e}"
            st.session_state.chat_history.append(
                {"sender": "bot", "message": error_msg}
            )

# チャット履歴の表示
st.markdown("### チャット履歴")
for chat in st.session_state.chat_history:
    if chat["sender"] == "user":
        st.markdown(f"あなた: {chat['message']}")
    else:
        st.markdown(f"ボット: {chat['message']}")

# ログアウトボタン
authenticator.logout("ログアウト", "main")

elif authentication_status is False:
st.error(“ユーザー名またはパスワードが正しくありません”)
else:
st.warning(“ログインしてください”)


5. Dify の API を呼び出す

Dify では、構築したチャットフロー(例えば「文章がポジティブ or ネガティブかを判定するプロンプトを設定したAIチャット」)をAPI で呼び出すことができます。

  • 「API Key」を取得 → 今回のコード内の Authorization: Bearer の部分に埋め込む

  • リクエストボディ query に、判定対象となるテキストを送信

  • レスポンスボディの “answer” が AI の返答として返されます。

これにより、テキストを送るたびに AI がネガポジ判定し、結果を返してくれます。


6. 実行手順

  • 上記コードを app.py ファイルに保存

ターミナル(またはコマンドプロンプト) でアプリを起動

streamlit run app.py

  • ブラウザが自動で開き、ログイン画面が表示される

ユーザー名:demo

  • パスワード:demo

  • ログインに成功すると「商品レビュー感情分析チャットボット」の画面に移る

テキストボックスに商品レビューを入力 → 「送信」 ボタンを押すと Dify API に送られ、判定結果が表示されます。


7. まとめ

この記事では、Dify の APIStreamlit に組み込み、Basic認証付きのネガポジ判定アプリを実装する方法を解説しました。

  • streamlit_authenticator で手軽にログイン機能を追加

  • requests を用いて、Dify API を呼び出すだけで 感情分析(ネガポジ判定) が可能

Streamlit はデータサイエンスや機械学習のアプリを手早く可視化するための便利なUIフレームワークです。今回のように外部のAIサービス(Dify) と簡単に連携し、ユーザーログインも含めたアプリを構築できます。興味がある方は、是非色々なアプリをStreamlitを使って作成してみてください。

この記事の監修者
鈴木

鈴木

北海道大学情報科学研究院卒業。
フリーランスとして大手の開発プロジェクトを経験。
サステックスではバックエンドエンジニアの専門家として活動。愛猫家。

関連記事

【Dify解説】Dify v1.10.0-rc1リリース ─ イベント駆動型ワークフローを可能にする新トリガー機能の全貌
生成AI解説

【Dify解説】Dify v1.10.0-rc1リリース ─ イベント駆動型ワークフローを可能にする新トリガー機能の全貌

【Dify解説】Dify v1.9.0正式版リリース ─ ナレッジパイプラインと新エンジンの全貌
生成AI解説

【Dify解説】Dify v1.9.0正式版リリース ─ ナレッジパイプラインと新エンジンの全貌

Nano Banana(Gemini 2.5 Flash Image)とは何か?Nano Bananaの使い方とよくある活用事例
生成AI解説

Nano Banana(Gemini 2.5 Flash Image)とは何か?Nano Bananaの使い方とよくある活用事例

【Dify】Dify 2.0.0-betaリリース! ナレッジパイプラインと新エンジンで何が変わった?
生成AI解説

【Dify】Dify 2.0.0-betaリリース! ナレッジパイプラインと新エンジンで何が変わった?

【Dify】Dify上で外部検索を実現する方法4選|Dify公式プラグイン・Tavily・Google API・独自APIの徹底比較
生成AI解説

【Dify】Dify上で外部検索を実現する方法4選|Dify公式プラグイン・Tavily・Google API・独自APIの徹底比較

【Dify】Dify v1.8.0 アップデート解説:新機能と改善点まとめ
生成AI解説

【Dify】Dify v1.8.0 アップデート解説:新機能と改善点まとめ

生成AI導入コンサルティング:成功のポイントと失敗しない進め方
生成AI解説

生成AI導入コンサルティング:成功のポイントと失敗しない進め方

RAG+解説:RAGの精度を向上させる技術論文の紹介! 論文から紐解く仕組みと応用事例
生成AI解説

RAG+解説:RAGの精度を向上させる技術論文の紹介! 論文から紐解く仕組みと応用事例

記事一覧へ戻る
簡単1分で入力完了
お問い合わせはこちら