AI Agents · Ders

CLI Aracılarında Akış Çıktısı

Uçbirim arabirimlerinde akış halinde gelen belirteçleri karakter karakter yazdırma.

4. ders / 413 adım

CLI Aracılarında Akış Çıktısı, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 4. 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.

CLI Ajanları için Akış Neden Önemlidir

Akış olmadan CLI ajanınız, LLM yanıtının tamamı hazır olana kadar hiçbir şey yazdırmaz; bu işlem 5-30 saniye sürebilir. Kullanıcılar programın çöküp çökmediğini merak ederek boş bir uçbirime bakar.

Akış sayesinde belirteçler oluşturuldukça görünür ve anında geri bildirim sağlanarak çok daha iyi bir deneyim sunulur.

OpenAI SDK'sinde Akışı Etkinleştirme

chat.completions.create() işlevine stream=True iletin. Çağrı, eksiksiz bir yanıt nesnesi yerine bir oluşturucu döndürür. Parçalar geldikçe işlemek için bu oluşturucu üzerinde yineleme yapın.

import openai

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

stream = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': 'Explain Python generators in 3 sentences.'}],
    stream=True  # <-- enable streaming
)

# Each chunk arrives as it is generated
for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end='', flush=True)

print()  # newline after the response is complete

print() ve sys.stdout.write() Karşılaştırması

Akış sırasında print(text, end='', flush=True) veya ardından sys.stdout.flush() gelen sys.stdout.write(text) kullanın. flush=True olmadan Python çıktıyı arabelleğe alıp tek seferde yazdırabilir; bu da akışın amacını boşa çıkarır.

import sys
import openai

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

def stream_to_terminal(messages: list):
    stream = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=messages,
        stream=True
    )

    full_response = ''
    for chunk in stream:
        token = chunk.choices[0].delta.content or ''
        full_response += token

        # Option 1: print with flush
        print(token, end='', flush=True)

        # Option 2: sys.stdout.write + flush
        # sys.stdout.write(token)
        # sys.stdout.flush()

    print()  # final newline
    return full_response

Akış Sırasında Eksiksiz Yanıtı Toplama

Akış tamamlandıktan sonra depolama, daha ileri işleme veya görüntüleme için genellikle yanıt metninin tamamına ihtiyaç duyarsınız. Belirteçleri yazdırırken bir dizede biriktirin.

import openai

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

def stream_and_collect(messages: list) -> str:
    full_text = ''

    print('Agent: ', end='', flush=True)

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

    for chunk in stream:
        token = chunk.choices[0].delta.content or ''
        full_text += token
        print(token, end='', flush=True)

    print()  # newline
    return full_text

# The return value contains the complete response for storage
# response_text = stream_and_collect(history)
# history.append({'role': 'assistant', 'content': response_text})

AsyncOpenAI ile Eşzamansız Akış

Eşzamansız ajan mimarileri için, olay döngüsünü engellemeden akış parçaları üzerinde yineleme yapmak üzere AsyncOpenAI ve async for kullanın.

import asyncio
import openai

async def async_stream_agent(query: str) -> str:
    client = openai.AsyncOpenAI(api_key='YOUR_API_KEY')

    stream = await client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': query}],
        stream=True
    )

    full_text = ''
    print('Agent: ', end='', flush=True)

    async for chunk in stream:
        token = chunk.choices[0].delta.content or ''
        full_text += token
        print(token, end='', flush=True)

    print()
    return full_text

# asyncio.run(async_stream_agent('What is asyncio?'))

finish_reason ile Akışın Sonunu Algılama

Akıştaki son parçada boş olmayan bir finish_reason bulunur. Akışın neden sona erdiğini öğrenmek için bunu denetleyin: 'stop' = normal tamamlanma, 'length' = kesilmiş yanıt, 'tool_calls' = işlev çağrısı gerekiyor.

import openai

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

def stream_with_finish_detection(messages: list):
    stream = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=messages,
        stream=True
    )

    finish_reason = None
    for chunk in stream:
        delta = chunk.choices[0].delta
        if delta.content:
            print(delta.content, end='', flush=True)
        if chunk.choices[0].finish_reason:
            finish_reason = chunk.choices[0].finish_reason

    print()

    if finish_reason == 'length':
        print('[WARNING: Response was truncated. Try increasing max_tokens.]')
    elif finish_reason == 'stop':
        pass  # normal completion

    return finish_reason

Uçbirim Çıktısında ANSI Renkleri

ANSI kaçış kodları, uçbirim çıktısına renk ekler. Bunları ajan önekini, kullanıcı girdi istemini ve uyarıları görsel olarak birbirinden ayırmak için kullanın. colorama kitaplığı, Windows da dahil olmak üzere platformlar arası destek sağlar.

# pip install colorama
from colorama import Fore, Style, init
init(autoreset=True)  # reset color after each print

