🙆♀️
Streamlit + LangChain _ver1_editing
import streamlit as st
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
#from langchain_core.messages import Message
# 履歴を保存するためにmessegaplaceholderを使う
from langchain.prompts import PromptTemplate, MessagesPlaceholder
import os
load_dotenv(".env")
st.title("🦜🔗 Quickstart")
#openai_api_key = st.sidebar.text_input("OpenAI API Key", type="password")
llm=ChatOpenAI(temperature=0, model_name="gpt-4o-mini")
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant.",
),
(
"human",
"{question}"),
MessagesPlaceholder(variable_name = "history")
]
)
default_chain = prompt|llm
# side barを作成
st.sidebar.title("Settings")
st.sidebar.write("Set the temperature for the model.")
#temperature = st.sidebar.slider("Temperature", 0.0, 1.0, 0.5, 0.1)
#llm.temperature = temperature
# session stateを使って、チャット履歴を保存
if "history" not in st.session_state:
st.session_state["history"] = []
# チャット履歴を表示
# ["speaker"]によって、ユーザーかシステムかを判別
# ["content"]によって、メッセージの内容を表示
# システムのメッセージは、st.markdown(f"🤖 {message['content']}")で表示
# メッセージを枠で囲むには?st.markdown(f"```{message['content']}```")
# チャット履歴を表示
def display_chat_history():
for message in st.session_state["history"]:
if message["role"] == "system":
st.markdown(f"🤖 {message["content"]}")
st.markdown("---")
else:
st.markdown(f"👤 {message['content']}")
st.markdown("---")
# チャットの入力フォーム, 送信ボタン
def generate_response(input_text):
input = {"question": input_text, "history": st.session_state["history"]}
response_content = default_chain.invoke(input).content
st.session_state["history"].append({"role": "human", "content": input_text})
st.session_state["history"].append({"role": "system", "content": response_content})
st.experimental_set_query_params(rerun="true") # ページをリロード
#st.session_state.sync()
# チャット履歴の表示
display_chat_history()
st.info(st.session_state["history"])
with st.form("my_form"):
text = st.text_area(
"Enter text:",
"HELLO",
)
submitted = st.form_submit_button("Submit")
#if not openai_api_key.startswith("sk-"):
# st.warning("Please enter your OpenAI API key!", icon="⚠")
if submitted :
generate_response(text)
# ページをリロード
st.rerun()
Discussion