Ana içeriğe atla

GLM-5.3-Flash Eğitimi: Çoklu Aracılı Bir Hisse Senedi Analisti Oluşturun

GLM-5.3-Flash ve CrewAI kullanarak temel, teknik ve haber analizlerini kapsayan 3 uzman LLM aracısı oluşturun ve bulgularını AL/SAT sinyaline birleştirin.
Güncel 31 Ağu 2026  · 12 dk. oku

Yapay Zekâyla Keşfet

ChatGPTClaudePerplexity

Büyük dil modelleri, onlara uzmanlaşmış roller, araçlar ve canlı verilere erişim verdiğimizde daha kullanışlı hale gelir. Tek bir modele güvenmek yerine, her aracının analizin farklı bir bölümüne odaklandığı küçük bir araştırma ekibi kurabiliriz.

Bu eğitimde tam olarak bunu yapacağız: GLM-5.3-Flash ve CrewAI kullanarak çoklu aracılı bir hisse senedi analisti oluşturacağız. Üç aracı temel verileri, teknik göstergeleri ve son haberleri analiz ederken, bir portföy yöneticisi bulgularını nihai AL, TUT veya SAT araştırma sinyalinde birleştirir.

Önce iş akışını bir Jupyter Notebook’ta test edeceğiz, ardından bunu hisseleri analiz edebilen ve takip sorularını yanıtlayabilen basit bir terminal arayüzüne dönüştüreceğiz.

Projede şunlar kullanılır:

  • GLM-5.3-Flash akıl yürütme için
  • CrewAI aracı koordinasyonu için
  • Finnhub piyasa ve temel veriler için
  • Yahoo Finance geçmiş fiyatlar için
  • Tavily güncel haberler için
  • Pandas ve NumPy teknik göstergeler için

Çerçeveye yeni misiniz? CrewAI ile Yapay Zekâ Aracıları Oluşturma kursumuz aracıları, ekipleri ve akışları sıfırdan ele alır.

Çoklu Aracılı Uygulama için Neden GLM-5.3-Flash Kullanılmalı

GLM-5.3-Flash, performans, verimlilik ve fiyat arasında etkileyici bir denge sunar. Tam bir genel bakış için GLM-5.3-Flash rehberimizi ve Qwen3.8-Flash-Next ile karşılaştırma yazımızı okuyun.

Rekabetçi performans ve verimlilik

Artificial Analysis Intelligence Index üzerinde 57 puan alır; bu da onu önde gelen modeller arasına yerleştirir ve çok daha pahalı bazı sınır modellerle rekabetçi kılar. Örneğin:

  • GPT-5.6 Sol da 57 alır (high akıl yürütme çabasıyla) fakat giriş token’larında 25 kat, çıkış token’larında 40 kat daha pahalıdır.

  • Claude Sonnet 5 ise max akıl yürütme çabasında 55 ile biraz daha düşük puan alır. Girdi/çıktı token’larında GLM-5.3-Flash’ten 20x/30x daha pahalıdır.

Toplam 320B parametreye sahiptir, ancak token başına yalnızca yaklaşık 18B parametre aktiftir; bu da göreli olarak hesaplama açısından verimli kalırken güçlü performans sunmasını sağlar. 

Artificial Analysis Intelligence Index'te GLM-5.3-Flash 8. sırada

Kaynak: AI Model & API Providers Analysis | Artificial Analysis 

Çekici fiyatlandırma

Belirttiğim gibi, bu performans karşılaştırmalı olarak düşük API fiyatlandırmasıyla gelir. Yazım sırasında OpenRouter, GLM-5.3-Flash’i milyon giriş token’ı başına $0.075 ve milyon çıkış token’ı başına $0.25 olmak üzere %50 indirimle sunuyor. 

Normal fiyatı $0.15/$0.50 iken bile, OpenAI’ın GPT-5.6 Luna modeli gibi modellere göre daha ucuz kalır; Luna $0.20/$1.20’dir (AA Intelligence Index’te max akıl yürütmeyle 52). Bu da onu yalnızca deneyler için değil, daha büyük, üretim düzeyi aracı uygulamaları için de cazip kılar. 

OpenRouter'da GLM-5.3-Flash sağlayıcıları

