chat() の中で
認証チェックを追加
DBにユーザーの入力を保存
OpenAI API や HuggingFace API を呼んで応答を生成
生成した応答をDBに保存して返却
### step.0 テーブル作成
CREATE TABLE chat_messages (
id SERIAL PRIMARY KEY,
user_id VARCHAR(50) NOT NULL,
message TEXT NOT NULL,
reply TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
### step.1 パッケージインストール
$ install flask psycopg2-binary openai
### step.2 Python (Flask + PostgreSQL + OpenAI)
from flask import Flask, request, Response
import json
import psycopg2
import os
from openai import OpenAI
app = Flask(__name__)
DB_CONFIG = {
"dbname": os.getenv("DB_NAME"),
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
"host": os.getenv("DB_HOST", "localhost"),
"port": os.getenv("DB_PORT", 5432)
}
def get_db_connection():
try:
conn = psycopg2.connect(**DB_CONFIG)
return conn
except Exception as e:
print(f"Database connection error: {e}")
return None
@app.route("/chat", methods=["POST"])
def chat():
try:
data = request.get_json()
user_id = data.get("user_id")
message = data.get("message")
if not user_id or not message:
return Response(json.dumps({"error": "user_id and message are required"}), status=400, content_type="application/json; charset=utf-8")
conn = get_db_connection()
cur = conn.cursor()
cur.execute(
"INSERT INTO chat_messages (user_id, message) VALUES (%s, %s) RETURNING id;",
(user_id, message)
)
chat_id = cur.fetchone()[0]
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": message}
]
)
api_reply = completion.choices[0].message.content
cur.execute(
"UPDATE chat_messages SET reply = %s WHERE id = %s;",
(api_reply, chat_id)
)
conn.commit()
cur.close()
conn.close()
response_json = json.dumps({"reply": api_reply}, ensure_ascii=False)
return Response(response_json, content_type="application/json; charset=utf-8")
except Exception as e:
error_json = json.dumps({"error": str(e)}, ensure_ascii=False)
return Response(error_json, status=400, content_type="application/json; charset=utf-8")
if __name__ == "__main__":
app.run(debug=True)
$ curl -X POST http://127.0.0.1:5000/chat -H “Content-Type: application/json” -d ‘{“user_id”: “12345”, “message”: “おはよう!”}’
{“reply”: “おはようございます!元気ですか?何かお手伝いできることがありますか?”}
おおお