Kısa yanıt
LLMwithCrypto üzerinde araç çağırma nasıl çalışır?
Fonksiyonlarınızı OpenAI biçiminde tools içinde gönderin. Model bir fonksiyon istediğinde, LLMwithCrypto fonksiyon adı ve JSON argümanlarıyla birlikte finish_reason: "tool_calls" döndürür; kodunuz bunu çalıştırır ve sonucu bir tool mesajı olarak geri gönderir. Yapılandırılmış yanıtlar için response_format: {"type": "json_object"} geçerli JSON ister. Her ikisi de, 23 Ekim 2026 tarihinde belgelendiği üzere, bunları destekleyen modellerde çalışır.
Hangi modeller araçları ve JSON'u destekler?
Streaming her modelde çalışır; tool calling ve JSON çıktısı, her modelin kendi desteklediğiyle sınırlıdır.
Bunlara bağımlı hale gelmeden önce kendi şemanızı kullanmayı planladığınız modelde test edin. Araçları desteklemeyen bir model, fonksiyonu çağırmak yerine düz metinle yanıt verir; JSON modunu desteklemeyen bir model response_format için 400 hatası döndürür.
Döngü nedir?
Fonksiyonları tanımlayın
Her aracın bir
name, modelin ne zaman kullanacağına karar vermek için okuduğu birdescriptionve bir JSON Schema olarakparametersvardır.Konuşmayı araçlarla gönderin
Model ya metinle yanıt verir ya da
finish_reason: "tool_calls"ile durupmessage.tool_callsiçinde bir veya daha fazla çağrı döndürür.Her çağrıyı çalıştırın
function.arguments(bir JSON dizesi) ayrıştırın, fonksiyonunuzu çalıştırın ve argümanlara asla körü körüne güvenmeyin: onları herhangi bir kullanıcı girdisi gibi doğrulayın.Sonuçları geri gönderin
Assistant mesajını, ardından her çağrı için
tool_call_idve sonucu metin olarak içeren birtoolmesajı ekleyin. API'yi yeniden çağırın; model metinle yanıt verene kadar tekrarlayın.
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://llmwithcrypto.com/api/v1",
api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)
tools = [
{
"type": "function",
"function": {
"name": "get_order_status",
"description": "Return the delivery status of an order.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}
]
def get_order_status(order_id):
return {"order_id": order_id, "status": "shipped", "eta": "2026-10-25"}
messages = [{"role": "user", "content": "Where is my order A-1042?"}]
while True:
resp = client.chat.completions.create(model="gpt-oss-120b", messages=messages, tools=tools, max_tokens=300)
msg = resp.choices[0].message
if not msg.tool_calls:
print(msg.content)
break
messages.append(msg)
for call in msg.tool_calls:
args = json.loads(call.function.arguments)
result = get_order_status(**args)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
Yanıtta bir araç çağrısı nasıl görünür?
Assistant mesajında metin yoktur, bir tool_calls dizisi vardır ve seçim finish_reason: "tool_calls" ile biter. Argümanlar bir nesne değil, JSON dizesi olarak gelir. Aşağıdaki kimlikler ve sayımlar örnektir.
{
"id": "chatcmpl-3c9d27e1",
"object": "chat.completion",
"created": 1792742400,
"model": "gpt-oss-120b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_7f31",
"type": "function",
"function": {
"name": "get_order_status",
"arguments": "{\"order_id\": \"A-1042\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 118,
"completion_tokens": 22,
"total_tokens": 140
}
}
Araçların ne zaman kullanılacağını nasıl kontrol ederim?
"tool_choice": "auto"(toolsayarlandığında varsayılan): model karar verir."tool_choice": "none": araçlar listelense bile model metinle yanıt verir."tool_choice": "required": model en az bir araç çağırmalıdır.{"type": "function", "function": {"name": "get_order_status"}}: model o tek aracı çağırmalıdır.
Her araç tanımı her çağrıda girdi olarak gönderilir, bu nedenle uzun açıklamalar ve çok sayıda araç girdi tokenlarını artırır. Açıklamaları kısa tutun ve yalnızca bir adımın ihtiyaç duyduğu araçları gönderin.
Geçerli JSON'u nasıl alırım?
response_format değerini {"type": "json_object"} yapın ve beklenen anahtarları system mesajında açıklayın: JSON modu yanıtın ayrıştırılabilir olduğunu garanti eder, istediğiniz anahtarları içerdiğini değil. Kararlı çıktı için temperature değerini düşük tutun ve kullanmadan önce ayrıştırılmış nesneyi kodunuzda kontrol edin.
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://llmwithcrypto.com/api/v1',
apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});
const resp = await client.chat.completions.create({
model: 'gpt-oss-120b',
messages: [
{ role: 'system', content: 'Reply with a JSON object {"sentiment": "positive" | "negative" | "neutral", "reason": string}.' },
{ role: 'user', content: 'The delivery was late but support fixed it in an hour.' },
],
response_format: { type: 'json_object' },
temperature: 0.2,
max_tokens: 150,
});
const result = JSON.parse(resp.choices[0].message.content);
console.log(result.sentiment, '-', result.reason);
Araçlar ve JSON: sık sorulan sorular
Araç çağrıları ekstra ücrete tabi mi?
Kendilerine ait bir ücret yoktur. Araç tanımları, çağrı ve geri gönderdiğiniz sonuçların hepsi token'dır ve diğerleri gibi faturalandırılır. Token başına bakiyenizden ödersiniz: girdi ve çıktı token'ları modelin kendi tokenizer'ı ile sayılır ve o modelin 1M token başına fiyatından ücretlendirilir. Hata ile sonuçlanan bir çağrı ücretsizdir.
Model aynı anda birkaç aracı çağırabilir mi?
Bazı modeller tool_calls içinde birden fazla çağrı döndürür. Hepsini çalıştırın ve bir sonraki istekten önce her çağrı için bir tool mesajı gönderin.
API fonksiyonlarımı çalıştırır mı?
Hayır. Model yalnızca hangi fonksiyonun hangi argümanlarla çağrılacağını söyler; onu kodunuz çalıştırır. Bizim tarafımızda hiçbir şey yürütülmez ve alışverişin hiçbir parçası saklanmaz: Prompt'larınızı veya modelin yanıtlarını saklamayız: bir yanıt gönderildiğinde metni kaybolur. Her çağrı, zaman, hesap, model ve token sayılarını içeren tek bir log satırı bırakır; bu satırlar 30 gün sonra silinir.