Kaynak: GLM 5.3 Flash - API Pricing & Benchmarks | OpenRouter 

Çoklu aracılı bir sistem kurarken bu daha da önemlidir; çünkü tek bir kullanıcı isteği arka planda birçok LLM çağrısını tetikleyebilir. Tek bir LLM aracısı akıl yürütme, araç seçimi, araç çıktılarının işlenmesi ve nihai yanıtını üretmek için modeli birkaç kez çağırabilir. Bir aracı yaklaşık yedi LLM çağrısı yapıyorsa ve iş akışınız beş aracı kullanıyorsa, tek bir istek kolaylıkla 35 veya daha fazla LLM çağrısı anlamına gelebilir. 

Kesin sayı sisteminizin tasarımına bağlıdır, ancak çıkarım basittir: aracılı iş akışları hızla pahalı hale gelebilir. GLM-5.3-Flash gibi düşük token fiyatlandırmasına sahip yetkin bir model kullanmak, küçük bir demodan gerçek bir üretim uygulamasına geçerken önemli bir fark yaratabilir. 

1. GLM-5.3-Flash için Ortamı Kurun

Çoklu aracı iş akışını oluşturmadan önce Z.ai, Finnhub ve Tavily için API anahtarları oluşturun.

API anahtarları oluşturun

Z.ai için normal API’yi kullandığınızdan emin olun, GLM Coding Plan’ı değil. Coding Plan, desteklenen yapay zekâ kodlama araçları için tasarlanmıştır ve kendi çoklu aracı uygulamanız için genel amaçlı bir API olarak kullanılmamalıdır.

Normal bir Z.ai API anahtarı oluşturun ve hesabınıza küçük bir miktar kredi ekleyin. GLM-5.3-Flash ucuz olduğu için testlere başlamak için küçük bir bakiye yeterlidir.

Z.ai faturalandırma menüsü

Kaynak: Z.ai API Platform — GLM-5.3 ile geliştirmeye başlayın 

Ayrıca Finnhub ve Tavily üzerinde ücretsiz hesap oluşturabilir ve API anahtarları üretebilirsiniz. Ücretsiz katmanları bu proje için yeterlidir.

Proje dosyalarını hazırlayın

Şimdi proje klasörünüzde bir .env dosyası oluşturun ve API anahtarlarını ekleyin:

ZAI_API_KEY="your_zai_api_key"
FINNHUB_API_KEY="your_finnhub_api_key"
TAVILY_API_KEY="your_tavily_api_key"

Şimdi yeni bir Jupyter Notebook oluşturun. Önce burada tüm çoklu aracı iş akışını kurup test edeceğiz, her aracının çıktısını inceleyip hataları düzelteceğiz; ardından bunu uygun bir uygulamaya dönüştüreceğiz.

Gerekli kütüphaneleri yükleyin

Aracıları oluşturmak ve koordine etmek için CrewAI’yi, hisse senedi verileri için Finnhub&rsquoı ve gerçek zamanlı web araması için Tavily&rsquoyi kullanacağız. Gerekli Python paketlerini yükleyin:

!pip install -q crewai crewai-tools finnhub-python tavily-python pandas numpy requests python-dotenv openai

Kütüphaneleri ve API anahtarlarını içe aktarın

Şimdi gerekli kütüphaneleri içe aktarın ve API anahtarlarını yükleyin:

import os
import re
import time

import finnhub
import numpy as np
import pandas as pd
import requests

from dotenv import load_dotenv
from openai import OpenAI
from tavily import TavilyClient

from crewai import Agent, Crew, LLM, Process, Task
from crewai.tools import tool
from crewai_tools import TavilySearchTool

# Load environment variables
load_dotenv()

# Disable CrewAI tracing
os.environ.setdefault("CREWAI_TRACING_ENABLED", "false")
os.environ.setdefault("OTEL_SDK_DISABLED", "true")

Son olarak, aracıların analiz etmesini istediğiniz hisseyi seçin:

TICKER = "NVDA"

Notebook boyunca NVIDIA’yı (NVDA) kullanacağım; ancak ilginizi çeken başka bir sembolle, örneğin AAPL, MSFT veya TSLA ile değiştirmekten çekinmeyin.

2. GLM-5.3-Flash ve Veri API’lerini Yapılandırın

