Szybka odpowiedź: agent AI to po prostu model językowy, który potrafi wywołać Twój własny kod. Opisujesz zestaw narzędzi, model decyduje, kiedy któreś wywołać, Twoja aplikacja je uruchamia i zwraca wynik, a model kontynuuje stamtąd — w pętli, aż zadanie zostanie wykonane. sgcWebSockets daje Ci dwa sposoby na zbudowanie tego w Delphi lub C++ Builder: function calling dostawcy (model prosi o wywołanie jednej z Twoich funkcji przez komponent OpenAI, Anthropic lub Gemini) oraz MCP (otwarty Model Context Protocol, w którym Twój serwer udostępnia narzędzia, jakie dowolny klient lub agent obsługujący MCP może odkryć i wywołać). Oba wykorzystują tę samą ideę; wybierasz ten, który pasuje do tego, gdzie agent się znajduje.
Ludzie czasem wyobrażają sobie „agenta” jako specjalny model. Tak nie jest. To zwykły model czatu plus mała pętla sterująca w Twoim kodzie, która pozwala mu sięgnąć poza rozmowę. Gdy model może wywołać funkcję, która odpytuje bazę danych, czyta plik lub uderza do wewnętrznego API, przestaje być chatbotem i zaczyna być w stanie działać. Dwie ścieżki poniżej różnią się tylko tym, kto hostuje narzędzia.
Pętla agenta
Każdy agent, niezależnie od dostawcy, podąża za tym samym cyklem:
- Wyślij wiadomość użytkownika razem z listą definicji narzędzi (nazwa, opis, parametry).
- Model albo odpowiada zwykłym tekstem, albo odpowiada „wywołaj narzędzie X z tymi argumentami”.
- Jeśli prosi o narzędzie, Twój kod wykonuje prawdziwą pracę i przekazuje wynik z powrotem.
- Model czyta wynik i albo wywołuje kolejne narzędzie, albo tworzy ostateczną odpowiedź.
- Powtarzaj, aż model przestanie prosić o narzędzia.
Model nigdy nic nie wykonuje sam. Tylko proponuje wywołania; Twój kod Delphi zachowuje kontrolę nad tym, co faktycznie się uruchamia, co czyni ten wzorzec bezpiecznym do postawienia przed prawdziwymi systemami.
Ścieżka 1: function calling dostawcy
Najbardziej bezpośrednim sposobem, by dać pojedynczemu modelowi dostęp do Twojego kodu, jest własne API function calling dostawcy. Deklarujesz dostępne funkcje, model wybiera jedną, gdy jej potrzebuje, a w Twoim komponencie wyzwala się zdarzenie, abyś mógł dostarczyć wynik. Z komponentem OpenAI definiujesz narzędzia raz na asystencie, a następnie obsługujesz wywołanie:
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"]}}}]';
Gdy model zdecyduje, że potrzebuje wartości, komponent zgłasza OnFunctionCall. Sprawdzasz aRequest._Function._Name, aby wiedzieć, o które narzędzie poproszono, i wpisujesz odpowiedź do aResponse.Output — ten wynik jest podawany prosto z powrotem do modelu, aby mógł dokończyć swoją odpowiedź:
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;
Ta procedura obsługi zdarzenia jest pętlą agenta. Za każdym razem, gdy model prosi o narzędzie, uruchamiasz je i zwracasz wynik; komponent podtrzymuje rozmowę, aż model będzie miał wszystko, czego potrzebuje. Ta ścieżka jest idealna, gdy agent znajduje się wewnątrz Twojej własnej aplikacji i rozmawia z jednym dostawcą. Ten sam kształt jest dostępny w komponentach Anthropic i Gemini, więc nie jesteś zamknięty w jednym rozwiązaniu. Zobacz przewodnik po function calling OpenAI po pełny przykład.
Ścieżka 2: narzędzia MCP
Function calling wiąże Twoje narzędzia z jednym modelem w jednej aplikacji. Model Context Protocol zamienia tę samą ideę w usługę wielokrotnego użytku: Twoja aplikacja udostępnia zestaw narzędzi przez standardowy punkt końcowy JSON-RPC, a dowolny klient lub agent obsługujący MCP — asystent w IDE, desktopowa aplikacja AI lub Twoja własna pętla agenta — może się połączyć, odkryć te narzędzia i je wywołać. Piszesz narzędzie raz; każdy host MCP może go użyć.
W sgcWebSockets strona serwerowa to TsgcWSAPIServer_MCP. Dołączasz go do serwera HTTP sgcWebSockets, rejestrujesz narzędzia za pomocą Tools.AddTool i obsługujesz przychodzące wywołanie w OnMCPRequestTool:
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;
Gdy połączony klient wywołuje narzędzie, zdarzenie wyzwala się z silnie typowanymi obiektami żądania i odpowiedzi. Odczytujesz nazwę narzędzia z aRequest.Params.Name, a jego argumenty z aRequest.Params.Arguments, a następnie wpisujesz odpowiedź za pomocą aResponse.Result.Content.AddText:
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;
Procedura obsługi wykonuje to samo zadanie co zdarzenie function calling, ale teraz narzędzie jest osiągalne dla dowolnego hosta MCP przez sieć. Ponieważ MCP jest opublikowanym standardem, agent prowadzący rozmowę wcale nie musi być napisany przez Ciebie. Przeczytaj więcej w przeglądzie MCP oraz na stronie komponentu MCP Server.
Której ścieżki powinieneś użyć?
| Jeśli chcesz… | Użyj | Komponent |
|---|---|---|
| Agenta, który żyje wewnątrz Twojej własnej aplikacji i rozmawia z jednym dostawcą | function calling dostawcy | TsgcAIOpenAIAssistant |
| Narzędzi, które dowolny klient lub agent obsługujący MCP może odkryć i wywołać | serwer MCP | TsgcWSAPIServer_MCP |
| Wywoływać narzędzia hostowane przez czyjś serwer MCP | klient MCP | TsgcWSAPIClient_MCP |
Te dwie nie wykluczają się wzajemnie. Powszechnym projektem jest agent w aplikacji, który używa function calling dostawcy dla swoich własnych prywatnych narzędzi, łącząc się jednocześnie jako klient MCP ze współdzielonymi serwerami narzędzi w innych miejscach Twojej organizacji. Niezależnie od wyboru, pętla, którą piszesz, wygląda niemal identycznie, więc przejście między nimi później jest tanie.
Jak zacząć
Obie ścieżki są dostarczane w sgcWebSockets (serwer i klient MCP to komponenty Enterprise). Pobierz bezpłatną wersję próbną, upuść TsgcAIOpenAIAssistant dla function calling lub TsgcWSAPIServer_MCP dla usługi MCP, podepnij zdarzenie narzędzia, a masz agenta, który potrafi działać na Twoim własnym kodzie w kilku liniach. Przejrzyj każdy klocek AI w centrum komponentów AI i LLM.
Pytania lub potrzebujesz pomocy w zaprojektowaniu swojego agenta? Skontaktuj się z nami — odpowiedź otrzymasz od ludzi, którzy napisali ten kod.
