CareerAdvisePro / app.py
jeongsk's picture
.
9e4f83d
raw
history blame contribute delete
No virus
2.05 kB
import streamlit as st
from langchain_core.messages.chat import ChatMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_teddynote.prompts import load_prompt
from dotenv import load_dotenv
from langchain import hub
load_dotenv()
st.title("๋‚˜๋งŒ์˜ ์ฑ—GPT๐Ÿ’ฌ")
# ์ฒ˜์Œ 1๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
if "messages" not in st.session_state:
st.session_state["messages"] = []
# ์‚ฌ์ด๋“œ๋ฐ” ์ƒ์„ฑ
with st.sidebar:
clear_btn = st.button("๋Œ€ํ™” ์ดˆ๊ธฐํ™”")
selected_prompt = st.selectbox("ํ”„๋กฌํ”„ํŠธ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”", ("๊ธฐ๋ณธ๋ชจ๋“œ"), index=0)
# ์ด์ „ ๋Œ€ํ™”๋ฅผ ์ถœ๋ ฅ
def print_messages():
for chat_message in st.session_state["messages"]:
st.chat_message(chat_message.role).write(chat_message.content)
# ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€
def add_message(role, message):
st.session_state["messages"].append(ChatMessage(role=role, content=message))
# ์ฒด์ธ ์ƒ์„ฑ
def create_chain(prompt_type):
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"๋‹น์‹ ์€ ์นœ์ ˆํ•œ AI ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ์งˆ๋ฌธ์— ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ด ์ฃผ์„ธ์š”.",
),
("user", "#Question:\n{question}"),
]
)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
return prompt | llm | StrOutputParser()
if clear_btn:
st.session_state["messages"] = []
print_messages()
user_input = st.chat_input("๊ถ๊ธˆํ•œ ๋‚ด์šฉ์„ ๋ฌผ์–ด๋ณด์„ธ์š”!")
if user_input:
st.chat_message("user").write(user_input)
chain = create_chain(selected_prompt)
response = chain.stream({"question": user_input})
with st.chat_message("assistant"):
container = st.empty()
ai_answer = ""
for token in response:
ai_answer += token
container.markdown(ai_answer)
add_message("user", user_input)
add_message("assistant", ai_answer)