Hızlı yanıt: bir AI aracısı, yalnızca kendi kodunuzu çağırabilen bir dil modelidir. Bir dizi araç tanımlarsınız, model birini ne zaman çağıracağına karar verir, uygulamanız onu çalıştırıp sonucu döndürür ve model oradan devam eder — görev tamamlanana kadar bir döngü içinde. sgcWebSockets, bunu Delphi veya C++ Builder'da oluşturmanız için iki yol verir: sağlayıcı function calling (model, OpenAI, Anthropic veya Gemini bileşeni aracılığıyla işlevlerinizden birini çağırmayı ister) ve MCP (açık Model Context Protocol; sunucunuzun, MCP yeteneğine sahip herhangi bir istemcinin veya aracının keşfedip çağırabileceği araçları açığa çıkardığı yer). Her ikisi de aynı fikri kullanır; aracının nerede yaşadığına uyanı seçersiniz.
İnsanlar bazen bir "aracı"yı özel bir model olarak hayal eder. Değildir. O, kodunuzdaki ve modelin konuşmanın dışına ulaşmasını sağlayan küçük bir denetim döngüsü ile birlikte sıradan bir sohbet modelidir. Model bir veritabanını sorgulayan, bir dosyayı okuyan veya dahili bir API'ye giden bir işlevi çağırabildiğinde, bir sohbet botu olmaktan çıkar ve eyleme geçebilir hale gelir. Aşağıdaki iki yol yalnızca araçları kimin barındırdığı konusunda farklılaşır.
Aracı döngüsü
Her aracı, sağlayıcıdan bağımsız olarak aynı döngüyü izler:
- Kullanıcının mesajını, araç tanımları listesiyle (ad, açıklama, parametreler) birlikte gönderin.
- Model ya düz metinle yanıt verir ya da "X aracını şu argümanlarla çağır" der.
- Bir araç isterse, kodunuz gerçek işi çalıştırır ve sonucu geri verir.
- Model sonucu okur ve ya başka bir aracı çağırır ya da nihai yanıtı üretir.
- Model araç istemeyi bırakana kadar tekrarlayın.
Model hiçbir şeyi kendisi yürütmez. Yalnızca çağrılar önerir; gerçekte ne çalışacağının denetimini Delphi kodunuz elinde tutar, ki bu da deseni gerçek sistemlerin önüne koymayı güvenli kılan şeydir.
Yol 1: Sağlayıcı function calling
Tek bir modele kodunuza erişim vermenin en doğrudan yolu, sağlayıcının kendi function-calling API'sidir. Mevcut işlevleri bildirirsiniz, model ihtiyaç duyduğunda birini seçer ve bileşeninizde bir olay tetiklenir, böylece sonucu sağlayabilirsiniz. OpenAI bileşeniyle araçları asistanda bir kez tanımlar, sonra çağrıyı işlersiniz:
Assistant := TsgcAIOpenAIAssistant.Create(nil);
Assistant.OpenAIOptions.ApiKey := 'sk-...';
Assistant.AssistantOptions.Name := 'Delphi Weather Bot';
Assistant.AssistantOptions.Instructions.Text :=
'You are a weather bot. Use the provided functions to answer questions.';
Assistant.AssistantOptions.Model := 'gpt-4o';
// Describe the callable functions as JSON tool definitions
Assistant.AssistantOptions.Tools.Functions.Functions.Text :=
'[{"type":"function","function":{"name":"get_current_temperature",' +
'"description":"Get the current temperature for a specific location",' +
'"parameters":{"type":"object","properties":{"location":{"type":"string"}},' +
'"required":["location"]}}}]';
Model bir değere ihtiyaç duyduğuna karar verdiğinde, bileşen OnFunctionCall olayını tetikler. Hangi aracın istendiğini bilmek için aRequest._Function._Name'i inceler ve yanıtı aResponse.Output'a yazarsınız — bu sonuç doğrudan modele geri verilir, böylece yanıtını tamamlayabilir:
procedure TForm1.AssistantFunctionCall(Sender: TObject;
const aRequest: TsgcOpenAIClass_ToolCall;
const aResponse: TsgcHTTPOpenAI_ToolCall_Response);
begin
if aRequest._Function._Name = 'get_current_temperature' then
aResponse.Output := 30
else if aRequest._Function._Name = 'get_rain_probability' then
aResponse.Output := 10;
end;
O olay işleyicisi tam da aracı döngüsüdür. Model her araç istediğinde, onu çalıştırır ve dönersiniz; bileşen, model ihtiyacı olan her şeye sahip olana kadar konuşmayı sürdürür. Bu yol, aracı kendi uygulamanızın içinde yaşadığında ve tek bir sağlayıcıyla konuştuğunda idealdir. Aynı biçim Anthropic ve Gemini bileşenlerinde de mevcuttur, dolayısıyla bir yere kilitlenmezsiniz. Tam örnek için OpenAI function calling adım adım anlatımına bakın.
Yol 2: MCP araçları
Function calling, araçlarınızı tek bir uygulamadaki tek bir modele bağlar. Model Context Protocol aynı fikri yeniden kullanılabilir bir hizmete dönüştürür: uygulamanız bir dizi aracı standart bir JSON-RPC uç noktası üzerinden açığa çıkarır ve MCP yeteneğine sahip herhangi bir istemci ya da aracı — bir IDE asistanı, bir masaüstü AI uygulaması ya da kendi aracı döngünüz — bağlanabilir, bu araçları keşfedebilir ve onları çağırabilir. Aracı bir kez yazarsınız; her MCP ana makinesi onu kullanabilir.
sgcWebSockets'te sunucu tarafı TsgcWSAPIServer_MCP'dir. Onu bir sgcWebSockets HTTP sunucusuna iliştirir, araçları Tools.AddTool ile kaydeder ve gelen çağrıyı OnMCPRequestTool içinde işlersiniz:
uses
sgcWebSocket_Server, sgcAI, sgcAI_MCP_Classes, sgcAI_MCP_Server;
procedure TForm1.SetupMCPServer;
begin
MCPServer.Server := Server;
MCPServer.EndpointOptions.Endpoint := '/mcp';
MCPServer.MCPOptions.ServerInfo.Name := 'sgc-mcp-server';
MCPServer.MCPOptions.ServerInfo.Version := '1.0.0';
// Register a callable tool with a typed argument
with MCPServer.Tools.AddTool('GetTemperature',
'Get the actual temperature in a city.') do
InputSchema.Properties.AddProperty('city', True);
MCPServer.OnMCPRequestTool := MCPRequestTool;
Server.Port := 8080;
Server.Active := True;
end;
Bağlı bir istemci aracı çağırdığında, olay türü kesin olarak belirtilmiş istek ve yanıt nesneleriyle tetiklenir. Araç adını aRequest.Params.Name'den, argümanlarını ise aRequest.Params.Arguments'tan okur, ardından yanıtı aResponse.Result.Content.AddText ile yazarsınız:
procedure TForm1.MCPRequestTool(Sender: TObject;
const aSession: TsgcAI_MCP_Session;
const aRequest: TsgcAI_MCP_Request_ToolsCall;
const aResponse: TsgcAI_MCP_Response_ToolsCall);
begin
if aRequest.Params.Name = 'GetTemperature' then
aResponse.Result.Content.AddText('The current temperature in ' +
aRequest.Params.Arguments.Item[0].Value + ' is 22 Celsius');
end;
İşleyici, function-calling olayıyla aynı işi yapar, ancak artık araç, ağ üzerinden herhangi bir MCP ana makinesi tarafından erişilebilir durumdadır. MCP yayımlanmış bir standart olduğundan, konuşmayı yöneten aracının sizin tarafınızdan yazılmış olması hiç gerekmez. Daha fazlasını MCP genel bakışında ve MCP Server bileşeni sayfasında okuyun.
Hangi yolu kullanmalısınız?
| İstediğiniz şey… | Kullanın | Bileşen |
|---|---|---|
| Kendi uygulamanızın içinde yaşayan ve tek bir sağlayıcıyla konuşan bir aracı | Sağlayıcı function calling | TsgcAIOpenAIAssistant |
| MCP yeteneğine sahip herhangi bir istemcinin ya da aracının keşfedip çağırabileceği araçlar | MCP sunucusu | TsgcWSAPIServer_MCP |
| Başkasının MCP sunucusu tarafından barındırılan araçları çağırmak | MCP istemcisi | TsgcWSAPIClient_MCP |
İki yol birbirini dışlamaz. Yaygın bir tasarım, kendi özel araçları için sağlayıcı function calling kullanan, aynı zamanda kuruluşunuzdaki başka yerlerdeki paylaşılan araç sunucularına bir MCP istemcisi olarak bağlanan uygulama içi bir aracıdır. Hangisini seçerseniz seçin, yazdığınız döngü neredeyse aynı görünür, dolayısıyla daha sonra aralarında geçiş yapmak ucuzdur.
Başlarken
Her iki yol da sgcWebSockets ile gelir (MCP sunucusu ve istemcisi Enterprise bileşenleridir). Ücretsiz denemeyi edinin, function calling için TsgcAIOpenAIAssistant'ı ya da bir MCP hizmeti için TsgcWSAPIServer_MCP'yi ekleyin, araç olayını bağlayın ve birkaç satırda kendi kodunuz üzerinde eyleme geçebilen bir aracınız olsun. Her AI yapı taşına AI & LLM bileşenleri merkezinde göz atın.
Sorularınız mı var ya da aracınızı tasarlarken yardım mı istiyorsunuz? İletişime geçin — kodu yazan kişilerden yanıt alacaksınız.