def print_colored_stream(messages: list, client):
    # Print agent prefix in cyan
    print(Fore.CYAN + 'Agent: ' + Style.RESET_ALL, end='', flush=True)

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

    for chunk in stream:
        token = chunk.choices[0].delta.content or ''
        print(token, end='', flush=True)

    print()

# Also useful:
# print(Fore.GREEN + 'Success!') — green
# print(Fore.RED + 'Error!') — red
# print(Fore.YELLOW + 'Warning') — yellow

Daha Zengin Uçbirim Çıktısı için Rich Kitaplığı

rich kitaplığı, uçbirimde Markdown görüntüleme, söz dizimi vurgulanmış kod blokları, tablolar ve dönen göstergeler sağlar. Akışla iletilen ajan çıktısıyla iyi bir uyum gösterir.

# pip install rich
from rich.console import Console
from rich.live import Live
from rich.markdown import Markdown

console = Console()

def stream_with_rich(messages: list, client):
    full_text = ''

    with Live(console=console, refresh_per_second=10) as live:
        stream = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            stream=True
        )

        for chunk in stream:
            token = chunk.choices[0].delta.content or ''
            full_text += token
            # Render accumulated text as Markdown in real time
            live.update(Markdown(full_text))

    return full_text

Araç Çağrılarıyla Akış

Akış işlev çağrısıyla birleştirildiğinde tool_calls alanı da parçalar halinde akışla iletilir. Ayrıştırmadan önce JSON dizesini parçalar arasında biriktirin.

import json
import openai

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

def stream_with_tools(messages: list, tools: list) -> dict:
    stream = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=messages,
        tools=tools,
        stream=True
    )

    tool_call_chunks = {}
    for chunk in stream:
        delta = chunk.choices[0].delta
        if delta.tool_calls:
            for tc in delta.tool_calls:
                idx = tc.index
                if idx not in tool_call_chunks:
                    tool_call_chunks[idx] = {'name': '', 'args': ''}
                if tc.function.name:
                    tool_call_chunks[idx]['name'] += tc.function.name
                if tc.function.arguments:
                    tool_call_chunks[idx]['args'] += tc.function.arguments

    # Parse accumulated tool calls
    return {v['name']: json.loads(v['args']) for v in tool_call_chunks.values()}

Belirteç Sayacını Görüntüleme

Kullanıcıların kullanımı izlemesine ve maliyetleri anlamasına yardımcı olmak için akış sırasında canlı bir belirteç sayacı gösterin. stream_options={'include_usage': True} ayarlandığında OpenAI akışı, son parçada kullanım verilerini içerir.

import openai

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

def stream_with_token_count(messages: list):
    stream = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=messages,
        stream=True,
        stream_options={'include_usage': True}
    )

    for chunk in stream:
        delta = chunk.choices[0].delta
        if delta.content:
            print(delta.content, end='', flush=True)

        # Last chunk includes usage
        if chunk.usage:
            print(f'\n[Tokens: prompt={chunk.usage.prompt_tokens}, '
                  f'completion={chunk.usage.completion_tokens}, '
                  f'total={chunk.usage.total_tokens}]')

Akış için En İyi Uygulamalar

CLI ajanları için akış çıktısına yönelik en iyi uygulamaların özeti:

  • Arabelleğe almayı önlemek için her zaman flush=True veya sys.stdout.flush() kullanın
  • Akıştan sonra depolamak üzere belirteçleri bir dizede biriktirin
  • Kesmeyi algılamak için finish_reason değerini denetleyin
  • Görsel açıklık için ANSI renklerini veya rich kullanın
  • Araç çağrısı akışını, JSON bağımsız değişken parçalarını biriktirerek yönetin

Bilgi Kontrolü: Akış Çıktısı

CLI ajanlarında akış çıktısı konusundaki anlayışınızı sınayın.

Özet: CLI Aracılarında Akış Çıktısı

Artık duyarlı ve modern bir kullanım sunan akış özellikli CLI aracıları oluşturabilirsiniz:

  • OpenAI SDK ile akışı etkinleştirmek için stream=True değerini iletin
  • Belirteçleri hemen görüntülemek için print(token, end='', flush=True) kullanın
  • Akış sonrası işlemler için belirteçleri bir dizede biriktirin
  • Kesilme durumunu saptamak için son parçadaki finish_reason değerini kontrol edin
  • Asenkron aracılar için AsyncOpenAI ile async for kullanın
  • Daha özenli bir terminal deneyimi için ANSI renkleri veya rich ekleyin
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

“CLI Aracılarında Akış Çıktısı” dersi ücretsiz mi?

Evet — “CLI Aracılarında Akış Çıktısı” 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.

“CLI Aracılarında Akış Çıktısı” dersinde ne öğreneceğim?

Uçbirim arabirimlerinde akış halinde gelen belirteçleri karakter karakter yazdırma. 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 4. dersidir.

“CLI Aracılarında Akış Çıktısı” 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