interaktivnější verze
This commit is contained in:
parent
39b6842b98
commit
41a392c0de
@ -34,7 +34,7 @@ FUNCTIONS = [
|
||||
|
||||
# === 3. Pomocné funkce ===
|
||||
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()
|
||||
return thread.id
|
||||
|
||||
@ -47,7 +47,7 @@ def spust_prikaz(prikaz):
|
||||
return f"Chyba při vykonávání příkazu:\n{e.output}"
|
||||
|
||||
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
|
||||
if thread_id is None:
|
||||
thread_id = vytvor_nove_vlakno()
|
||||
@ -73,7 +73,7 @@ def posli_dotaz_do_assistenta(prompt):
|
||||
return messages.data[0].content[0].text.value
|
||||
|
||||
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
|
||||
if thread_id is None:
|
||||
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)
|
||||
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 ===
|
||||
def main():
|
||||
print("Linuxový shell s OpenAI Assistant v2 API a funkcemi.")
|
||||
print("Pro přímý příkaz použij prefix 'cmd:'")
|
||||
print("Pro ukončení Robovojtíka zadej 'vypni' nebo 'exit'.")
|
||||
|
||||
print("Pro nápovědu zadej 'nápověda' nebo 'help'.")
|
||||
|
||||
while True:
|
||||
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"]:
|
||||
potvrzeni = input("Skutečně chceš ukončit Robovojtíka? (y/n): ").strip().lower()
|
||||
if potvrzeni == "y":
|
||||
@ -131,6 +156,11 @@ def main():
|
||||
print("Ukončení zrušeno. Pokračuji.")
|
||||
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
|
||||
if user_input.startswith("cmd:"):
|
||||
command = user_input[4:].strip()
|
||||
@ -144,18 +174,27 @@ def main():
|
||||
print("Příkaz nebyl spuštěn.")
|
||||
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)
|
||||
|
||||
# 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(assistant_response)
|
||||
|
||||
potvrzeni = input("Spustit tento příkaz? (y/n): ").strip().lower()
|
||||
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(execution_result)
|
||||
else:
|
||||
print("Příkaz nebyl spuštěn. Čekám na další vstup.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
main(
|
Loading…
x
Reference in New Issue
Block a user