AI Agents · Ders

Etkileşimli REPL Tarzı Aracılar

Uçbirim aracılarında girdi döngüleri, geçmiş ve çok turlu konuşma.

2. ders / 413 adım

Etkileşimli REPL Tarzı Aracılar, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

REPL Tarzı Ajan Nedir?

REPL (Okuma-Değerlendirme-Yazdırma Döngüsü), girdi yazdığınız, çıktı aldığınız ve devam ettiğiniz etkileşimli bir uçbirim oturumudur. Uçbirimdeki sohbet ajanları tam olarak bu şekilde çalışır: kullanıcı bir ileti yazar, ajan yanıt verir ve kullanıcı çıkana kadar konuşma devam eder.

Temel REPL Döngüsü

En basit REPL, input() ile kullanıcı girdisini okuyan, bunu işleyen ve sonucu yazdıran bir while True döngüsüdür. Kullanıcı çıkış sinyali verene kadar döngü sonsuza dek çalışır.

def run_agent_repl(inputs):
    print('Agent started. Type /exit to quit.')
    conversation_history = []
    for user_input in inputs:
        user_input = user_input.strip()
        if not user_input:
            continue
        if user_input == '/exit':
            print('Goodbye!')
            break
        conversation_history.append({'role': 'user', 'content': user_input})
        agent_reply = f'[Agent reply to: {user_input}]'
        conversation_history.append({'role': 'assistant', 'content': agent_reply})
        print(f'Agent: {agent_reply}')

run_agent_repl(['Hello agent', 'What can you do?', '/exit'])

KeyboardInterrupt Durumunu Sorunsuz Yönetme

Kullanıcı Ctrl+C tuşlarına bastığında Python bir KeyboardInterrupt oluşturur. Yığın izlemesi yerine uygun bir veda iletisi yazdırmak için bunu en üst düzeyde yakalayın.

def run_agent_repl():
    print('Agent ready. Press Ctrl+C to exit.')
    conversation_history = []

    try:
        while True:
            user_input = input('You: ').strip()
            if not user_input:
                continue

            conversation_history.append({'role': 'user', 'content': user_input})
            reply = '[mocked agent response]'
            conversation_history.append({'role': 'assistant', 'content': reply})
            print(f'Agent: {reply}')

    except KeyboardInterrupt:
        print('\nSession ended. Goodbye!')
    except EOFError:
        # Triggered when stdin is closed (piped input ends)
        print('\nEnd of input. Exiting.')

if __name__ == '__main__':
    import builtins
    _demo_inputs = iter(['What agents can you build?', EOFError])
    def _fake_input(prompt=''):
        val = next(_demo_inputs)
        if val is EOFError:
            raise EOFError
        print(prompt + val)
        return val
    builtins.input = _fake_input
    run_agent_repl()

Birden Çok Turlu Konuşma Geçmişini Koruma

Ajana konuşma belleği kazandırmak için iletilerin bir listesini tutun ve her turda geçmişin tamamını LLM'ye iletin. Ajanın kişiliğini belirleyen bir sistem iletisiyle başlayın.

import openai

client = openai.OpenAI(api_key='YOUR_API_KEY')

def run_chat_repl():
    history = [
        {'role': 'system', 'content': 'You are a helpful AI assistant.'}
    ]

    print('Chat started. Type /exit to quit.')

    try:
        while True:
            user_input = input('You: ').strip()
            if not user_input or user_input == '/exit':
                break

            history.append({'role': 'user', 'content': user_input})

            response = client.chat.completions.create(
                model='gpt-4o-mini',
                messages=history
            )

            reply = response.choices[0].message.content
            history.append({'role': 'assistant', 'content': reply})
            print(f'Agent: {reply}')

    except KeyboardInterrupt:
        print('\nGoodbye!')

readline: Girdi Geçmişi ve Düzenleme

readline modülü (Unix/Mac), gerçek bir kabukta olduğu gibi ok tuşlarıyla önceki girdiler arasında gezinmeyi sağlar. Kullanıcılar önceki iletileri geri getirmek için yukarı ok tuşuna basabilir.

