UPORABA GPT API ZA USTVARJANJE INTERAKTIVNEGA TUTORJA
Cilji
- Razumeti vlogo
conversation_idza ohranjanje in identifikacijo pogovora. - Implementirati ustvarjanje novega pogovora ter uporabo obstoječega ID-ja.
- Testirati več sej in preveriti, kako se kontekst ohranja.
- Preberi ključne dele kode:
- Konstantna
CONVERSATION_ID(vrh datoteke) — prednastavljen ID ali prazen niz. - Funkcija
get_conversation_id()— ustvari nov pogovor, če ID ni določen, in nastavi globalnoCONVERSATION_ID. - V
start_chat()se pokličeconversation_id = get_conversation_id()in naprejclient.responses.create(..., conversation=conversation_id, ...)— tu se poveže sporočanje z določenim pogovorom.
- Konstantna
- Kratek eksperiment:
- a) Zaženi skripto z obstoječim
CONVERSATION_IDin izvedi 2–3 vprašanja. Opazuj, da agent ohranja kontekst. - b) Nastavi
CONVERSATION_ID = ""(prazno) in ponovno zaženi — preveri, da se v konzoli izpiše “[Ustvarjen nov ID pogovora]” in da se ustvari nov kontekst. - c) Kopiraj ustvarjeni ID in ponovno zaženi skripto z njim — potrditev, da se kontekst iz prejšnje seje nadaljuje.
- a) Zaženi skripto z obstoječim
- Razširitev (izbirno, kratko):
- Logiraj
conversation_id+ čas + uporabnikova sporočila v lokalno datoteko za sledljivost. - Dodaj ukaz
"/new"vstart_chat()za ročno ustvarjanje novega pogovora (pokličiCONVERSATION_ID = ""inget_conversation_id()).
- Logiraj
Varnost in etika (kratko)
- Ne deli resničnih API ključev; uporabi okoljske spremenljivke (
OPENAI_API_KEY). - Pri beleženju pogovorov upoštevaj zasebnost (anominizacija/odobritev, če so občutljivi podatki).
#!/usr/bin/env python3
import os
from openai import OpenAI
# 🔧 Nastavi svoj API ključ
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 🔁 Če želiš ohraniti isti pogovor, vnesi tu ID, npr. "conv_abc123..."
CONVERSATION_ID = ""
# 🧠 Navodila ai agenta
AI_AGENT_INSTRUCTIONS = """
Ti si AI pomočnik učitelju tehnike in tehnologije v osnovni šoli.
Tvoja naloga je pomagati pri pripravi učnih ur, pri iskanju idej za učne dejavnosti,
ter pri oblikovanju preprostih razlag za učence.
"""
def get_conversation_id():
"""Ustvari nov pogovor, če ID še ni določen."""
global CONVERSATION_ID
if not CONVERSATION_ID:
conv = client.conversations.create()
CONVERSATION_ID = conv.id
print(f"[Ustvarjen nov ID pogovora]: {CONVERSATION_ID}")
else:
print(f"[Uporablja se obstoječi ID pogovora]: {CONVERSATION_ID}")
return CONVERSATION_ID
def start_chat():
conversation_id = get_conversation_id()
print("\nZačni pogovor (vpiši 'exit' za izhod)\n")
while True:
user_input = input("👤 Ti: ").strip()
if user_input.lower() in ["exit", "quit"]:
print("🔚 Pogovor zaključen.")
break
response = client.responses.create(
model="gpt-5-nano",
conversation=conversation_id,
input=[
{"role": "system", "content": AI_AGENT_INSTRUCTIONS},
{"role": "user", "content": user_input}
]
)
print(f"\n🧠 Asistent: {response.output_text}\n")
if __name__ == "__main__":
start_chat()
Preverite:
- Ali agent prepozna svojo vlogo vedno znova?
- Ali agent zna povazovati kontekst pogovora?
Če v klicu uporabljamo conversation_id, potem ni treba vsakič znova pošiljati sporočila sistema,
({"role": "system", "content": INSTRUCTIONS})
saj se pogovor beleži v celoti. Smiselno pošiljanje ponovnih napotkov pa bi bilo v primeru, če želimo spremeniti sistemska navodila med pogovorom, ali pa da bi ai asistenta radi ponovno spomnili na njegova navodila.
Zato lahko funkcijo start_chat() dopolnite tako, da navodila pošljemo le ko pogovor začnemo znova.
def start_chat():
conversation_id = get_conversation_id()
print("\nZačni pogovor (vpiši 'exit' za izhod)\n")
this_is_first_message = True
while True:
user_input = input("👤 Ti: ").strip()
if user_input.lower() in ["exit", "quit"]:
print("🔚 Pogovor zaključen.")
break
if this_is_first_message :
# send system message only once at the beginning of the conversation
system_message = {"role": "system", "content": AI_AGENT_INSTRUCTIONS}
else:
system_message = None
input_messages = []
if system_message:
input_messages.append(system_message)
input_messages.append({"role": "user", "content": user_input})
response = client.responses.create(
model="gpt-5-nano",
conversation=CONVERSATION_ID,
input=input_messages
)
print(f"\n🧠 Asistent: {response.output_text}\n")