API anahtarları hazır olduğuna göre, proje boyunca aracıların kullanacağı hizmetleri bağlayabiliriz.

Önce hisse senedi verileri için Finnhub ve web araması için Tavily başlatın:

finnhub_client = finnhub.Client(
    api_key=os.environ["FINNHUB_API_KEY"]
)

tavily_client = TavilyClient(
    api_key=os.environ["TAVILY_API_KEY"]
)

Finansal aracıları oluşturmak istiyor ancak hangi veri kaynağını kullanacağınızdan emin değilseniz, doğru hisse piyasası veri API’sini seçme rehberimizi okumanızı öneririm.

Şimdi de CrewAI aracıları için ana LLM olarak GLM-5.3-Flash’i yapılandıralım. Z.ai, OpenAI ile uyumlu bir API sağlar; bu nedenle doğrudan CrewAI’nin LLM sınıfı üzerinden bağlanabiliriz:

llm = LLM(
    model="openai/glm-5.3-flash",
    api_key=os.environ["ZAI_API_KEY"],
    base_url="https://api.z.ai/api/paas/v4/",
    temperature=0.1,
)

Bu uygulama finansal araştırma ve analize odaklandığından, daha tutarlı ve odaklı yanıtlar için sıcaklığı düşük tutuyoruz.

Modeli, piyasa verilerini ve web araması API’lerini bağladığımıza göre, artık aracıların kullanacağı araçları oluşturmaya başlayabiliriz.

3. Geçmiş Piyasa Verilerini Toplayın

Sonraki adımda, aracıların hissenin zaman içindeki performansını anlayabilmesi için geçmiş fiyat verilerine ihtiyacımız var.

Bunun için, günlük açılış, en yüksek, en düşük, kapanış ve hacim verilerini toplamak üzere Yahoo Finance’ın herkese açık grafik uç noktasını kullanacağız.

Fiyat geçmişini indirin

HTTP = requests.Session()
HTTP.headers.update({"User-Agent": "glm-stock-swarm/1.0"})


def _yahoo_history(ticker: str, days: int) -> pd.DataFrame:
    end = int(time.time())
    start = end - days * 24 * 60 * 60

    response = HTTP.get(
        f"https://query1.finance.yahoo.com/v8/finance/chart/{ticker}",
        params={
            "period1": start,
            "period2": end,
            "interval": "1d",
            "events": "history",
        },
        timeout=30,
    )
    response.raise_for_status()

    result = response.json()["chart"]["result"][0]
    values = result["indicators"]["quote"][0]

    frame = pd.DataFrame({
        "date": pd.to_datetime(
            result["timestamp"], unit="s", utc=True
        ).tz_localize(None),
        "open": values["open"],
        "high": values["high"],
        "low": values["low"],
        "close": values["close"],
        "volume": values["volume"],
    })

    frame = (
        frame.dropna(subset=["close"])
        .sort_values("date")
        .reset_index(drop=True)
    )

    frame.attrs["source"] = "Yahoo public chart"
    return frame


def get_price_history(ticker: str, days: int = 450) -> pd.DataFrame:
    return _yahoo_history(ticker.strip().upper(), days)

Yaklaşık 450 günlük bir geçmiş toplayacağız; bu da 200 günlük hareketli ortalama gibi daha uzun vadeli göstergeleri hesaplamak için yeterli veri sağlar.

Teknik göstergeleri hesaplayın

Şimdi, yaygın olarak kullanılan birkaç göstergeyi hesaplayalım: 

  • Hareketli ortalamalar: son 20, 50 ve 200 günlük zaman dilimlerinin ortalaması
  • Relative Strength Index (RSI): Aşırı alım (>70) ve aşırı satım (<30) durumunu gösteren 0-100 arası ölçek
  • Moving Average Convergence/Divergence (MACD): uzun ve kısa vadeli Üssel Hareketli Ortalamalar (EMA) farkı