try:
    import readline  # available on Unix/Mac, not Windows
    # Enable persistent history between sessions
    import os
    HISTORY_FILE = os.path.expanduser('~/.agent_history')
    try:
        readline.read_history_file(HISTORY_FILE)
    except FileNotFoundError:
        pass

    import atexit
    atexit.register(readline.write_history_file, HISTORY_FILE)
    readline.set_history_length(500)
    print('History enabled (use up/down arrows)')
except ImportError:
    pass  # readline not available on Windows

# After this, input() automatically has history support

Yerleşik Eğik Çizgi Komutları

REPL ajanınıza yaygın işlemler için yerleşik eğik çizgi komutları ekleyin: /help, /exit, konuşmayı sıfırlamak için /clear ve geçmiş iletileri görüntülemek için /history.

def handle_command(cmd: str, history: list) -> bool:
    'Returns True if the command was handled, False if it is a regular message'
    if cmd == '/exit' or cmd == '/quit':
        print('Goodbye!')
        raise SystemExit(0)

    elif cmd == '/help':
        print('Commands: /exit, /clear, /history, /help')
        return True

    elif cmd == '/clear':
        # Keep only the system message
        system = history[0] if history and history[0]['role'] == 'system' else None
        history.clear()
        if system:
            history.append(system)
        print('[Conversation cleared]')
        return True

    elif cmd == '/history':
        for i, msg in enumerate(history):
            if msg['role'] != 'system':
                print(f'  [{msg["role"]}] {msg["content"][:80]}')
        return True

    return False  # not a command, treat as regular message

if __name__ == '__main__':
    demo_history = [
        {'role': 'system', 'content': 'You are a helpful agent.'},
        {'role': 'user', 'content': 'Hi there'},
        {'role': 'assistant', 'content': 'Hello! How can I help?'},
    ]
    handle_command('/help', demo_history)
    handle_command('/history', demo_history)

Konuşma Geçmişi Uzunluğunu Sınırlama

Konuşma geçmişinin tamamını her turda LLM'ye iletmek, belirteç sayısını doğrusal olarak artırır. Maliyetleri denetlemek için geçmişi son N iletiyle sınırlayın ve sistem iletisini koruyun.

def trim_history(history: list, max_turns: int = 10) -> list:
    system_messages = [m for m in history if m['role'] == 'system']
    non_system = [m for m in history if m['role'] != 'system']

    # Keep the last max_turns messages (each turn = 1 user + 1 assistant)
    max_messages = max_turns * 2
    trimmed = non_system[-max_messages:]

    return system_messages + trimmed

# Usage in the REPL loop:
# history.append({'role': 'user', 'content': user_input})
# trimmed = trim_history(history, max_turns=10)
# response = client.chat.completions.create(model='gpt-4o-mini', messages=trimmed)
print('Trimming history prevents token count from growing unboundedly')

Karşılama Afişi Görüntüleme

Karşılama afişi, REPL'inizi daha özenli gösterir. Ajanın adı, sürümü ve kullanılabilir komutlarıyla birlikte başlangıçta bir kez yazdırın. Renk için basit ASCII sanatı veya rich kitaplığını kullanın.

def print_banner():
    banner = '''
====================================
  AI Research Agent v1.0
====================================
  Type your question to begin.
  Commands: /help  /clear  /exit
====================================
    '''
    print(banner)

# Or with rich colors:
# from rich.console import Console
# from rich.panel import Panel
# console = Console()
# console.print(Panel('[bold cyan]AI Research Agent[/] v1.0', subtitle='Type /help for commands'))

print_banner()

Yazma Göstergeleri Gösterme

LLM çağrılarının tamamlanması birkaç saniye sürebilir. Kullanıcıların ajanın işlem yaptığını anlaması için beklerken 'düşünüyor...' iletisini gösterin. Yanıt geldiğinde bu iletiyi temizleyin.

import sys
import threading
import time

def thinking_spinner(stop_event: threading.Event):
    frames = ['|', '/', '-', '\\']
    i = 0
    while not stop_event.is_set():
        sys.stdout.write(f'\rAgent is thinking... {frames[i % 4]}')
        sys.stdout.flush()
        time.sleep(0.1)
        i += 1
    sys.stdout.write('\r' + ' ' * 30 + '\r')  # clear the line
    sys.stdout.flush()

