A-Mizuguchi's picture
Implement initial project structure and setup
d550597
import gradio as gr
import pandas as pd
from openai import OpenAI
from loguru import logger
import os
from dotenv import load_dotenv
# コードネーム:カレラ
# 環境変数の読み込み
load_dotenv()
# OpenAI クライアント初期化
try:
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
logger.success("OpenAI クライアントの初期化に成功しました")
except Exception as e:
logger.error(f"OpenAI クライアントの初期化に失敗しました: {e}")
client = None
# 回答生成関数( account_relation_output を list で受け取る)
def panamera_answer(query, account_relation_output):
if not client:
return "OpenAI クライアントが初期化されていません。"
try:
# 入力データの整形(list → DataFrame)
account_relation_df = pd.DataFrame(account_relation_output) # ← list形式に対応
# アカウント関連情報の整形
account_text = account_relation_df.astype(str).agg(' '.join, axis=1).tolist()
account_text_combined = "\n".join(account_text)
# プロンプト生成
prompt = f"""
あなたは優秀な営業アシスタントです。
以下は、過去に検索された訪問情報です。
この情報をもとに、ユーザーの新しい質問「{query}」に答えてください。
【アカウント関連情報】
{account_text_combined}
"""
# OpenAI による回答生成
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたは優秀な営業アシスタントです。"},
{"role": "user", "content": prompt}
],
temperature=0.7
)
answer = response.choices[0].message.content
return answer
except Exception as e:
logger.error(f"回答生成に失敗しました: {e}")
return "回答生成に失敗しました。"
# Gradio UI
with gr.Blocks(title="カレラ") as demo:
gr.Markdown("## 🧠 カレラ:訪問情報に基づくAI回答ツール")
with gr.Row():
query_input = gr.Textbox(label="ユーザークエリ", placeholder="例: この訪問の日付は?")
account_relation_output = gr.Textbox(label="アカウント関連情報(list形式)", lines=10) # ← list形式に変更
answer_output = gr.Textbox(label="AIによる回答", lines=10)
answer_btn = gr.Button("回答生成", variant="primary")
answer_btn.click(
fn=panamera_answer,
inputs=[query_input, account_relation_output],
outputs=[answer_output]
)
# MCPサーバとして起動
if __name__ == "__main__":
demo.launch(mcp_server=True)