|
|
| 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() |
|
|
| |
| try: |
| client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) |
| logger.success("OpenAI クライアントの初期化に成功しました") |
| except Exception as e: |
| logger.error(f"OpenAI クライアントの初期化に失敗しました: {e}") |
| client = None |
|
|
| |
| def panamera_answer(query, account_relation_output): |
| if not client: |
| return "OpenAI クライアントが初期化されていません。" |
|
|
| try: |
| |
| |
| account_relation_df = pd.DataFrame(account_relation_output) |
|
|
| |
|
|
| |
| 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} |
| """ |
|
|
| |
| 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 "回答生成に失敗しました。" |
|
|
| |
| 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) |
|
|
| 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] |
| ) |
|
|
| |
| if __name__ == "__main__": |
| demo.launch(mcp_server=True) |
|
|