def add_indicators(frame: pd.DataFrame) -> pd.DataFrame:
    if frame.empty:
        return frame.copy()

    result = frame.copy()
    result.attrs.update(frame.attrs)

    # Moving averages
    result["SMA20"] = result["close"].rolling(20).mean()
    result["SMA50"] = result["close"].rolling(50).mean()
    result["SMA200"] = result["close"].rolling(200).mean()

    # RSI
    delta = result["close"].diff()
    gain = delta.clip(lower=0)
    loss = -delta.clip(upper=0)

    avg_gain = gain.ewm(
        alpha=1 / 14, min_periods=14, adjust=False
    ).mean()

    avg_loss = loss.ewm(
        alpha=1 / 14, min_periods=14, adjust=False
    ).mean()

    result["RSI14"] = 100 - (
        100 / (1 + avg_gain / avg_loss.replace(0, np.nan))
    )

    # MACD
    result["EMA12"] = result["close"].ewm(
        span=12, adjust=False
    ).mean()

    result["EMA26"] = result["close"].ewm(
        span=26, adjust=False
    ).mean()

    result["MACD"] = result["EMA12"] - result["EMA26"]

    return result

Bu göstergeler faydalıdır; çünkü teknik analiz aracısına, LLM’nin her şeyi kendisinin hesaplamasına gerek kalmadan eğilim ve momentuma hızlı bir bakış sağlar.

En son değerleri gözden geçirin

Şimdi verileri toplayın, göstergeleri hesaplayın ve son satırları görüntüleyin:

history = add_indicators(
    get_price_history(TICKER)
)

if len(history) < 200:
    raise RuntimeError(
        f"Need at least 200 daily observations; received {len(history)}."
    )

print(
    f"Loaded {len(history)} rows "
    f"from {history.attrs['source']}."
)

history.tail(3)[
    [
        "date",
        "close",
        "SMA20",
        "SMA50",
        "SMA200",
        "RSI14",
        "MACD",
    ]
]

Nvidia Hissesinin Fiyat Geçmişi ve teknikleri

Yukarıdakine benzer şekilde, en son hisse fiyatını hareketli ortalamaları, RSI ve MACD ile birlikte görmelisiniz.

Bu verileri daha sonra teknik analiz aracısına ileteceğiz; böylece fiyat eğilimlerini, momentumu ve yükseliş ya da düşüş sinyallerini belirleyebilir.

4. Veri Kaynaklarını CrewAI Araçlarına Dönüştürün

Artık veri kaynaklarımız çalıştığına göre, bunları CrewAI araçlarına dönüştürmemiz gerekiyor. Bu sayede aracıların, finansal, teknik veya haber bilgisine ihtiyaç duyduklarında doğrudan bu araçları çağırabilmeleri mümkün olur.

Hisse verisi araçlarını oluşturun

Önce sayısal değerleri temiz ve tutarlı tutmak için küçük bir yardımcı işlev oluşturun:

def _number(value, decimals: int = 2) -> str:
    if value is None or pd.isna(value):
        return "N/A"

    return f"{float(value):,.{decimals}f}"

Şimdi de temel veriler aracını oluşturun. Bu araç, Finnhub’ı kullanarak en son hisse fiyatını, değerleme metriklerini, büyümeyi, kârlılığı ve diğer şirket temellerini getirir.

@tool("Get Stock Fundamentals")
def get_fundamentals(ticker: str) -> str:
    """Get current price and company fundamentals from Finnhub for one ticker."""

    ticker = ticker.strip().upper()

    quote = finnhub_client.quote(ticker)
    metrics = finnhub_client.company_basic_financials(ticker, "all")
    m = metrics.get("metric", {})

    return f"""Ticker: {ticker}
Source: Finnhub
Current price: {_number(quote.get('c'))}
Previous close: {_number(quote.get('pc'))}
Daily change %: {_number(quote.get('dp'))}
Day high / low: {_number(quote.get('h'))} / {_number(quote.get('l'))}
Market cap (USD millions): {_number(m.get('marketCapitalization'))}
52-week high / low: {_number(m.get('52WeekHigh'))} / {_number(m.get('52WeekLow'))}
Normalized annual P/E: {_number(m.get('peNormalizedAnnual'))}
Annual P/B: {_number(m.get('pbAnnual'))}
Annual P/S: {_number(m.get('psAnnual'))}
ROE TTM: {_number(m.get('roeTTM'))}
Net margin TTM: {_number(m.get('netProfitMarginTTM'))}
Revenue growth TTM YoY: {_number(m.get('revenueGrowthTTMYoy'))}
EPS growth TTM YoY: {_number(m.get('epsGrowthTTMYoy'))}
Annual debt/equity: {_number(m.get('totalDebt/totalEquityAnnual'))}"""

