Chat Completions API'sine benzer şekilde, Assistants API de function calling'i destekler. Function calling, Assistants API'sine işlevleri tanımlamanıza ve onun, çağrılması gereken işlevleri argümanlarıyla birlikte akıllıca döndürmesini sağlamanıza olanak tanır.
Bu örnekte, bir hava durumu asistanı oluşturacağız ve Asistanın çağırabileceği araçlar olarak get_current_temperature ve get_rain_probability adında iki işlev tanımlayacağız. Paralel function calling kullanan örneğimizde, Asistana San Francisco'da bugün havanın nasıl olduğunu ve yağmur olasılığını soracağız. Ayrıca Asistanın yanıtının akışla nasıl çıktılanacağını da gösteriyoruz.Asistanınızı oluştururken, önce işlevleri asistanın tools parametresi altında tanımlayacaksınız.
Assistant := TsgcAIOpenAIAssistant.Create(nil);
Assistant.OpenAIOptions.ApiKey := 'sk-askdjfalskdjfl23kjkjasdefasdfj';
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';
Assistant.AssistantOptions.Tools.Functions.Enabled := False;
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","description":"The city and state, e.g., San Francisco, CA"},"unit":{"type":"string","enum":["Celsius","Fahrenheit"],"description":"The temperature unit to use. Infer this from the user location."}},"required":["location","unit"]}}},{"type":"function","function":{"name":"get_rain_probability","description":"Get the probability of rain for a specific location","parameters":{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g., San Francisco, CA"}},"required":["location"]}}}]'
Assistant.AssistantOptions.Tools.FileSearch.Enabled := False;
Assistant.AssistantOptions.Tools.CodeInterpreter.Enabled := False;
Adım 2: Bir Thread oluşturun ve Mesajlar ekleyin
Bir kullanıcı konuşma başlattığında bir Thread oluşturun ve kullanıcı soru sordukça Thread'e Mesajlar ekleyin.
procedure SendMessage()
var
i: Integer;
oMessage: TsgcOpenAIClass_Message;
oMessages: TsgcOpenAIClass_Response_List_Messages;
oRun: TsgcOpenAIClass_Run;
begin
DoLog('[user]: ' + memoMessage.Lines.Text);
Screen.Cursor := crHourGlass;
Try
oMessage := Assistant.CreateMessageText('thread_id', 'What is the weather in San Francisco today and the likelihood it will rain?');
if Assigned(oMessage) then
begin
oRun := Assistant.CreateRunAndWait('thread_id');
if Assigned(oRun) then
begin
oMessages := Assistant.GetMessages('thread_id', oRun.Id);
if Assigned(oMessages) and (Length(oMessages.Messages) > 0) then
begin
memoMessage.Lines.Text := '';
for i := 0 to Length(oMessages.Messages) - 1 do
DoLog('[assistant]: ' + DoFormatResponse(oMessages.Messages[i]
.ContentText + #13#10));
end;
end;
end;
Finally
Screen.Cursor := crDefault;
End;
end;
Adım 3: OnFunctionCall Olayını İşleyin
Bileşen bir işlev parametre değerinin gerekli olduğunu algıladığında, OnFunctionCall olayı çağrılır. İstek ayrıntılarını öğrenmek için Request._Function parametresini, yanıtı göndermek için Response.Output'u kullanın.
procedure TFRMOpenAIAssistant.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;
});
Delphi Demosu
Windows için derlenmiş delphi demosunu aşağıda bulabilirsiniz.
