forked from taichan-33/gptbot0130
-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
73 lines (59 loc) · 2.64 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import os
import openai
import streamlit as st
# OpenAI APIキーの設定
openai.api_key = st.secrets["OpenAIAPI"]["openai_api_key"]
st.title("QUICKFIT BOT")
st.write("Quick fitに関するQ&A AIBOT")
# 定数定義
USER_NAME = "user"
ASSISTANT_NAME = "assistant"
# OpenAIクライアントの初期化
client = openai.ChatCompletion()
def response_chatgpt(user_msg: str, past_messages: list):
"""ChatGPTのレスポンスを取得
Args:
user_msg (str): ユーザーメッセージ。
past_messages (list): 過去のメッセージリスト(ユーザーとアシスタントの両方)。
"""
# 過去のメッセージに現在のメッセージを追加
messages_to_send = past_messages + [{"role": "user", "content": user_msg}]
# ChatGPTにメッセージを送信し、レスポンスを取得
response = client.create(
model="gpt-4-0125-preview",
messages=messages_to_send,
stream=True,
)
return response
# メッセージ履歴の初期化と初期プロンプトの設定
if "messages" not in st.session_state:
initial_prompt = str(st.secrets["AppSettings"]["initial_prompt"])
st.session_state["messages"] = [{"role": "system", "content": initial_prompt}]
# チャットログを保存したセッション情報を初期化
if "chat_log" not in st.session_state:
st.session_state.chat_log = []
user_msg = st.chat_input("ここにメッセージを入力")
if user_msg:
# 以前のチャットログを表示
for chat in st.session_state.chat_log:
with st.chat_message(chat["name"]):
st.write(chat["msg"])
# 最新のメッセージを表示
with st.chat_message(USER_NAME):
st.write(user_msg)
# アシスタントのメッセージを表示
response = response_chatgpt(user_msg, st.session_state["messages"])
with st.chat_message(ASSISTANT_NAME):
assistant_msg = ""
assistant_response_area = st.empty()
for chunk in response:
if chunk.choices[0].finish_reason is not None:
break
# 回答を逐次表示
assistant_msg += chunk.choices[0].delta.content
assistant_response_area.write(assistant_msg)
# セッションにチャットログを追加
st.session_state["messages"].append({"role": "user", "content": user_msg})
st.session_state["messages"].append({"role": "assistant", "content": assistant_msg})
st.session_state.chat_log.append({"name": USER_NAME, "msg": user_msg})
st.session_state.chat_log.append({"name": ASSISTANT_NAME, "msg": assistant_msg})