Önceki bölümdeki geçmiş veriler ve göstergeleri kullanarak bir de teknik analiz aracı oluşturacağız.

@tool("Analyze Stock Technicals")
def get_technicals(ticker: str) -> str:
    """Calculate price trends, returns, moving averages, RSI, and MACD."""

    ticker = ticker.strip().upper()
    frame = add_indicators(get_price_history(ticker))

    if len(frame) < 200:
        return (
            f"Technical data unavailable for {ticker}: "
            "fewer than 200 observations."
        )

    latest = frame.iloc[-1]

    return f"""Ticker: {ticker}
Source: {frame.attrs.get('source', 'unknown')}
Last market date: {latest['date'].date()}
Close: {_number(latest['close'])}
SMA20 / SMA50 / SMA200: {_number(latest['SMA20'])} / {_number(latest['SMA50'])} / {_number(latest['SMA200'])}
RSI14: {_number(latest['RSI14'])}
MACD: {_number(latest['MACD'])}
20-day return: {_number((latest['close'] / frame['close'].iloc[-21] - 1) * 100)}%
50-day return: {_number((latest['close'] / frame['close'].iloc[-51] - 1) * 100)}%
Price vs SMA20: {_number((latest['close'] / latest['SMA20'] - 1) * 100)}%
Price vs SMA50: {_number((latest['close'] / latest['SMA50'] - 1) * 100)}%
Price vs SMA200: {_number((latest['close'] / latest['SMA200'] - 1) * 100)}%"""

Burada önemli olan kısım @tool dekoratörüdür. Normal bir Python işlevini, CrewAI aracısının bir görev sırasında çağırmayı seçebileceği bir araca dönüştürür.

Web arama aracını ekleyin

Şirket haberleri ve yakın dönem gelişmeleri için, CrewAI’nin Tavily arama aracını kullanacağız:

web_search = TavilySearchTool(
    api_key=os.environ["TAVILY_API_KEY"],
    topic="news",
    search_depth="advanced",
    days=30,
    max_results=5,
)

Aramayı son 30 günle sınırlandırıyoruz ve en fazla beş sonuç döndürüyoruz; bu da araştırma aracılarına gereksiz içerikle boğmadan yeterli güncel bilgi sağlamalıdır.

Hisse araçlarını test edin

Aracıları oluşturmadan önce, iki özel aracı doğrudan çalıştırın:

print(get_fundamentals.run(ticker=TICKER))
print()
print(get_technicals.run(ticker=TICKER))

Nvidia hissesi için temel ve teknik bilgiler

Şimdi seçilen hisse için en son temel metrikleri, ardından teknik göstergeleri görmelisiniz.

5. Çoklu Aracılı Araştırma Ekibini Oluşturun

Araçlar hazır olduğuna göre, çoklu aracılı araştırma ekibimizi oluşturabiliriz.

Temel analiz, teknik analiz ve yakın dönem haberleri için üç uzman aracı ve bulgularını nihai değerlendirmeye dönüştüren bir portföy yöneticisi kullanacağız.

Uzman aracıları oluşturun

Önce temel analisti oluşturun:

fundamental_agent = Agent(
    role="Fundamental Analyst",
    goal=(
        "Evaluate financial health, growth, profitability, "
        "valuation, and balance-sheet risk."
    ),
    backstory=(
        "You are a careful long-term equity analyst. "
        "Use the fundamentals tool and never invent a figure. "
        "Treat N/A as missing, not as zero."
    ),
    tools=[get_fundamentals],
    llm=llm,
    allow_delegation=False,
    max_iter=4,
    verbose=False,
)

Şimdi teknik analisti oluşturun:

technical_agent = Agent(
    role="Technical Analyst",
    goal=(
        "Determine whether the current price setup is "
        "bullish, bearish, or neutral."
    ),
    backstory=(
        "You interpret indicators calculated by Python. "
        "Never guess market prices or indicator values."
    ),
    tools=[get_technicals],
    llm=llm,
    allow_delegation=False,
    max_iter=4,
    verbose=False,
)

