Agent iş akışları · 2026-10-22
Agents-A1 ile araç çağıran ajan döngüsü kurmak
Agents-A1 ile çok turlu araç döngüsü: tools, tool_choice, araç sonucunu geri verme, adım sınırı ve düşünme; 31 Ekim 2026'ya kadar ücretsiz.
Kısa yanıt: tools, tool_choice auto, role tool mesajı ve adım sınırı
LLMTR, farklı sağlayıcıların dil modellerine tek bir OpenAI uyumlu API ile erişim veren bir gateway'dir. Agents-A1 (internlm/agents-a1-free) ve aynı döngüyle çalışan Sage-A1.5 (internlm/sage-a1.5-free), https://llmtr.com/v1 adresindeki /v1/chat/completions uç noktasından llmtr.com hesabınızın API anahtarıyla 31 Ekim 2026 23:59'a (TSİ) kadar ücretsiz çağrılır. Döngü dört adımdır: araçları tools içinde tanımlayın, tool_choice olarak auto gönderin, yanıttaki her tool_calls öğesini kendi kodunuzda çalıştırıp sonucu role: "tool" mesajıyla geri verin ve model araç çağırmayı bırakana ya da adım sınırına ulaşana kadar tekrarlayın. 31 Ekim 2026'dan sonra aynı döngüyü ücretli qwen/qwen3.6-35b-a3b ya da ücretsiz nvidia/nemotron-3.5-super-vl-free ile sürdürün.
Agents-A1'in model kartı onu uzun soluklu arama, mühendislik, bilimsel araştırma, talimat takibi ve araç çağrısı için ölçeklenmiş 35B MoE ajan modeli olarak tanımlar ve fonksiyon çağrısını yerel olarak desteklediğini söyler. LLMTR'de 262.144 token bağlam, metin ve görsel girdi, json_object ve json_schema çıktı sunar.
Agents-A1 ile araç çağıran bir ajan döngüsü nasıl kurulur?
Her turda modelin yanıtına bakın. message.tool_calls doluysa önce modelin assistant mesajını tool_calls alanıyla birlikte geçmişe ekleyin, sonra her çağrı için aracı çalıştırın ve sonucu aynı tool_call_id ile role: "tool" mesajı olarak ekleyin. function.arguments bir JSON metnidir; kullanmadan önce ayrıştırın. tool_calls boşsa message.content son yanıttır ve döngü biter. Dallanmayı finish_reason etiketine göre değil, tool_calls alanının varlığına göre yapın.
Model tek turda birden fazla araç çağrısı döndürebilir. Her çağrıya ayrı bir role: "tool" mesajıyla cevap verin; biri eksik kalırsa sonraki istek hata döndürür. Döngüye bir üst sınır koyun: örnekteki MAX_STEPS 5'tir ve sınıra ulaşan döngü son yanıtı beklemeden durur, böylece beklenmedik bir araç sonucu sonu gelmeyen bir döngüye dönüşmez. Sınıra sık ulaşıyorsanız araç tanımlarını ve istemi netleştirin.
Araç sonucunu json.dumps ile metne çevirip content alanına koyun. Sonuç ne kadar kısaysa sonraki turlar o kadar az girdi token'ı taşır, çünkü geçmişin tamamı her turda yeniden gönderilir.
Tam örnek: yerel bir fonksiyonla en fazla beş adım
Aşağıdaki Python örneği get_weather adlı yerel bir fonksiyonu araç olarak tanımlar ve Agents-A1'e tool_choice auto ile gönderir. Dönen her çağrıyı çalıştırır, sonucu json.dumps ile role: "tool" mesajına koyar ve en fazla beş adımda durur. Model iki şehir için iki paralel çağrı döndürürse ikisine de ayrı cevap verilir. Sage-A1.5 için yalnızca MODEL değişkenindeki kimliği değiştirin; kullanılacak kimlikler kodun başındaki yorumda yazar.
Agents-A1 ile https://llmtr.com/v1/chat/completions üzerinde get_weather aracını çalıştıran, araç sonuçlarını role: "tool" mesajıyla geri veren ve en fazla beş adımda duran OpenAI Python SDK döngüsü.
import json
import os
from openai import OpenAI
client = OpenAI(base_url="https://llmtr.com/v1", api_key=os.environ["LLMTR_API_KEY"])
# No charge until 31 October 2026 23:59 (TRT). Sage-A1.5 runs the same loop: "internlm/sage-a1.5-free".
# From 1 November 2026 both ids return 410; move to "qwen/qwen3.6-35b-a3b" (paid, keep tool_choice "auto")
# or "nvidia/nemotron-3.5-super-vl-free".
MODEL = "internlm/agents-a1-free"
MAX_STEPS = 5
def get_weather(city: str) -> dict:
# Local stand-in for a real weather service.
return {"city": city, "temp_c": 21, "condition": "clear"}
LOCAL_TOOLS = {"get_weather": get_weather}
TOOLS = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Return the current temperature and condition for a city.",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "Compare today's weather in Istanbul and Ankara."}]
for step in range(1, MAX_STEPS + 1):
response = client.chat.completions.create(
model=MODEL,
messages=messages,
tools=TOOLS,
tool_choice="auto",
max_tokens=8192,
)
choice = response.choices[0]
message = choice.message
print("step", step, choice.finish_reason, response.usage.total_tokens)
if not message.tool_calls:
print(message.content)
break
messages.append({
"role": "assistant",
"content": message.content,
"tool_calls": [call.model_dump() for call in message.tool_calls],
})
# Answer every call of the turn, parallel calls included, each with its own tool_call_id.
for call in message.tool_calls:
args = json.loads(call.function.arguments)
result = LOCAL_TOOLS[call.function.name](**args)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
else:
print("Stopped after", MAX_STEPS, "steps without a final answer.")
tool_choice, düşünme, max_tokens ve akış
LLMTR model kartı Agents-A1 ve Sage-A1.5'te tool_choice için auto ya da adlandırılmış fonksiyon kullanmanızı söyler; required göndermeyin. Modelin hangi aracı ne zaman çağıracağına kendisinin karar vermesi için auto gönderin. Bir adımda belirli bir aracın çağrılması gerekiyorsa o istekte {"type": "function", "function": {"name": "get_weather"}} biçimini kullanın ve sonraki turda auto'ya dönün.
İki model de varsayılan olarak yanıttan önce düşünür; düşünme metni reasoning_content alanında gelir ve düşünme token'ları max_tokens'a sayılır. Kısa bir max_tokens yanıtı düşünme bitmeden kesebilir ve finish_reason length döner; bu yüzden örnekte max_tokens 8192'dir. Yalnızca araç sonucunu bir sonraki çağrıya aktaran ara adımlarda düşünmeye ihtiyacınız yoksa model kimliğine :fast ekleyin ya da istekte "reasoning": false gönderin; Python'da bu extra_body={"reasoning": False} olur. :think ya da "reasoning": true düşünmeyi açık tutar; reasoning_effort bu satırlarda 400 döner.
Akış desteklenir: stream: true ile yanıt parça parça gelir ve araç çağrısı argümanları delta.tool_calls içinde akar. stream_options içinde include_usage: true gönderirseniz son parçada usage gelir. Bir çağrıyı çalıştırmadan önce o çağrının bütün argüman parçalarını birleştirin.
| Özellik | Agents-A1 | Döngüde ne yaparsınız |
|---|---|---|
| tool_choice | auto ya da adlandırılmış fonksiyon | auto ile başlayın; belirli bir aracı o istekte adlandırılmış fonksiyonla zorlayın |
| Bağlam penceresi | 262.144 token | geçmiş her turda yeniden gönderilir; uzun araç sonuçlarını kısaltın |
| Girdi | metin ve görsel (URL ya da base64) | ekran görüntüsünü base64 data URL olarak ekleyin |
| JSON | json_object ve json_schema | son yanıtı response_format ile bir şemaya bağlayın |
| Düşünme | varsayılan açık; "reasoning": false ya da :fast ile kapanır | max_tokens'ı cömert verin; ara adımlarda :fast kullanabilirsiniz |
| Kullanım | 31 Ekim 2026 23:59'a (TSİ) kadar ücretsiz; her model için ayrı günde 500.000 token, yeni hesaplar ilk gün daha düşük bir hakla başlar | hak bitince 429 gelir; Retry-After başlığına göre tekrar deneyin |
Hangi durumda hangisi?
Aşağıdaki seçimler model kartlarından ve LLMTR'deki tool_choice biçimlerinden çıkar; çıktı kalitesini kendi araçlarınızla karşılaştırın.
- Modelin aracı kendisinin seçtiği genel bir ajan döngüsü: Agents-A1, tool_choice auto ile.
- Bir adımda belirli bir aracın mutlaka çağrılması: Agents-A1 ya da Sage-A1.5, o istekte adlandırılmış fonksiyonla.
- İşi alt ajanlara dağıtan uzun soluklu bilimsel bir görev: Sage-A1.5, aynı döngü ve spawn_subagent aracıyla; model kartı alt ajan düzeninin bu aracın tanımlanmasıyla etkinleştiğini söyler.
- Hassas, kişisel ya da müşteri verisi taşıyan araç sonuçları: 31 Ekim 2026'ya kadar ücretsiz olan bu iki satırı kullanmayın; istemler ve tamamlamalar sağlayıcı tarafından günlüğe kaydedilebilir ve modeli geliştirmek için kullanılabilir.
Günlük hak ve 1 Kasım 2026 sonrası
Agents-A1 ve Sage-A1.5 31 Ekim 2026 23:59'a (TSİ) kadar ücretsizdir ve bakiyenizden ücret düşmez. Her hesap her model için ayrı olarak günde 500.000 token kullanabilir; girdi ve çıktı birlikte, düşünme token'ları dahil sayılır, hak 00:00'da (TSİ) yenilenir ve yeni hesaplar ilk gün daha düşük bir hakla başlar. Bir ajan döngüsünde girdi token'ları adım adım büyür. Hak bitince istek 429 rate_limit_error döner ve Retry-After başlığı ne zaman tekrar deneyeceğinizi söyler; istem kalan haktan büyükse hata daha kısa bir istek göndermenizi söyler.
1 Kasım 2026 00:00'dan (TSİ) itibaren iki kimlik de 410 model_retired döner ve istekler başka bir modele yönlendirilmez; model kimliğini değiştirmeniz gerekir. Ücretli devam için Qwen3.6 35B-A3B'yi (qwen/qwen3.6-35b-a3b) kullanın: aynı boyut sınıfındadır ve 1 milyon token başına 0,07 $ girdi, 0,70 $ çıktıdır. LLMTR'deki kartı, isteği araç çağırmaya zorlayan tool_choice biçimlerinin (required ya da adlandırılmış fonksiyon) desteklenmediğini söyler; orada auto gönderin ve aracın ne zaman kullanılacağını istemde söyleyin. 31 Ekim 2026'dan sonra ücretsiz devam için Nemotron 3.5 Super VL'nin günlük kotalı satırını (nvidia/nemotron-3.5-super-vl-free) kullanın; görseli orada base64 data URL olarak gönderin.
Agents-A1 ile araç döngüsü kurma
Agents-A1'e bir araç tanımlayın, dönen çağrıları çalıştırıp sonucu geri verin ve döngüyü adım sınırıyla durdurun.
- Araç tanımı. Fonksiyonu JSON Schema parametreleriyle tools listesine ekleyin ve tool_choice olarak auto gönderin.
- Çalıştır ve geri ver. Her tool_calls öğesini çalıştırın, sonucu json.dumps ile aynı tool_call_id taşıyan role: "tool" mesajına koyun.
- Sınır. Döngüyü en fazla beş adımla sınırlayın; finish_reason length dönerse max_tokens'ı yükseltin.
Sık sorulan sorular
Agents-A1'de tool_choice required kullanılır mı?
LLMTR model kartı auto ya da adlandırılmış fonksiyon kullanmanızı söyler; required göndermeyin. Belirli bir aracı zorlamak için {"type": "function", "function": {"name": "..."}} biçimini kullanın.
Paralel araç çağrılarında ne yapmalıyım?
Yanıttaki her tool_calls öğesini çalıştırın ve her biri için aynı tool_call_id ile ayrı bir role: "tool" mesajı ekleyin. Biri eksik kalırsa sonraki istek hata döndürür.
Düşünme ajan döngüsünü nasıl etkiler?
Düşünme token'ları max_tokens'a ve günlük hakka sayılır. max_tokens'ı cömert verin; düşünmeye ihtiyaç duymayan ara adımlarda model kimliğine :fast ekleyin ya da "reasoning": false gönderin.