Chat API
Chat completion'lar ve çok-turlu konuşmalar aracılığıyla mind'larınızla etkileşim kurun.
Mind'larınıza mesajlar gönderip AI tarafından oluşturulan yanıtlar alın. Chat API hem stateless completion'ları hem de otomatik geçmiş yönetimiyle stateful çok-turlu konuşmaları destekler.
Stateful Chat'ler (Önerilir)
Sunucunun geçmişi, bağlam sıkıştırmayı ve rolling summary'leri otomatik olarak yönettiği kalıcı konuşmalar oluşturun. Her istekle birlikte tüm mesaj geçmişini göndermeye gerek yoktur.
Chat Oluştur
Bir mind'a bağlı yeni bir stateful konuşma oluşturun.
Endpoint: POST /api/v1/chats
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
Request Body:
{
"name": "My Conversation",
"sparkId": "your-spark-id"
}
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | Hayır | Chat için görünen ad (varsayılan: "API Chat") |
sparkId | string | Hayır | Sohbet edilecek mind. Atlanırsa, daha sonra bir mind atayın. |
description | string | Hayır | Opsiyonel açıklama |
Response (201):
{
"data": {
"id": "601af953-3837-49c1-a31e-4fdbfa82ac04",
"name": "My Conversation",
"description": null,
"createdAt": "2026-04-04T12:45:24.078Z",
"sparks": [
{
"id": "4774888e-0a03-40d7-979b-39b47c4c049c",
"name": "Ada Lovelace",
"discipline": "mathematician and computer scientist"
}
]
}
}
Mesaj Gönder
Mevcut bir chat'e mesaj gönderin. Sunucu konuşma geçmişini, bağlam penceresi sıkıştırmayı ve rolling summary'leri otomatik olarak yönetir.
Endpoint: POST /api/v1/chats/{chatId}/messages
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
Request Body:
{
"content": "What are the latest advancements in solar panel technology?"
}
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
content | string | Evet | Mesaj metni (alternatif olarak message kullanın) |
model | string | Hayır | Bu mesaj için kullanılan AI modelini geçersiz kılar. provider ile birlikte gönderilmelidir. |
provider | string | Hayır | Model override için AI sağlayıcısı: openai, anthropic veya google. model ile birlikte gönderilmelidir. |
endUserName | string|null | Hayır | Bu istek için gerçek son kullanıcının opsiyonel görünen adı. Atlanırsa, null ise veya boşsa, Minds kullanıcıya nötr şekilde hitap eder ve API key ya da hesap sahibinden ad çıkarımı yapmaz. Alias: userDisplayName, userName. |
Stateful chat model seçimi şu sırayı kullanır: istek bazında override, yapılandırılmış ve uygun ise takımın tercih ettiği sağlayıcı, ardından ürün varsayılanı. Bu endpoint'te kısmi override'lar 400 Bad Request ile reddedilir; hem model hem provider gönderin veya ikisini de göndermeyin.
Response:
{
"content": "Recent advancements in solar panel technology include perovskite cells with 30%+ efficiency...",
"messageId": "cmnkbsddh00033v01ptk9t4et"
}
| Alan | Tür | Açıklama |
|---|---|---|
content | string | Mind'ın yanıtı |
messageId | string | Kaydedilen mesajın benzersiz ID'si |
Çok-Turlu Örnek
Stateful chat'lerde her seferinde sadece yeni mesajı gönderirsiniz. Sunucu her şeyi hatırlar:
# Adım 1: Bir chat oluşturun
CHAT=$(curl -s -X POST "https://getminds.ai/api/v1/chats" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "name": "Research Session", "sparkId": "your-spark-id" }')
CHAT_ID=$(echo $CHAT | jq -r '.data.id')
# Adım 2: Mesajları gönderin (sunucu geçmişi otomatik olarak yönetir)
curl -X POST "https://getminds.ai/api/v1/chats/$CHAT_ID/messages" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "content": "What are the top marketing trends?" }'
# Adım 3: Takip edin (mind önceki alışverişi hatırlar)
curl -X POST "https://getminds.ai/api/v1/chats/$CHAT_ID/messages" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "content": "Which of those would work best on a small budget?" }'
Arka planda nasıl çalışır:
- Her mesaj veritabanına kalıcı olarak kaydedilir
- Son 8 mesaj tam bağlamda gönderilir
- Daha eski mesajlar rolling LLM özetine sıkıştırılır
- Konuşmalar bağlam limitlerine takılmadan haftalarca/aylarca sürebilir
Stateless Completion'lar
Tek istekler için veya konuşma geçmişini kendiniz yönetmek istediğinizde.
Mesaj Gönder
Bir mind'a mesajlar gönderin ve yanıtlar alın.
Endpoint: POST /api/v1/sparks/{sparkId}/completion
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
Request Body
{
"messages": [
{
"role": "user",
"content": "What are the latest advancements in solar panel technology?"
}
]
}
Parametreler
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
messages | array | Hayır | Mesaj objeleri dizisi (user, assistant veya tool). Atlanması veya boş dizi, mind'tan persona'ya uygun bir selamlama döndürür. |
messages[].role | string | Evet | "user", "assistant" veya "tool" değerlerinden biri |
messages[].content | string | Evet | Mesaj metni (tool rolü için atlayın, bunun yerine tool_call_id + content kullanın) |
model | string | Hayır | Bu istek için kullanılan AI modelini geçersiz kılın. Aşağıdaki model override'a bakın. |
provider | string | Hayır | Model override için AI provider'ı: openai, anthropic veya google. Model adından mümkün olduğunda otomatik tespit edilir. |
endUserName | string|null | Hayır | Bu istek için gerçek son kullanıcının opsiyonel görünen adı. Atlanırsa, null ise veya boşsa, Minds kullanıcıya nötr şekilde hitap eder ve API key ya da hesap sahibinden ad çıkarımı yapmaz. Alias: userDisplayName, userName. |
language | string | Hayır | Yanıt dili için ipucu. Desteklenenler: en, de, es, fr, zh, tr, ar, ja, ko. Güçlü persona'lar (örn. sabit bir ana dile sahip kamu figürlerinin klonları) kendi persona dillerinde yanıt vermeye devam edebilir. |
generateImage | boolean | Hayır | true olduğunda, bağlamsal olarak uygunsa yanıt içinde AI görsel oluşturmayı etkinleştirir |
response_format | object | Hayır | Yapılandırılmış çıktı iste. Aşağıdaki structured output'a bakın. |
tools | array | Hayır | Kullanıcı tanımlı tool tanımları dizisi. Aşağıdaki tool calling'e bakın. |
tool_choice | string|object | Hayır | Tool calling davranışını kontrol eder. Tool choice modları'na bakın. |
parallel_tool_calls | boolean | Hayır | Turn başına birden fazla tool call'a izin verir (varsayılan: true). |
Response
{
"messageId": "msg_550e840029b141d4a716446655440000",
"content": "Recent advancements in solar panel technology include perovskite cells with 30%+ efficiency, bifacial panels that capture light from both sides, and integrated storage systems...",
"metadata": {
"ragCitations": [
{
"id": "abc123",
"displaySource": "Spark knowledge",
"similarity": 0.89
}
]
}
}
| Alan | Tür | Açıklama |
|---|---|---|
messageId | string | Takip için benzersiz mesaj tanımlayıcısı |
content | string | Mind'ın yanıt metni (yapılandırılmış çıktı kullanıldığında JSON string) |
parsed | object | Ayrıştırılmış JSON objesi (yalnızca response_format kullanıldığında bulunur) |
tool_calls | array | Tool call istekleri dizisi (yalnızca kullanıcı tanımlı tool'lar çağrıldığında bulunur). Her birinde: id, name, arguments |
metadata | object | Opsiyonel meta veri (citation'lar, görseller) |
metadata.ragCitations | array | Yanıtta kullanılan bilgi kaynakları ve web arama sonuçları |
Tek Mesaj Örneği
Tek bir soru sorun:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What are the top 3 marketing trends for 2025?"
}
]
}'
Çok-Turlu Konuşma
Önceki mesajları dahil ederek konuşma bağlamını koruyun:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What are the top marketing trends?"
},
{
"role": "assistant",
"content": "The top trends are AI personalization, short-form video, and community building..."
},
{
"role": "user",
"content": "How can I implement AI personalization on a budget?"
}
]
}'
Çok-Turlu Konuşmalar İçin İpuçları:
- Her istekte tüm konuşma geçmişini dahil edin
- Sıra önemlidir: mesajlar kronolojik sırada olmalıdır
userveassistantrolleri arasında alternatif yapın- Son mesaj her zaman
user'dan olmalıdır
Dosya Ek'leri
Mind'larınıza bağlam sağlamak için dosyalar, belgeler, görseller ve bağlantılar ekleyin. Mind'lar işlenmiş içeriği konuşmanın bir parçası olarak alır.
Dosya Ekleme
Kullanıcı mesajınızdaki metadata.attachedFiles dizisi üzerinden dosya ekleyin:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Please review this document and summarize the key points",
"metadata": {
"attachedFiles": [
{
"url": "https://example.com/quarterly-report.pdf",
"name": "Q4 2025 Report",
"type": "application/pdf"
},
{
"path": "uploads/meeting-notes.docx",
"name": "Strategy Meeting Notes"
}
]
}
}
]
}'
Ek Formatı
Her ek objesi şunları destekler:
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
url | string | Hayır* | Dosyaya harici URL (HTTP/HTTPS) |
path | string | Hayır* | Supabase storage path (otomatik imzalı) |
name | string | Hayır | Dosya için görünen ad |
type | string | Hayır | MIME type (örn. application/pdf, image/png) |
description | string | Hayır | Opsiyonel açıklama |
transcription | string | Hayır | Önceden transkribe edilmiş ses/video içeriği |
Not: Her ikisini değil, url VEYA path sağlayın.
Desteklenen Dosya Türleri
Belgeler:
- PDF (
.pdf) - Metin çıkarma + taranmış sayfalar için OCR - Word (
.docx) - Tam metin çıkarma - Metin (
.txt,.md) - Doğrudan metin içeriği - CSV/Excel (
.csv,.xlsx) - Tablo çıkarma
Görseller:
- PNG, JPG, WEBP - OCR + görsel analiz
- Görsel anlama için vision yetenekleri
Harici URL'ler:
- Firecrawl ile getirilen web sayfaları (JS rendering + ekran görüntüleri)
- Otomatik markdown dönüştürme
İşleme
Dosyalar mind'a gönderilmeden önce otomatik olarak işlenir:
- İndirme - Dosyalar URL'den veya Supabase storage'dan getirilir
- Çıkarma - İçerik çıkarılır (PDF'lerden metin, görsellerden OCR, vb.)
- Enjeksiyon - İşlenmiş içerik konuşma bağlamına eklenir
- Yanıt - Mind hem mesajınızı hem de dosya içeriğini görür
İşleme limitleri:
- Timeout: dosya başına 30 saniye
- Dosyalar paralel olarak işlenir
- Başarısız dosyalar zarif fallback mesajları gösterir
Çoklu Dosya Örneği
{
"messages": [
{
"role": "user",
"content": "Compare these two proposals and recommend which one to pursue",
"metadata": {
"attachedFiles": [
{
"url": "https://example.com/proposal-a.pdf",
"name": "Proposal A - Cloud Migration",
"type": "application/pdf"
},
{
"url": "https://example.com/proposal-b.pdf",
"name": "Proposal B - On-Prem Upgrade",
"type": "application/pdf"
},
{
"path": "uploads/budget-analysis.xlsx",
"name": "Budget Comparison"
}
]
}
}
]
}
Konuşma Geçmişinde Dosya Ek'leri
Dosya ek'leri olan bir konuşmaya devam ederken, ek'lerle orijinal mesajı geçmişe dahil edin:
{
"messages": [
{
"role": "user",
"content": "Analyze this sales data",
"metadata": {
"attachedFiles": [
{
"url": "https://example.com/sales-q4.csv",
"name": "Q4 Sales Data"
}
]
}
},
{
"role": "assistant",
"content": "Based on the Q4 sales data, I can see that revenue increased by 23% compared to Q3..."
},
{
"role": "user",
"content": "What were the top 3 performing products?"
}
]
}
Not: Dosyalar yalnızca ilk eklendiğinde bir kez işlenir. Aynı konuşmadaki sonraki mesajlar zaten işlenmiş içeriği referans alır.
Web Bağlantıları
Web sayfaları ve harici içerik için url alanını kullanın:
{
"messages": [
{
"role": "user",
"content": "Summarize the key findings from this research paper",
"metadata": {
"attachedFiles": [
{
"url": "https://arxiv.org/pdf/2103.12345.pdf",
"name": "AI Research Paper",
"type": "application/pdf"
}
]
}
}
]
}
Özellikle web sayfaları için:
- JavaScript ağırlıklı siteler Firecrawl ile render edilir
- Görsel bağlam için ekran görüntüleri yakalanır
- İçerik temiz markdown'a dönüştürülür
Error Yönetimi
Dosya işleme başarısız olursa:
- Mind, dosyanın eklendiğini ancak işlemenin başarısız olduğunu belirten bir fallback mesajı alır
- Konuşma normal şekilde devam eder
- Timeout hataları
[Processing timeout - file may be too large]gösterir - Diğer hatalar
[Processing failed - file uploaded but analysis unavailable]gösterir
Bu, işleme başarısız olsa bile mind'ların denenmiş ek'lerin farkında olmasını sağlar.
İlk Mesaj (Selamlama)
Boş bir mesaj dizisi veya hiç mesaj göndermezseniz, mind kendini tanıtır:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": []
}'
Response:
{
"content": "Hi! I'm Sarah, a marketing director with 15 years of experience in B2B SaaS. I specialize in growth marketing and data-driven strategies. What can I help you with today?"
}
Model Override
model parametresini geçirerek stateless bir completion isteği için kullanılan AI modelini opsiyonel olarak geçersiz kılabilirsiniz. Bu; benchmarking, maliyet optimizasyonu veya farklı model davranışlarını test etmek için faydalıdır. Stateful chat ve panel endpoint'leri override doğrulamasını daha sıkı yapar: model ve provider birlikte gönderilmelidir.
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What are your thoughts on sustainable packaging?"
}
],
"model": "gpt-4o-mini"
}'
model belirtilmediğinde sunucu varsayılanı kullanılır.
Provider'lar
| Provider | Değer | Örnek Modeller |
|---|---|---|
| OpenAI | openai | gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.4, gpt-5-mini, gpt-4o, gpt-4o-mini, o3, o3-pro, o3-mini, o4-mini |
| Anthropic | anthropic | claude-fable-5, claude-opus-5, claude-sonnet-5, claude-haiku-4-5-20251001 |
google | gemini-3.6-flash, gemini-3.5-flash-lite |
Provider tarafından desteklenen herhangi bir model string'ini geçirebilirsiniz. Provider, yaygın model adı önekleriyle otomatik olarak tespit edilir (claude- → Anthropic, gemini- → Google, gpt-/o1/o3/o4 → OpenAI).
Belirsiz adlara sahip modeller için provider'ı açıkça belirtin:
{
"messages": [...],
"model": "my-custom-fine-tune",
"provider": "openai"
}
Provider belirlenemezse, API belirtmenizi isteyen bir 400 Bad Request hatası döndürür.
Structured Output
response_format parametresini kullanarak belirli bir şemaya uyan garantili JSON yanıtları isteyin. Bu, OpenAI tarzı yapılandırılmış çıktı kalıbını izler ve konuşmalardan yapılandırılmış veri çıkarmak için faydalıdır.
JSON Schema Modu
Modeli şemanıza uyan geçerli JSON çıktısı üretmeye zorlayın:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Analyze the sentiment of this text: I love this product, it exceeded all my expectations!"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "sentiment_analysis",
"description": "Sentiment analysis result",
"schema": {
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keywords": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["sentiment", "confidence", "keywords"]
}
}
}
}'
Response:
{
"content": "{\"sentiment\": \"positive\", \"confidence\": 0.95, \"keywords\": [\"love\", \"exceeded\", \"expectations\"]}",
"parsed": {
"sentiment": "positive",
"confidence": 0.95,
"keywords": ["love", "exceeded", "expectations"]
}
}
JSON Object Modu
Şema doğrulaması olmadan JSON çıktısını zorlayın:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "List 3 marketing ideas as JSON"
}
],
"response_format": {
"type": "json_object"
}
}'
Response Format Türleri
| Tür | Açıklama |
|---|---|
text | Varsayılan metin çıktısı (mevcut davranış) |
json_object | Şema doğrulaması olmadan geçerli JSON çıktısını zorlar |
json_schema | Sağlanan şemaya uyan JSON çıktısını zorlar |
JSON Schema Alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | Evet | Şema için tanımlayıcı |
description | string | Hayır | Şemanın neyi temsil ettiğinin açıklaması |
schema | object | Evet | JSON Schema tanımı |
strict | boolean | Hayır | Katı şema uyumunu zorla (varsayılan: true) |
Desteklenen Schema Özellikleri
Aşağıdaki JSON Schema özellikleri desteklenir:
- Türler:
string,number,integer,boolean,array,object,null - Kısıtlamalar:
enum,minimum,maximum,minLength,maxLength,minItems,maxItems - Yapı:
properties,required,items,additionalProperties - Meta veri:
description(modeli yönlendirmek için kullanılır)
Notlar
- Tool'lar (RAG, web search, vb.) yapılandırılmış çıktıyla çalışır — mind, yapılandırılmış yanıtı oluşturmadan önce hâlâ bilgi tabanını arayabilir
parsedalanı kolaylık için ayrıştırılmış JSON objesini içerir;contentham JSON string'i içerir- Tüm büyük provider'lar (OpenAI, Anthropic, Google) yapılandırılmış çıktıyı destekler
- Karmaşık şemalar için modelin çıktısını yönlendirmek amacıyla
descriptionalanları eklemeyi düşünün
Tool Calling
Mind'ların konuşmalar sırasında özel fonksiyonlarınızı çağırmasına olanak tanıyın. Bu, OpenAI uyumlu function calling kalıbını izler ve harici tool'lar ve API'lerle mind'ların yeteneklerini genişletmenizi sağlar.
Nasıl Çalışır
- Tool'ları tanımlayın: Adlar, açıklamalar ve JSON Schema parametreleriyle tool tanımlarını geçirin
- Mind karar verir: Mind, konuşmaya dayanarak tool'larınızı ne zaman çağıracağına karar verir (veya
tool_choiceile zorlarsınız) - API tool call'ları döndürür: Yanıt, tool adı ve oluşturulan argümanlarla
tool_callsiçerir - Tool'ları çalıştırın: Uygulamanızda tool'ları çalıştırır ve sonuçları alırsınız
- Sonuçları geri gönderin: Tool sonuçlarını bir sonraki mesaja
role: "tool"ile dahil edin - Mind yanıt verir: Mind, tool sonuçlarını nihai yanıtına entegre eder
Temel Örnek
Tool'lı istek:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What is the weather in Berlin?"
}
],
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature units"
}
},
"required": ["city"]
}
}
]
}'
Response:
{
"content": "",
"tool_calls": [
{
"id": "call_abc123",
"name": "get_weather",
"arguments": {
"city": "Berlin",
"units": "celsius"
}
}
]
}
Tool'u çalıştırın ve sonuçları geri gönderin:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What is the weather in Berlin?"
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_abc123",
"name": "get_weather",
"arguments": {
"city": "Berlin",
"units": "celsius"
}
}
]
},
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "{\"temperature\": 18, \"condition\": \"partly cloudy\", \"humidity\": 65}"
}
],
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["city"]
}
}
]
}'
Nihai yanıt:
{
"content": "The current weather in Berlin is 18°C and partly cloudy, with 65% humidity."
}
Tool Tanım Şeması
Her tool şu yapıyı izlemelidir:
{
"name": "tool_name",
"description": "Clear description of when and how to use this tool",
"parameters": {
"type": "object",
"properties": {
"param1": {
"type": "string",
"description": "What this parameter does"
}
},
"required": ["param1"]
},
"strict": true
}
Zorunlu alanlar:
| Alan | Tür | Açıklama |
|---|---|---|
name | string | Fonksiyon adı. Benzersiz olmalı ve dahili tool'larla çakışmamalıdır. |
description | string | Tool'un ne yaptığının ve ne zaman kullanılacağının açık açıklaması. Bu, mind'ın tool seçimini yönlendirir. |
parameters | object | Fonksiyon argümanlarını tanımlayan JSON Schema. |
Opsiyonel alanlar:
| Alan | Tür | Varsayılan | Açıklama |
|---|---|---|---|
strict | boolean | true | Argümanlar için katı şema doğrulamasını zorla. |
Tool Choice Modları
tool_choice parametresini kullanarak mind'ın tool'ları ne zaman ve nasıl çağıracağını kontrol edin:
| Değer | Davranış |
|---|---|
"auto" | Mind, tool'ları çağırıp çağırmayacağına karar verir (varsayılan) |
"required" | Mind, yanıt vermeden önce en az bir tool çağırmalıdır |
"none" | Bu turn için tool calling'i devre dışı bırakır |
{"name": "tool_name"} | Mind'ı belirli bir tool'u çağırmaya zorlar |
Örnekler:
// Mind'ın karar vermesine izin ver
{
"messages": [...],
"tools": [...],
"tool_choice": "auto"
}
// Belirli bir tool'u zorla
{
"messages": [...],
"tools": [...],
"tool_choice": {
"name": "search_database"
}
}
// En az bir tool call gerekli
{
"messages": [...],
"tools": [...],
"tool_choice": "required"
}
Paralel Tool Call'lar
Varsayılan olarak, mind'lar verimlilik için tek bir turn'de birden fazla tool çağırabilir:
{
"content": "",
"tool_calls": [
{
"id": "call_1",
"name": "get_customer",
"arguments": { "id": "CUST-001" }
},
{
"id": "call_2",
"name": "get_customer",
"arguments": { "id": "CUST-002" }
}
]
}
Paralel call'ları devre dışı bırakmak ve sıralı çalıştırmayı zorlamak için:
{
"messages": [...],
"tools": [...],
"parallel_tool_calls": false
}
Tool Mesaj Formatı
Tool sonuçlarını geri gönderirken tool rolünü kullanın:
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "{\"result\": \"success\", \"data\": {...}}"
}
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
role | string | Evet | "tool" olmalıdır |
tool_call_id | string | Evet | Asistan yanıtındaki tool call'dan gelen id |
content | string | Evet | Tool yürütme sonucu (tipik olarak JSON string) |
Dahili vs Kullanıcı Tool'ları
Minds, otomatik olarak yürütülen yerleşik sunucu tarafı tool'lara sahiptir:
| Dahili Tool | Amaç |
|---|---|
GET_SPARK_RAG | Mind'ın bilgi tabanında arama |
WEB_SEARCH | Web'de arama |
GENERATE_IMAGE | AI ile görsel oluşturma |
DISPLAY_IMAGE | Mind'ın belleğinden görsel gösterme |
DOCUMENT_PROCESSING | Yüklenmiş dosyaları analiz etme |
ANALYZE_LINK | Web URL'lerini getirme ve analiz etme |
Temel farklılıklar:
- Dahili tool'lar: Sunucu tarafında yürütülür, sonuçlar
contentvemetadata'ya dahil edilir. Aslatool_calls'ta döndürülmez. - Kullanıcı tool'ları: Sizin yürütmeniz için
tool_calls'ta döndürülür. Sonuçlartoolmesajları olarak geri gönderilmelidir.
Dahili tool'ları geçersiz kılamaz veya devre dışı bırakamazsınız. Kullanıcı tool'ları additive niteliktedir — mind'ın yeteneklerini genişletir.
Komple Çoklu-Tool Örneği
Birden fazla özel tool'a sahip bir legal assistant mind'ı:
curl -X POST "https://getminds.ai/api/v1/sparks/spark-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Create a new case for Schmidt vs. Mueller and search for similar precedents"
}
],
"tools": [
{
"name": "create_case",
"description": "Create a new legal case in the system",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Case title (parties involved)"
},
"practice_area": {
"type": "string",
"enum": ["corporate", "litigation", "employment", "ip"],
"description": "Legal practice area"
},
"client_id": {
"type": "string",
"description": "Client identifier"
}
},
"required": ["title", "practice_area"]
}
},
{
"name": "search_precedents",
"description": "Search legal database for similar cases",
"parameters": {
"type": "object",
"properties": {
"keywords": {
"type": "array",
"items": { "type": "string" },
"description": "Search keywords"
},
"practice_area": {
"type": "string",
"description": "Filter by practice area"
},
"max_results": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Maximum number of results"
}
},
"required": ["keywords"]
}
}
],
"parallel_tool_calls": true
}'
Paralel tool call'larla yanıt:
{
"content": "",
"tool_calls": [
{
"id": "call_1",
"name": "create_case",
"arguments": {
"title": "Schmidt vs. Mueller",
"practice_area": "litigation"
}
},
{
"id": "call_2",
"name": "search_precedents",
"arguments": {
"keywords": ["Schmidt", "Mueller"],
"practice_area": "litigation",
"max_results": 10
}
}
]
}
En İyi Uygulamalar
- Açık açıklamalar yazın:
descriptionalanı kritiktir. Her tool'un ne zaman ve neden kullanılacağı konusunda spesifik olun.❌ "description": "Search database" ✅ "description": "Search the legal precedents database for similar cases based on keywords and practice area" - Parametre açıklamalarını kullanın: Mind'ın her parametrenin ne yaptığını anlamasına yardım edin.
"case_id": { "type": "string", "description": "Unique case identifier in format CASE-YYYY-NNNN" } - Kısıtlı değerler için enum'lardan yararlanın:
"status": { "type": "string", "enum": ["pending", "active", "closed", "archived"] } - Doğrulama kısıtlamalarını ayarlayın:
"priority": { "type": "integer", "minimum": 1, "maximum": 5, "description": "Priority level (1=lowest, 5=highest)" } - Strict modu etkinleştirin: Mind'ın geçerli argümanlar üretmesini sağlamak için
strict: true(varsayılan) tutun. - Yapılandırılmış tool sonuçları döndürün: Ayrıştırmayı kolaylaştırmak için tool sonuçları için JSON kullanın:
{ "role": "tool", "tool_call_id": "call_123", "content": "{\"success\": true, \"case_id\": \"CASE-2026-001\", \"created_at\": \"2026-03-30T23:00:00Z\"}" } - Error'ları zarifçe yönetin: Tool sonucunda error ayrıntılarını döndürün:
{ "role": "tool", "tool_call_id": "call_123", "content": "{\"success\": false, \"error\": \"Case already exists\", \"error_code\": \"DUPLICATE_CASE\"}" }
Sınırlamalar
- İstek başına maksimum 128 tool
- Tool adları benzersiz olmalı ve dahili tool adlarıyla çakışmamalıdır
- Tool yürütme client tarafında gerçekleşir — tool'larınızı çalıştırmak ve güvenlik altına almak sizin sorumluluğunuzdur
- Mind'ın yanıt verebilmesi için tool sonuçları konuşma geçmişinde geri gönderilmelidir
JSON Schema Desteği
parameters alanı standart JSON Schema özelliklerini destekler:
Türler:
string,number,integer,boolean,array,object,null
Doğrulama:
enum— Belirli değerlere kısıtlaminimum,maximum— Sayısal sınırlarminLength,maxLength— String uzunluğuminItems,maxItems— Dizi boyutupattern— Regex doğrulamasıformat— String formatları (örn."date-time","email","uri")
Yapı:
properties— Obje özelliklerirequired— Zorunlu alanlaritems— Dizi öğesi şemasıadditionalProperties— Ekstra özelliklere izin ver/verme
Gelişmiş doğrulama ile örnek:
{
"name": "schedule_meeting",
"description": "Schedule a meeting with a client",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"date": {
"type": "string",
"format": "date-time",
"description": "Meeting date and time in ISO 8601 format"
},
"attendees": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"minItems": 1,
"maxItems": 20
},
"duration_minutes": {
"type": "integer",
"minimum": 15,
"maximum": 480,
"description": "Meeting duration (15-480 minutes)"
}
},
"required": ["title", "date", "attendees"]
}
}
Nasıl Çalışır
1. Bağlam Yükleme
Bir mesaj gönderdiğinizde, mind:
- Sistem prompt'unu ve yapılandırmasını yükler
- Bilgi tabanını ilgili bilgi için otomatik olarak arar
- Konuşma geçmişini dikkate alır
2. İşleme
Mind:
- Mesajınızı bağlam içinde analiz eder
- Yanıtları, citation'larla alınan bilgiye dayandırır
- Gerekirse ek tool'lara erişir (web search, görsel üretme, vb.)
- Kişiliğiyle uyumlu bir yanıt formüle eder
3. Yanıt Üretme
Mind:
- Uzmanlığını yansıtan bir yanıt üretir
- Bilgi tabanı veya web kaynakları kullanılırken citation'ları dahil eder
- Opsiyonel meta veri ile (citation'lar, görseller, vb.) mesajı döndürür
Meta Veri
Yanıtlar ek meta veri içerebilir:
Görseller
Bir mind görseller ürettiğinde veya gösterdiğinde:
{
"content": "Here are some logo concepts...",
"metadata": {
"images": [
{
"id": "img_123",
"url": "https://...",
"filename": "Logo Concept 1",
"description": "Modern minimalist logo with blue gradient",
"source": "generated"
}
]
}
}
Knowledge Citation'ları
Bir mind bilgi tabanından veya web aramadan bilgi aldığında:
{
"content": "Based on recent research, solar panel efficiency has improved significantly...",
"metadata": {
"ragCitations": [
{
"id": "9bf44ab0-9d83-42ec-b941-c0ab7610e949",
"displaySource": "Spark knowledge",
"similarity": 0.85
},
{
"id": "external-web-123",
"displaySource": "https://example.com/solar-research",
"similarity": 0.92
}
]
}
}
Citation Alanları:
id- Kaynak için benzersiz tanımlayıcıdisplaySource- İnsan tarafından okunabilir kaynak adı veya URLsimilarity- Kaynağın sorguyla ne kadar iyi eşleştiğini gösteren ilgililik skoru (0-1)
Mind'lar yanıt vermeden önce bilgi tabanlarını otomatik olarak arar ve yanıtlarını belirli kaynaklara dayandırırken citation'ları dahil eder.
Erişim Kontrolü
Şu mind'larla sohbet edebilirsiniz:
- Sahip olduklarınız - Oluşturduğunuz mind'lar
- Erişiminiz olanlar - Ekip üyeleri tarafından sizinle paylaşılan mind'lar
- Üyesi olduğunuz - Ait olduğunuz ekip workspace'lerindeki mind'lar
- Public mind'lar - Herkese açık mind'lar
Yetkisiz mind'lara erişim girişimi şunu döndürür:
{
"statusCode": 403,
"statusMessage": "Access denied"
}
Response Formatları
Metin Yanıtı
Çoğu yanıt düz metindir:
{
"content": "Based on current trends, I recommend focusing on..."
}
Yapılandırılmış Yanıt
Bazı mind'lar yapılandırılmış içerik döndürebilir:
{
"content": "Here's my analysis:\n\n1. Trend: AI Personalization\n - Impact: High\n - Timeline: 6-12 months\n\n2. Trend: Short-form Video\n - Impact: Very High\n - Timeline: Immediate"
}
Meta Veri ile Boş Yanıt
Bazen yalnızca meta veri döndürülür (örn. görsel üretme için):
{
"content": "",
"metadata": {
"images": [...]
}
}
En İyi Uygulamalar
Spesifik Olun
❌ "Tell me about marketing"
✅ "What are the most cost-effective digital marketing channels for a B2B SaaS startup with a $5K monthly budget?"
Bağlam Sağlayın
✅ "We're launching a sustainable fashion brand targeting Gen Z. What social media strategy would you recommend?"
Takip Soruları Kullanın
Konuşma belleğinden yararlanın:
Kullanıcı: "What are the top trends?"
Asistan: "The top trends are..."
Kullanıcı: "Which of these would work best for a small budget?"
Asistan: "For a small budget, I'd focus on..."
Bilgiyi Referans Gösterin
Bilgi yüklediyseniz, onu referans gösterin:
✅ "Based on our brand guidelines, what tone should we use for this campaign?"
Error Yanıtları
400 Bad Request
Eksik veya geçersiz spark ID:
{
"statusCode": 400,
"statusMessage": "Spark ID is required"
}
Desteklenmeyen provider:
{
"statusCode": 400,
"statusMessage": "Unsupported provider: 'invalid'. Supported providers: openai, anthropic, google."
}
Provider olmadan belirsiz model adı:
{
"statusCode": 400,
"statusMessage": "Cannot auto-detect provider for model 'my-model'. Please specify a 'provider' parameter (openai, anthropic, or google)."
}
401 Unauthorized
Geçersiz API key.
403 Forbidden
Spark'a erişim reddedildi:
{
"statusCode": 403,
"statusMessage": "Access denied"
}
404 Not Found
Spark mevcut değil:
{
"statusCode": 404,
"statusMessage": "Spark not found"
}
Kullanım Notları
- v1 API kimliği doğrulanmış hesap başına yapılandırılabilir sınır uygular (varsayılan dakikada 300 istek)
RateLimit-LimitveRateLimit-Remainingbaşlıklarını okuyun,429sonrasındaRetry-Afterdeğerine uyun- Üretim istekleri yoğun olduğundan paralel completion sayısını sınırlayın
Sonraki Adımlar
- latency ve performansı anlayın
- Error'lar ve rate limit'ler hakkında bilgi edinin
- İlk mind'ınızı oluşturun
- Yanıtları geliştirmek için bilgi yükleyin
- API genel bakışını okuyun