Ardından finans haberleri analistini oluşturun:

news_agent = Agent(
    role="Financial News Analyst",
    goal=(
        "Find material recent developments and distinguish "
        "confirmed reporting from speculation."
    ),
    backstory=(
        "You are a skeptical financial-news researcher. "
        "Prioritize primary and reputable sources, dates, and links."
    ),
    tools=[web_search],
    llm=llm,
    allow_delegation=False,
    max_iter=5,
    verbose=False,
)

Her uzmana yalnızca gerçekten ihtiyaç duyduğu araç verilir. Bu, iş akışını odaklı tutar ve aracıların ilgisiz araçları çağırmasını engeller.

Portföy yöneticisini oluşturun

Son olarak, üç uzman raporunu gözden geçirecek yönetici aracıyı oluşturun:

manager_agent = Agent(
    role="Portfolio Manager",
    goal=(
        "Combine the specialist reports into a balanced, "
        "evidence-based research signal."
    ),
    backstory=(
        "You lead an equity research team. "
        "Weigh bullish and bearish evidence, use HOLD when evidence "
        "is mixed, and never add unsupported facts."
    ),
    llm=llm,
    allow_delegation=False,
    max_iter=4,
    verbose=False,
)

Portföy yöneticisinin veri araçlarımıza doğrudan erişmesi gerekmez. Bunun yerine, üç uzman aracının ürettiği raporlarla çalışır.

allow_delegation=False ayarı iş akışını öngörülebilir kılar; max_iter ise her aracının gerçekleştirebileceği akıl yürütme ve araç kullanımı döngülerini sınırlar.

6. Uzmanlaşmış Araştırma Görevlerini Atayın

Aracıları oluşturmak kim olduklarını tanımlar. Şimdi her birine tam olarak ne yapması gerektiğini ve nihai çıktısının ne içermesi gerektiğini söylememiz gerekiyor.

Araştırma görevlerini tanımlayın

Temel analiz göreviyle başlayın:

fundamental_task = Task(
    description=(
        f"Analyze {TICKER}'s growth, profitability, valuation, "
        "balance sheet, and business quality. "
        "Use Get Stock Fundamentals. "
        "Return a Fundamental Score from 0-100, strongest positive, "
        "biggest risk, and note all material missing data."
    ),
    expected_output=(
        "A concise fundamental assessment with a 0-100 score, "
        "evidence, strongest positive, biggest risk, "
        "and missing-data note."
    ),
    agent=fundamental_agent,
)

Şimdi teknik analiz görevini tanımlayın:

technical_task = Task(
    description=(
        f"Analyze {TICKER}'s technical setup. "
        "Use Analyze Stock Technicals. "
        "Consider SMA20/50/200, RSI14, MACD, recent returns, and trend. "
        "Return Technical Score 0-100, Bullish/Neutral/Bearish signal, "
        "trend, momentum, and main technical risk."
    ),
    expected_output=(
        "A concise technical assessment with score, signal, trend, "
        "momentum, data source, and main risk."
    ),
    agent=technical_agent,
)

Yakın dönem gelişmeler için haber araştırma görevini oluşturun:

news_task = Task(
    description=(
        f"Research the most important recent news for {TICKER}, "
        "focusing on the last 30 days: earnings, guidance, analyst "
        "revisions, products, partnerships, M&A, regulation, lawsuits, "
        "management, and industry developments. "
        "Use Tavily Search. "
        "Return News Score 0-100, sentiment, positive and negative "
        "catalysts, publication dates, and source URLs. "
        "Ignore low-quality speculation."
    ),
    expected_output=(
        "A sourced recent-news assessment with score, sentiment, "
        "catalysts, dates, and clickable URLs."
    ),
    agent=news_agent,
)

Her aracıya net bir görev ve çıktı biçimi vermek önemlidir. Bu, portföy yöneticisinin raporları karşılaştırmasını kolaylaştırır; her aracıdan tamamen farklı yanıtlar almak yerine tutarlı bir yapı sağlar.

Nihai karar görevini oluşturun

Nihai görev, üç raporu bir araya getirir:

