Etkileşimli REPL Tarzı Aracılar
Uçbirim aracılarında girdi döngüleri, geçmiş ve çok turlu konuşma.
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 supportYerleş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
KeyboardInterruptdurumunu yakalayın - Birden çok turda belleği korumak için
conversation_historylistesini tutun - Ok tuşlarıyla girdi geçmişi için
readlinekullanın /help,/clearve/exiteğ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
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
- Komut Satırı Aracı Arabirimleri Oluşturma
- Etkileşimli REPL Tarzı Aracılar
- Bağımsız Değişken Ayrıştırma ve Yardım Metni
- CLI Aracılarında Akış Çıktısı