1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらのAI Engine × Streamlitでコンサルケース問題の採点アプリを1時間で公開した話

1
Posted at

はじめに

デジタル赤字解消に向け、さくらのクラウドを勝手に応援しています。
普段はパワーポイントとエクセルで働いています。
無料という誘惑に負けて、何かつくることにしました。
手元にコンサル本があったので、
ケース問題を題材にし、AIさんに採点してもらうアプリをつくることにしました。
初寄稿です。

作ったアプリ

💼 コンサルケース問題 AI採点エージェント
https://case-study-ai-scorer-7bw8oe2vneea5ud2bni9uo.streamlit.app/)

候補者がケース問題の回答を入力すると、AIが「論理構成」「仮説構築」「定量アプローチ」「施策の筋」などの観点から厳しく(?)採点してくれるアプリです。

GitHub → Streamlit Community Cloudの簡単構成です。

起動するとサイドバーで「ユーザー自身のさくらのAPIトークン」を要求するセキュア(?)な実装になっています。
自分のリクエストを消費したくない開発者が、**みんなに「さくらのAI」を実際に使って、その手触りを見てほしいから。**という建前で、APIトークンをブラウザのセッション内でのみ一時的に利用する設計になっています。

image.png
図:実際の画面スクショ(Geminiに学生の及第点くらいで解答してといったら57点というリアルな採点)

🛠️ 今回つまずいたところ(リアルな開発の裏側)

1. さくらのAI Engine、始めるまでが一番の難所

クラウド検定を取得済みなので、さくらのアカウントは持っていましたが、いざ「AI Engine」を使おうとすると、アカウントの再認証やクレジットカードの登録が必要になりました。
無料でレートリミットありと記載があり、クレカの情報するつもりなかったので、出鼻をくじかれました。

2. Streamlitのデプロイでエラー(ModuleNotFoundError)

いざStreamlit Community Cloudにデプロイした際、お約束の ModuleNotFoundError: No module named 'openai' になりました。GitHubに requirements.txt を置き忘れるというお粗末っぷりを発揮しました。

🫠 GeminiやChatGPTとどこで差をつけるか問題

無事に公開できたものの、アプリとしては改善の余地しかありません。

ケース問題というお題に対して、システムプロンプト(指示文)をちょっと整えただけなので、ChatGPTやGeminiを開いたほうがましという状態です。

実用的なアプリにするなら、以下のようなアップデートが必要だなと感じています。

  • 採点者や採点基準を志望ファームや中途・新卒、募集ポジションによって可変にする
  • 問題を増やす、オリジナル問題を設定できるようにする
  • モデルやプロンプトの異なる複数の採点者を用意する(LLM as a judgeやModel/Agent Routing)
  • そもそも、令和の時代に「ケース面接」って本当に意味あるんだっけ? という、ケース問題そのものに対する構造的欠陥へのアンサー(笑)

💻 使用したソースコード

実装した app.py のコードはopenaiのSDKを使って、ベースURLをさくらのエンドポイントに向けただけのStreamlitらしいシンプルなものです。

import streamlit as st
import openai

st.set_page_config(page_title="コンサルケース問題 AI採点アプリ", layout="centered")

# セッション状態でAPIキーを管理
if "sakura_api_key" not in st.session_state:
    st.session_state["sakura_api_key"] = ""

with st.sidebar:
    st.header("🔑 認証設定")
    api_key_input = st.text_input(
        "さくらのAIトークンを入力してください",
        type="password",
        value=st.session_state["sakura_api_key"],
        placeholder="s_tok_..."
    )
    if api_key_input:
        st.session_state["sakura_api_key"] = api_key_input

st.title("💼 コンサルケース問題 AI採点エージェント")

issue = st.selectbox(
    "ケース問題を選択してください",
    ["東京のスターバックスの1日の売上をフェルミ推定せよ。", "地方の衰退しつつある遊園地をV字回復させよ。"]
)
user_answer = st.text_area("あなたの回答を入力してください", height=300)

if st.button("採点する", type="primary"):
    if not st.session_state["sakura_api_key"]:
        st.error("APIトークンを入力してください。")
    elif not user_answer:
        st.warning("回答を入力してください。")
    else:
        with st.spinner("AIが分析中..."):
            try:
                client = openai.OpenAI(
                    api_key=st.session_state["sakura_api_key"],
                    base_url="https://api.ai.sakura.ad.jp/v1"
                )
                
                response = client.chat.completions.create(
                    model="gpt-oss-120b", # さくらの提供モデルを指定
                    messages=[
                        {"role": "system", "content": "あなたは一流コンサルの面接官です。論理構成、前提確認、定量、施策の4軸で厳しく採点してください。"},
                        {"role": "user", "content": f"お題: {issue}\n回答:\n{user_answer}"}
                    ]
                )
                st.subheader("📊 採点結果")
                st.markdown(response.choices[0].message.content)
            except Exception as e:
                st.error(f"エラー: {e}")

おわりに

普段コードから離れていても、「ブラウザのGeminiに仕様を丸投げする」「さくらのAI Engineのような国産APIを使う」ことで、デプロイとブログ寄稿含めて1時間弱でできました。アプリは気が向いたら育てていこうと思います。
※Geminiに依頼した部分をさくらのAI Engineに投げるべきだったと、ここまで書いて反省

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?