decision_task = Task(
    description=(
        f"Review all three specialist reports and make the final "
        f"educational research assessment for {TICKER}. "
        "Return exactly one signal: BUY, HOLD, or SELL. "
        "Use HOLD when evidence is mixed or confidence is insufficient. "
        "Base every claim only on the supplied reports."
    ),
    expected_output=(
        "Ticker; Signal; Overall Score /100; Confidence %; "
        "Fundamental, Technical, and News scores; Bull Case; "
        "Bear Case; Main Catalyst; Main Risk; Final Explanation; "
        "Sources; and an educational-not-financial-advice disclaimer."
    ),
    agent=manager_agent,
    context=[
        fundamental_task,
        technical_task,
        news_task,
    ],
)

Buradaki kilit kısım context alanıdır. Bu alan, portföy yöneticisine üç uzman görevinin çıktılarının tümüne erişim sağlar; böylece nihai AL, TUT veya SAT değerlendirmesini üretmeden önce temel, teknik ve haber sinyallerini karşılaştırabilir.

Bu noktada aracılarımız, araçlarımız ve görevlerimiz hazır. Şimdi her şeyi bir CrewAI iş akışına bağlayıp tam araştırma ekibini çalıştırabiliriz.

7. Çoklu Aracılı Araştırma Ekibini Çalıştırın

Artık her şeyi bir araya getirip tam hisse araştırma iş akışını çalıştırabiliriz.

Ekibi oluşturun

Üç uzman aracımız ve portföy yöneticisini içeren bir CrewAI ekibi oluşturun:

crew = Crew(
    agents=[
        fundamental_agent,
        technical_agent,
        news_agent,
        manager_agent,
    ],
    tasks=[
        fundamental_task,
        technical_task,
        news_task,
        decision_task,
    ],
    process=Process.sequential,
    verbose=False,
    tracing=False,
)

Process.sequential kullandığımız için araştırma görevleri sırayla çalışır. Temel, teknik ve haber aracıları analizlerini önce tamamlar; ardından portföy yöneticisi bu raporları alıp nihai değerlendirmeyi üretir.

Araştırma ekibini çalıştırın

İş akışını eşzamanlı olmayan şekilde başlatın:

result = await crew.kickoff_async()

Bu adım biraz zaman alabilir; çünkü aracıların birden fazla LLM ve araç çağrısı yapması gerekir. Benim testimde, tam araştırma iş akışı yaklaşık 4 ila 5 dakika sürdü.

Tamamlandığında, nihai portföy yöneticisi raporunu görüntüleyin:

print(result.raw)

Nvidia hissesi için nihai portföy yöneticisi değerlendirmesi

Aşağıdakileri içeren, yukarıdakine benzer ayrıntılı bir rapor almalısınız:

  • AL, TUT veya SAT sinyali
  • Genel skor
  • Güven düzeyi
  • Uzman skorları
  • Yükseliş durumu
  • Düşüş durumu
  • Katalistler
  • Riskler
  • Destekleyici kaynaklar

Bu örnekte, aracıları NVIDIA’yı bağımsız olarak analiz edip bulgularını tek bir kanıta dayalı araştırma raporunda birleştirdi. Çoklu aracı yaklaşımının faydası burada görülüyor: her şeyi tek bir modelden aynı anda yapmasını istemek yerine, her aracı kendi alanına odaklanır ve portföy yöneticisi tüm araştırmayı bir araya getirir.

Yukarıdaki kodu çalıştırmada sorun yaşarsanız, kodun ve çıktıların tamamını içeren Jupyter Notebook’u da ekledim; inceleyebilir veya kendiniz çalıştırabilirsiniz: glm-stock-swarm/stock_analyst_crew.ipynb

8. Terminal Arayüzünü Oluşturun ve Çalıştırın

Her şeyi Jupyter Notebook içinde test ettikten sonra, tüm iş akışını bir terminal kullanıcı arayüzüne (TUI) dönüştürdüm. Artık her not defteri hücresini elle çalıştırmak yerine, tek bir komutla tüm çoklu aracılı hisse analistini başlatabilirsiniz.

Kod ve kurulum talimatları dahil tüm proje GitHub’da mevcuttur: glm-stock-swarm GitHub deposu.

Uygulamayı kurun ve çalıştırın

Depoyu klonlayarak başlayın:

git clone https://github.com/kingabzpro/glm-stock-swarm.git
cd glm-stock-swarm

