interaktivnější verze
This commit is contained in:
parent
39b6842b98
commit
41a392c0de
@ -34,7 +34,7 @@ FUNCTIONS = [
|
|||||||
|
|
||||||
# === 3. Pomocné funkce ===
|
# === 3. Pomocné funkce ===
|
||||||
def vytvor_nove_vlakno():
|
def vytvor_nove_vlakno():
|
||||||
"""Vytvoří nové vlákno pro zachování historie."""
|
"""Vytvoří nové vlákno pro zachování historie konverzace."""
|
||||||
thread = openai.beta.threads.create()
|
thread = openai.beta.threads.create()
|
||||||
return thread.id
|
return thread.id
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ def spust_prikaz(prikaz):
|
|||||||
return f"Chyba při vykonávání příkazu:\n{e.output}"
|
return f"Chyba při vykonávání příkazu:\n{e.output}"
|
||||||
|
|
||||||
def posli_dotaz_do_assistenta(prompt):
|
def posli_dotaz_do_assistenta(prompt):
|
||||||
"""Odesílá dotaz (v přirozeném jazyce) do asistenta a vrací jeho návrh příkazu."""
|
"""Odesílá dotaz v přirozeném jazyce do asistenta a vrací jeho odpověď."""
|
||||||
global thread_id
|
global thread_id
|
||||||
if thread_id is None:
|
if thread_id is None:
|
||||||
thread_id = vytvor_nove_vlakno()
|
thread_id = vytvor_nove_vlakno()
|
||||||
@ -73,7 +73,7 @@ def posli_dotaz_do_assistenta(prompt):
|
|||||||
return messages.data[0].content[0].text.value
|
return messages.data[0].content[0].text.value
|
||||||
|
|
||||||
def posli_prikaz_do_assistenta(command):
|
def posli_prikaz_do_assistenta(command):
|
||||||
"""Odesílá schválený příkaz k vykonání asistentovi pomocí funkce execute_shell_command."""
|
"""Odesílá schválený příkaz k vykonání asistentovi a vrací výstup příkazu."""
|
||||||
global thread_id
|
global thread_id
|
||||||
if thread_id is None:
|
if thread_id is None:
|
||||||
thread_id = vytvor_nove_vlakno()
|
thread_id = vytvor_nove_vlakno()
|
||||||
@ -112,16 +112,41 @@ def posli_prikaz_do_assistenta(command):
|
|||||||
messages = openai.beta.threads.messages.list(thread_id=thread_id)
|
messages = openai.beta.threads.messages.list(thread_id=thread_id)
|
||||||
return messages.data[0].content[0].text.value
|
return messages.data[0].content[0].text.value
|
||||||
|
|
||||||
|
def is_command_response(response):
|
||||||
|
"""Vrací True, pokud odpověď začíná prefixem indikujícím návrh příkazu."""
|
||||||
|
return response.strip().lower().startswith("navrhovaný příkaz:")
|
||||||
|
|
||||||
|
def extract_command(response):
|
||||||
|
"""Odstraní prefix 'Navrhovaný příkaz:' a vrátí čistý shellový příkaz."""
|
||||||
|
prefix = "navrhovaný příkaz:"
|
||||||
|
if response.strip().lower().startswith(prefix):
|
||||||
|
return response.strip()[len(prefix):].strip()
|
||||||
|
return response.strip()
|
||||||
|
|
||||||
|
def provide_help():
|
||||||
|
"""Vrací text s nápovědou o funkcích Robovojtíka."""
|
||||||
|
help_text = (
|
||||||
|
"Nápověda k Robovojtikovi – Linuxový Shell Asistent:\n\n"
|
||||||
|
"Funkce:\n"
|
||||||
|
" • Převádí dotazy v přirozeném jazyce na návrhy shellových příkazů.\n"
|
||||||
|
" • Před spuštěním příkazu vždy čeká na potvrzení od uživatele.\n"
|
||||||
|
" • Přímé příkazy zadejte s prefixem 'cmd:' (např. 'cmd: ls -la').\n"
|
||||||
|
" • Pro ukončení Robovojtíka zadejte 'vypni' nebo 'exit'.\n\n"
|
||||||
|
"Pokud potřebujete další pomoc, zeptejte se!"
|
||||||
|
)
|
||||||
|
return help_text
|
||||||
|
|
||||||
# === 4. Hlavní interaktivní smyčka ===
|
# === 4. Hlavní interaktivní smyčka ===
|
||||||
def main():
|
def main():
|
||||||
print("Linuxový shell s OpenAI Assistant v2 API a funkcemi.")
|
print("Linuxový shell s OpenAI Assistant v2 API a funkcemi.")
|
||||||
print("Pro přímý příkaz použij prefix 'cmd:'")
|
print("Pro přímý příkaz použij prefix 'cmd:'")
|
||||||
print("Pro ukončení Robovojtíka zadej 'vypni' nebo 'exit'.")
|
print("Pro ukončení Robovojtíka zadej 'vypni' nebo 'exit'.")
|
||||||
|
print("Pro nápovědu zadej 'nápověda' nebo 'help'.")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
user_input = input("\nZadej příkaz v přirozeném jazyce: ").strip()
|
user_input = input("\nZadej příkaz v přirozeném jazyce: ").strip()
|
||||||
|
|
||||||
# Ukončení shellu Robovojtíka
|
# Ukončení Robovojtíka
|
||||||
if user_input.lower() in ["vypni", "exit"]:
|
if user_input.lower() in ["vypni", "exit"]:
|
||||||
potvrzeni = input("Skutečně chceš ukončit Robovojtíka? (y/n): ").strip().lower()
|
potvrzeni = input("Skutečně chceš ukončit Robovojtíka? (y/n): ").strip().lower()
|
||||||
if potvrzeni == "y":
|
if potvrzeni == "y":
|
||||||
@ -131,6 +156,11 @@ def main():
|
|||||||
print("Ukončení zrušeno. Pokračuji.")
|
print("Ukončení zrušeno. Pokračuji.")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# Zobrazení nápovědy
|
||||||
|
if user_input.lower() in ["nápověda", "help"]:
|
||||||
|
print("\n" + provide_help())
|
||||||
|
continue
|
||||||
|
|
||||||
# Přímý příkaz bez asistenta
|
# Přímý příkaz bez asistenta
|
||||||
if user_input.startswith("cmd:"):
|
if user_input.startswith("cmd:"):
|
||||||
command = user_input[4:].strip()
|
command = user_input[4:].strip()
|
||||||
@ -144,18 +174,27 @@ def main():
|
|||||||
print("Příkaz nebyl spuštěn.")
|
print("Příkaz nebyl spuštěn.")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Normální dotaz pro asistenta, který navrhne příkaz
|
# Dotaz pro asistenta – očekává návrh příkazu
|
||||||
assistant_response = posli_dotaz_do_assistenta(user_input)
|
assistant_response = posli_dotaz_do_assistenta(user_input)
|
||||||
|
|
||||||
|
# Pokud odpověď nevypadá jako návrh příkazu, zobrazíme ji jako informativní odpověď
|
||||||
|
if not is_command_response(assistant_response):
|
||||||
|
print("\nRobovojtík odpovídá:")
|
||||||
|
print(assistant_response)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Pokud odpověď obsahuje navržený příkaz, vyzveme uživatele k potvrzení
|
||||||
print("\nRobovojtík navrhuje příkaz:")
|
print("\nRobovojtík navrhuje příkaz:")
|
||||||
print(assistant_response)
|
print(assistant_response)
|
||||||
|
|
||||||
potvrzeni = input("Spustit tento příkaz? (y/n): ").strip().lower()
|
potvrzeni = input("Spustit tento příkaz? (y/n): ").strip().lower()
|
||||||
if potvrzeni == "y":
|
if potvrzeni == "y":
|
||||||
execution_result = posli_prikaz_do_assistenta(assistant_response)
|
command_to_execute = extract_command(assistant_response)
|
||||||
|
execution_result = posli_prikaz_do_assistenta(command_to_execute)
|
||||||
print("\nVýstup příkazu:")
|
print("\nVýstup příkazu:")
|
||||||
print(execution_result)
|
print(execution_result)
|
||||||
else:
|
else:
|
||||||
print("Příkaz nebyl spuštěn. Čekám na další vstup.")
|
print("Příkaz nebyl spuštěn. Čekám na další vstup.")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main(
|
Loading…
x
Reference in New Issue
Block a user