def call_agent_with_spinner(query: str) -> str:
    stop = threading.Event()
    spinner = threading.Thread(target=thinking_spinner, args=(stop,))
    spinner.start()

    # result = agent.run(query)  # the actual slow call
    time.sleep(1)  # simulating work
    result = 'The answer is 42.'

    stop.set()
    spinner.join()
    return result

if __name__ == '__main__':
    answer = call_agent_with_spinner('What is 6 * 7?')
    print(f'\nFinal answer: {answer}')

Oturumu Dosyaya Kaydetme

Kullanıcıların oturumun sonunda konuşmayı bir dosyaya kaydetmesine izin verin. Bu özellik, ajanın bulduklarının kaydını tutmak istediğiniz araştırma oturumları için kullanışlıdır.

import json
import datetime
import os

def save_session(history: list, directory: str = 'sessions'):
    os.makedirs(directory, exist_ok=True)
    timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
    filename = os.path.join(directory, f'session_{timestamp}.json')

    with open(filename, 'w') as f:
        json.dump({
            'saved_at': timestamp,
            'messages': history
        }, f, indent=2)

    print(f'Session saved to {filename}')

# Usage in REPL on /save command:
# save_session(conversation_history)

if __name__ == '__main__':
    import tempfile
    demo_dir = tempfile.mkdtemp()
    demo_history = [
        {'role': 'user', 'content': 'Hello'},
        {'role': 'assistant', 'content': 'Hi! How can I help?'},
    ]
    save_session(demo_history, directory=demo_dir)

Eksiksiz REPL Ajanı Şablonu

Her şeyi bir araya getiren, geçmiş yönetimi, eğik çizgi komutları, klavye kesintisi yönetimi ve oturum kaydetme özelliklerine sahip, üretime hazır bir REPL şablonu.

def run_repl(agent):
    history = [{'role': 'system', 'content': 'You are a helpful AI assistant.'}]
    print('Agent ready. Type /help for commands.')
    try:
        while True:
            user_input = input('You: ').strip()
            if not user_input:
                continue
            if user_input.startswith('/'):
                handle_command(user_input, history)
                continue
            history.append({'role': 'user', 'content': user_input})
            trimmed = trim_history(history, max_turns=10)
            reply = agent.run(trimmed)
            history.append({'role': 'assistant', 'content': reply})
            print(f'Agent: {reply}')
    except KeyboardInterrupt:
        print('\nSession ended.')
        save_session(history)

Bilgi Kontrolü: REPL Tarzı Ajanlar

Etkileşimli REPL ajanları konusundaki anlayışınızı sınayın.

Özet: Etkileşimli REPL Tarzı Ajanlar

Artık uçbirim için tüm özelliklere sahip etkileşimli bir ajan oluşturabilirsiniz:

  • Temel okuma döngüsü olarak while True: input() kullanın
  • Ctrl+C ile temiz bir çıkış yapmak için KeyboardInterrupt durumunu yakalayın
  • Birden çok turda belleği korumak için conversation_history listesini tutun
  • Ok tuşlarıyla girdi geçmişi için readline kullanın
  • /help, /clear ve /exit eğik çizgi komutlarını uygulayın
  • Sınırsız belirteç büyümesini önlemek için geçmişi kısaltın
  • LLM çağrıları sırasında dönen bir gösterge veya ilerleme göstergesi gösterin
Başlamak ücretsiz

Yapay zeka eğitmeniyle AI Agents öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
60
Dersler
239

Sıkça Sorulan Sorular

“Etkileşimli REPL Tarzı Aracılar” dersi ücretsiz mi?

Evet — “Etkileşimli REPL Tarzı Aracılar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Etkileşimli REPL Tarzı Aracılar” dersinde ne öğreneceğim?

Uçbirim aracılarında girdi döngüleri, geçmiş ve çok turlu konuşma. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Etkileşimli REPL Tarzı Aracılar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Komut Satırı Aracı Arabirimleri Oluşturma
  2. Etkileşimli REPL Tarzı Aracılar
  3. Bağımsız Değişken Ayrıştırma ve Yardım Metni
  4. CLI Aracılarında Akış Çıktısı
← AI Agents Sayfasına Dön