最近よく目にする「ChatGPT × 診断系のサービス」。
いつか自分でも、AIを活用したサービスをつくってみたいなと思っていました。
とはいえ、PythonやOpenAIのAPIは初心者。
でも、「まずはやってみよう!」という気持ちで、今回初めて “診断ボット” の開発にチャレンジしてみました。
目標は「とりあえず1日で動くものを作る!」こと。
将来的には、地元の中小企業にも使ってもらえるようなサービスづくりにつなげたいと思っています。
今回のプロトタイプも、その第一歩です。
この記事では、MBTI(性格診断)タイプを選ぶと、
- タイプの特性
- 向いている職業
- ChatGPTが考える「なぜ向いているか」理由
を返してくれる診断ボットのMVP(最小構成) を作った記録を紹介します。
Python初心者でもできたので、「これなら自分にもできそう」と思ってもらえたらうれしいです。
完成したもの
今回作ったのは、MBTI(16タイプ)を選ぶと、性格の特性・向いている職業・その理由をAIが返してくれる診断ボットです。
Streamlit というツールを使って、Webブラウザ上で動くアプリとして作成しました。
(スクリーンショットをここに貼る)
例えば「ENTP」を選ぶと:
- アイデア豊富、柔軟、社交的 という特性が表示され、
- 「データアナリスト」などの職業が提示され、
- ChatGPTが「なぜその職業が向いているのか」を説明してくれます
初学者の自分でも「形になるんだ!」と実感できた、すごくいい経験になりました。
使用した技術・ライブラリ
今回は「とにかく動くものを最短で作る」ことを目的に、以下の技術を使いました。
- Python 3.13:メインのプログラミング言語
- Streamlit:簡単にWebアプリが作れるPythonライブラリ
- OpenAI API:ChatGPTの診断理由を取得するために使用
-
dotenv:APIキーなどの機密情報を
.env
ファイルで安全に管理 - 仮想環境(venv):ライブラリのバージョン管理のために使用
特に Streamlit は初心者にも扱いやすくて、ローカルでブラウザにアプリが出てくるのが感動的でした…!
開発の流れ
ここからは、今回の診断ボットをどんな手順で作ったかを紹介します。
自分が実際にやった順番なので、初心者の方でもそのまま真似できると思います!
① プロジェクトフォルダ作成&仮想環境セットアップ
mkdir mbti-assistant
cd mbti-assistant
python3 -m venv .venv
source .venv/bin/activate
② 必要ライブラリのインストール
pip install streamlit openai python-dotenv
③ .envファイル作成(APIキーを設定)
cat << 'EOF' > .env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
④ MBTI特性辞書定義 (mbti_traits.py)
cat << 'EOF' > mbti_traits.py
mbti_trait_dict = {
"INTJ": ["戦略的", "計画的", "独立志向"],
"ENTP": ["アイデア豊富", "柔軟", "社交的"],
"ISFJ": ["誠実", "協力的", "慎重"],
"ENFP": ["情熱的", "創造的", "人と関わるのが得意"],
# 他のタイプも必要に応じて追加
}
⑤ GPT理由生成モジュール作成 (gpt_reason.py)
cat << 'EOF' > gpt_reason.py
import os
import openai
from dotenv import load_dotenv
load_dotenv()
def generate_reason(mbti_type, traits):
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "あなたはプロのキャリアアドバイザーです。"},
{"role": "user", "content": f"{mbti_type}型の特性({', '.join(traits)})に基づき、向いている職業の理由を200文字以内で説明してください。"}
],
temperature=0.7
)
return response.choices[0].message.content
⑥ Streamlitアプリ本体作成 (app.py)
cat << 'EOF' > app.py
import os
from dotenv import load_dotenv
load_dotenv()
import streamlit as st
from mbti_traits import mbti_trait_dict
from gpt_reason import generate_reason
st.title("MBTI × 適職診断ボット(MVP)")
selected_type = st.selectbox("あなたのMBTIタイプを選んでください", list(mbti_trait_dict.keys()))
if st.button("診断開始"):
st.subheader("🔍 診断結果")
traits = mbti_trait_dict[selected_type]
st.write("あなたの特性:")
for t in traits:
st.write(f"- {t}")
st.write("向いている職業の一例:")
st.write("- データアナリスト\n- コンサルタント\n- 研究職")
with st.spinner("AIが診断理由を考えています..."):
reason = generate_reason(selected_type, traits)
st.write("🧠 向いている理由:")
st.success(reason)
⑦ アプリ起動
streamlit run app.py
詰まったところと解決法
❶ OpenAI APIが動かない?
最初に openai.ChatCompletion.create()
を使ったら、こんなエラーが出ました:
openai.lib._old_api.APIRemovedInV1
You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0
調べてみると、OpenAIのPythonライブラリがバージョン1.0以降で仕様変更されており、昔の書き方が使えないことが原因でした。
✅ 解決方法
今回は手っ取り早く動かすため、旧バージョンにダウングレードして対応しました:
pip install openai==0.28
❷ .env ファイルが読み込まれない?
Streamlit で .env のAPIキーを読み込むには、以下を忘れずに書きます:
from dotenv import load_dotenv
load_dotenv()
.env ファイルがプロジェクトルートにあることを確認
❸ Streamlitコマンドが見つからない?
仮想環境が有効になっていないと streamlit が見つからないことがあります。
source .venv/bin/activate # 毎回作業前にこれを実行!
今後の展望
今回作ったのは、いわば「動くプロトタイプ(MVP)」です。
ここからさらに発展させていく予定です!
🔄 今後やってみたいアップデート
-
おすすめ職業をMBTIタイプごとに出し分ける
現状はすべてのタイプで同じ職業が出ますが、
タイプに応じて適した職業を動的に出したいです。 -
RAG(Retrieval-Augmented Generation)で根拠を補強
オリジナルの職業データベースを用意して、
GPTに「その中から選んでもらう」ようにしたいです。 -
UIのブラッシュアップ
TailwindCSSやNext.jsを使って、見た目も整えたい!
💡 学習ログ × Qiita連載の構想
このプロジェクトは **「個人開発×学習記録×発信」**の練習にもぴったりでした。
今後は以下のようなテーマで記事を分けて投稿していく予定です:
- MBTI適職診断ボットの構成解説
- OpenAI API(v1.0以降)への対応方法
- RAG構成の設計と実装(初級編)
- StreamlitとFastAPIの使い分け
- デザインを整えるTailwind入門
🔚 最後にひとこと
「自分にもAIサービスが作れるんだ!」と感じられたのが一番の収穫でした。
地方で活動することを目指す自分だからこそ、こういった技術で地域や個人に寄り添うツールをつくれたらと思っています。
まだまだ改善点はありますが、まずは動くものを作って公開することで
いろんな人とつながれたら楽しいです!