Z.ai, Finnhub ve Tavily API anahtarlarınızı .env dosyasına ekleyin; ardından tüm bağımlılıkları uv ile kurun:

uv sync

Son olarak TUI’yi başlatın:

uv run glm-stock-swarm

Bir hisseyi analiz edin

Arayüz, analize başlamak için desteklenen herhangi bir hisse sembolünü girebileceğiniz basit bir giriş kutusu sağlar.

Çoklu Aracılı Hisse Analisti TUI

Bileti gönderdikten sonra, aracıların birer birer çalışmasını izleyebilirsiniz. Temel analist önce başlar, ardından teknik analist, haber analisti ve en sonunda her şeyi nihai karara dönüştüren portföy yöneticisi gelir.

SpaceX hisseleri için Çoklu Aracılı Hisse Analisti sonuçları

Sonda TUI, terminal içinde doğrudan tam bir rapor üretir: temel skor, teknik skor, haber skoru, genel skor, güven, yükseliş/düşüş durumu, riskler, katalistler ve nihai AL, TUT veya SAT sinyali.

Takip soruları sorun

Ayrıca, her yeni sorunuz olduğunda tüm çoklu aracı hattını yeniden çalıştırmanıza gerek kalmaması için bir takip sohbeti de ekledim.

Çoklu Aracılı Hisse Analisti TUI uygulamasında takip sorusu sorun

Örneğin, bir SAT önerisi aldıktan sonra tüm pozisyonu mu yoksa sadece bir kısmını mı satmam gerektiğini sordum.

Çoklu Aracılı Hisse Analisti TUI uygulamasında takip sorusu sonuçları

Uygulama, dört aracıyı tekrar başlatmak yerine oluşturulan araştırma raporunun bağlamını kullanır ve çok daha hızlı bir takip yanıtı gönderir.

Bu da uygulamayı daha pratik kılar; çünkü maliyetli çoklu aracı araştırması bir kez çalışır, takip soruları ise mevcut analizden yararlanabilir.

Son Düşünceler

Denemelerimden raporlamaya değer nokta, araç çağırma güvenilirliği oldu. Üç uzmanın tamamı doğru aracı seçti, eksik verileri sıfır yerine N/A olarak ele alma kuralına uydu ve portföy yöneticisinin ihtiyaç duyduğu puan+kanıt biçiminde çıktı verdi. Genelde ucuz modeller bu noktada tökezler.

Taviz ise hızda. Artificial Analysis, Z.ai’ın API’sinde GLM-5.3-Flash’i saniyede yaklaşık 45 çıkış token’ı olarak ölçüyor; bu, boyutundaki açık ağırlıklı modeller için düşük sayılır ve tam ekip çalışmasının 4–5 dakika sürmesinde bunu hissediyorsunuz. Ayrıca zeka endekslerinde GLM-5.3’e karşı 60’a kıyasla 57 alıyor; yani biraz akıl yürütme kalitesinden feragat ediyorsunuz, ama ödediğiniz fiyatın yaklaşık onda biri olduğu düşünülürse bu iyi bir takas.

Bunların hiçbiri sizi kilitlemez. OpenRouter, Hugging Face Inference veya Ollama üzerinden yerel bir modele geçmek genellikle üç şeyi değiştirmek anlamına gelir: API anahtarı, model adı ve temel URL. Araçlar için de benzer şekilde, burada Finnhub ve Yahoo’nun bölüştüğü işi yfinance görebilir.

Bir sonraki adım olarak bunu bir kâğıt alım-satım API’sine bağlayıp sabah koşusu planlarım. Yine de bir demo hesapta tutun. Bu, aracı tasarımını öğretmek için inşa edildi; alım satım yapmak için değil.

Aracılı yapay zekâyı temelden öğrenmek istiyorsanız, harika bir başlangıç noktası olarak AI Agent Fundamentals yetkinlik yolumuzu öneririm.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.

Konular

DataCamp ile Aracılı Yapay Zekâyı Öğrenin!

Program

AI Ajanının Temelleri

6 sa
AI ajanlarının çalışma şeklinizi nasıl değiştirebileceğini ve kuruluşunuza nasıl değer katabileceğini keşfedin!
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow