JUNGU's picture
Update app.py
fba47b5 verified
raw
history blame
4.75 kB
import streamlit as st
import pandas as pd
import openai
import os
import instructions
# OpenAI API ์„ค์ •
openai.api_key = os.getenv("OPENAI_API_KEY")
st.set_page_config(layout="wide")
# ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜
def upload_and_process_file():
uploaded_file = st.file_uploader("์ด์ „ ์ƒํ™œ๊ธฐ๋ก๋ถ€ ํŒŒ์ผ ์—…๋กœ๋“œ", type=['csv', 'json'])
if uploaded_file is not None:
if uploaded_file.type == 'text/csv':
data = pd.read_csv(uploaded_file)
elif uploaded_file.type == 'application/json':
data = pd.read_json(uploaded_file)
return data
return None
# ์ƒํ™œ๊ธฐ๋ก๋ถ€ ๋ฌธ๊ตฌ ์ƒ์„ฑ ํ•จ์ˆ˜
def generate_living_record(data):
data_str = str(data)
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=[
{"role": "system",
"content": instructions.instruction
},
{"role": "user",
"content": data_str
}
],
temperature=0.7,
max_tokens=10000,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
return response.choices[0].message.content
# Streamlit ์•ฑ ๊ตฌ์„ฑ
st.title("์ƒํ™œ๊ธฐ๋ก๋ถ€ ์ƒ์„ฑ ์„œ๋น„์Šค")
st.write("์ด์ „ ์ƒํ™œ๊ธฐ๋ก๋ถ€ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ์ƒํ™œ๊ธฐ๋ก๋ถ€ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
st.write("GPT๋Š” ์‹ค์ˆ˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ๋‹ค์‹œ ๋ˆŒ๋Ÿฌ๋ณด์„ธ์š”.")
# ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ
uploaded_data = upload_and_process_file()
#์˜ˆ์‹œ ํ‚ค์›Œ๋“œ
attitude_keywords = [
"์ง‘์ค‘๋ ฅ", "๊ณผ์ œ ์ดํ•ด", "๋ฐœํ‘œ", "๋ฌธ์ œ ํ•ด๊ฒฐ๋ ฅ", "๊ณผ์ œ ์ˆ˜ํ–‰", "๊ด€์ฐฐ๋ ฅ",
"ํƒ๊ตฌ๋ ฅ", "์ž๊ธฐ ์ƒ๊ฐ ํ‘œํ˜„", "๋…ผ๋ฆฌ์  ์‚ฌ๊ณ ๋ ฅ", "์šด๋™์‹ ๊ฒฝ", "ํ˜‘๋™์‹ฌ",
"๋ฆฌ๋”์‰ฝ", "๋…ผ๋ฆฌ์  ๋น„ํŒ๋ ฅ", "๊ต๊ณผ ํ•™์Šต ์„ฑ์ทจ๋„", "๋ชฉํ‘œ์˜์‹", "๊ธฐ๋ณธ ํ•™์Šต",
"๋„์ „ ๊ณผ์ œ", "๋ฏธ์  ๊ฐ๊ฐ", "์˜ˆ์ˆ ์  ์žฌ๋Šฅ", "์Œ์•…์  ์žฌ๋Šฅ", "ํ˜ธ๊ธฐ์‹ฌ",
"์งˆ๋ฌธ", "๋ชจ๋‘ ํ™œ๋™"
]
relationship_keywords = [
"ํ˜‘๋™์„ฑ", "์นœ์ ˆํ•จ", "๊ณต๊ฐ ๋Šฅ๋ ฅ", "์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜", "๋ฆฌ๋”์‹ญ", "๊ฒฝ์Ÿ", "ํ˜‘๋ ฅ",
"์ธ์ •์š•๊ตฌ", "์˜์‚ฌ์†Œํ†ต ๋ฌธ์ œ", "์‹ ๋ขฐ", "์ƒํ˜ธ์กด์ค‘", "๊ณต์œ ", "์ดํ•ด์‹ฌ", "์นœ๋ฐ€ํ•จ",
"์ง€์ง€ํ•จ", "๋„์›€", "๋ฐฐ๋ ค", "๊ฑฐ๋ถ€", "๋น„๋ฐ€", "์ž๊ธฐ์ค‘์‹ฌ์ ", "์™ธ๋กœ์›€", "๋น„๋‚œ",
"๋ฌด๊ด€์‹ฌ", "์งˆํˆฌ", "๊ฐˆ๋“ฑ", "๊ต๋ฅ˜ ํ™œ๋ฐœํ•จ", "์†Œํ†ต ์ž˜ํ•จ", "๋‹ค์ •ํ•จ"
]
personality_keywords = [
"์ž์‹ ๊ฐ", "์ฑ…์ž„๊ฐ", "ํฌ์šฉ๋ ฅ", "๊ธ์ •์  ํƒœ๋„", "์œ ์—ฐ์„ฑ",
"๊ฐ์ˆ˜์„ฑ", "์˜ˆ๋ฏผํ•จ", "ํ™œ๋ฐœํ•จ", "์ฐจ๋ถ„ํ•จ", "์ ๊ทน์ ",
"์†Œ๊ทน์ ", "์ˆ˜์ค์Œ", "๊ฒธ์†ํ•จ", "์ž์‹ ๊ฐ", "์˜์š•์ ",
"๋ฌด๊ธฐ๋ ฅ", "์„ฑ์‹ค", "์„ฌ์„ธํ•จ", "์‚ฐ๋งŒํ•จ", "์กฐ๊ธ‰ํ•จ",
"๊ฑฐ์น ๋‹ค", "๊ธ์ •์ ", "์นœ์ ˆํ•จ", "๋ถ„๋…ธ", "์ธ๋‚ด์‹ฌ",
"๋…๋ฆฝ์ ", "์ƒ์ฒ˜", "์˜จํ™”ํ•จ", "๋”ฐ๋œปํ•จ", "๋ฏธ์†Œ",
"์žฌ์น˜", "์œ ๋จธ", "์–ต์šธํ•จ", "์šฐ์šธํ•จ", "๋ถ€์ •์ "
]
# ์ปฌ๋Ÿผ ์ƒ์„ฑ
col1, col2 = st.columns(2)
with col1:
# ์ž…๋ ฅ ํ•„๋“œ ๋™์  ์ƒ์„ฑ ์ „์— ์„ธ์…˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ
for i in range(5):
record_key = f"record_{i}"
# ์—…๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ  ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
if uploaded_data is not None and i < len(uploaded_data):
data_value = uploaded_data.iloc[i, 0]
if pd.isna(data_value):
st.session_state[record_key] = ""
else:
st.session_state[record_key] = str(data_value)
elif record_key not in st.session_state:
st.session_state[record_key] = ""
# ์œ„์ ฏ ์ƒ์„ฑ
for i in range(5):
record_key = f"record_{i}"
with st.expander(f"์ž…๋ ฅ์ฐฝ {i+1}", expanded=False):
st.text_area("์ƒํ™œ๊ธฐ๋ก๋ถ€ ๋‚ด์šฉ ์ž…๋ ฅ", key=record_key, height=150, value=st.session_state[record_key])
with col2:
# ํ‚ค์›Œ๋“œ ์„ ํƒ ์˜ต์…˜
st.write("ํ‚ค์›Œ๋“œ ์„ ํƒ")
selected_attitude = st.multiselect("ํ•™์Šตํƒœ๋„", attitude_keywords)
selected_relationship = st.multiselect("๊ต์šฐ๊ด€๊ณ„", relationship_keywords)
selected_personality = st.multiselect("์„ฑ๊ฒฉ", personality_keywords)
# ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
if st.button("์ƒ์„ฑ"):
with st.spinner('์ƒ์„ฑ์ค‘...'):
input_data = "\n".join([st.session_state[f'record_{i}'] for i in range(5) if st.session_state[f'record_{i}']])
# ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ์ถ”๊ฐ€
keyword_data = " ".join(selected_attitude + selected_relationship + selected_personality)
full_data = input_data + "\n" + keyword_data
generated_record = generate_living_record(full_data)
st.write("์ƒ์„ฑ๋œ ์ƒํ™œ๊ธฐ๋ก๋ถ€:", generated_record)