Anfragen 1:1 via Streamlit an ChatGPT weiterleiten und die Antwort anzeigen.
import os
import json
import streamlit as st
from openai import OpenAI
# Absoluter Pfad zur Konfigurationsdatei
config_path = r"C:\sources\ki\streamlit\config.json" # Angegebener Pfad
# Lese die Konfigurationsdatei
try:
with open(config_path, 'r') as config_file:
config = json.load(config_file)
api_key = config.get("OPENAI_API_KEY")
except FileNotFoundError:
st.error("Die Konfigurationsdatei 'config.json' wurde nicht gefunden. Bitte stellen Sie sicher, dass sie im richtigen Verzeichnis vorhanden ist.")
st.stop()
except json.JSONDecodeError:
st.error("Die Konfigurationsdatei 'config.json' ist ungültig. Bitte stellen Sie sicher, dass sie korrekt formatiert ist.")
st.stop()
# Setze den OpenAI API-Schlüssel aus der Konfigurationsdatei
client = OpenAI(api_key=api_key)
st.title("ChatGPT-like clone")
# Setze ein Standardmodell
if "openai_model" not in st.session_state:
st.session_state["openai_model"] = "gpt-3.5-turbo"
# Initialisiere den Chatverlauf
if "messages" not in st.session_state:
st.session_state.messages = []
# Zeige Chatnachrichten aus dem Verlauf bei erneutem Ausführen der App an
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Akzeptiere Benutzereingaben
if prompt := st.chat_input("Was ist los?"):
# Füge die Benutzernachricht zum Chatverlauf hinzu
st.session_state.messages.append({"role": "user", "content": prompt})
# Zeige die Benutzernachricht im Chat-Nachrichten-Container an
with st.chat_message("user"):
st.markdown(prompt)
# Zeige die Antwort des Assistenten im Chat-Nachrichten-Container an
with st.chat_message("assistant"):
# Stelle sicher, dass mindestens eine Nachricht vorhanden ist, bevor die API-Aufruf gemacht wird
if st.session_state.messages:
try:
stream = client.chat.completions.create(
model=st.session_state["openai_model"],
messages=[
{"role": m["role"], "content": m["content"]}
for m in st.session_state.messages
],
stream=True,
)
response = st.write_stream(stream)
st.session_state.messages.append({"role": "assistant", "content": response})
except Exception as e:
st.error(f"Ein Fehler ist aufgetreten: {e}")
else:
st.warning("Keine Nachrichten zum Senden an das Modell.")
app.py
{
"OPENAI_API_KEY": "sk.........iz"
}
config.json
streamlit run ChatUI.py