![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java JavaScript Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Demonstrates Manual Tool Function CallsSee more AI ExamplesDemonstrates how to do manual tool function calling using Chilkat. This is where your application manually checks for function calls in the AI's response, makes the function calls, and returns the function call results to the AI.Note: This example requires Chilkat v11.4.0 or greater. For more information, see https://www.chilkatsoft.com/ai_tool_function_caling_briefly_explained.asp
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Variant vJsonTools Handle hoJsonTools Integer iToolIdx Handle hoAi String sConversation_name String sSysMessage String sDevMessage Variant vJsonFn Handle hoJsonFn Integer iNumFnCalls Integer iFn_idx Variant vSbFnName Handle hoSbFnName String sCallId String sZodiac_sign String sApplicationFnCallResult Variant vSbResponse Handle hoSbResponse String sTemp1 Boolean bTemp1 Move False To iSuccess // Create the following JSON to define tool functions available for the AI to use. // Note: You'll use the following JSON format regardless of the AI provider, whether // it be ChatGPT, Gemini, Claude, Grok, etc. Chilkat automatically converts to the required // format needed for a given AI provider. // In this example, the application is providing two functions the AI may choose to call. // { // "tools": [ // { // "name": "get_horoscope", // "description": "Get today's horoscope for an astrological sign.", // "parameters": { // "properties": { // "sign": { // "type": "string", // "description": "An astrological sign like Taurus or Aquarius" // } // } // } // }, // { // "name": "get_compatibility", // "description": "Returns compatibility analysis between two zodiac signs, including a score and explanation.", // "parameters": { // "properties": { // "sign1": { // "type": "string", // "description": "The first zodiac sign (e.g., Aries, Taurus, Gemini)." // }, // "sign2": { // "type": "string", // "description": "The second zodiac sign (e.g., Aries, Taurus, Gemini)." // }, // "relationship_type": { // "type": "string", // "description": "Type of compatibility to evaluate. (e.g., romantic, friendship, professional, general)" // }, // "detail_level": { // "type": "string", // "description": "Level of detail in the response. (e.g., short, medium, detailed)" // } // } // } // } // ] // } Get Create (RefClass(cComChilkatJsonObject)) To hoJsonTools If (Not(IsComObjectCreated(hoJsonTools))) Begin Send CreateComObject of hoJsonTools End Move 0 To iToolIdx Set ComI Of hoJsonTools To iToolIdx Get ComUpdateString Of hoJsonTools "tools[i].name" "get_horoscope" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].description" "Get today's horoscope for an astrological sign." To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.sign.type" "string" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.sign.description" "An astrological sign like Taurus or Aquarius" To iSuccess Move (iToolIdx + 1) To iToolIdx Set ComI Of hoJsonTools To iToolIdx Get ComUpdateString Of hoJsonTools "tools[i].name" "get_compatibility" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].description" "Returns compatibility analysis between two zodiac signs, including a score and explanation." To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.sign1.type" "string" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.sign1.description" "The first zodiac sign (e.g., Aries, Taurus, Gemini)." To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.sign2.type" "string" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.sign2.description" "The second zodiac sign (e.g., Aries, Taurus, Gemini)." To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.relationship_type.type" "string" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.relationship_type.description" "Type of compatibility to evaluate. (e.g., romantic, friendship, professional, general)" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.detail_level.type" "string" To iSuccess Get ComUpdateString Of hoJsonTools "tools[i].parameters.properties.detail_level.description" "Level of detail in the response. (e.g., short, medium, detailed)" To iSuccess // More tools can be added as desired.. Set ComEmitCompact Of hoJsonTools To False Get ComEmit Of hoJsonTools To sTemp1 Showln sTemp1 Get Create (RefClass(cComChilkatAi)) To hoAi If (Not(IsComObjectCreated(hoAi))) Begin Send CreateComObject of hoAi End // Register the tools that will be made available to the AI. Get pvComObject of hoJsonTools to vJsonTools Get ComRegisterManualTools Of hoAi vJsonTools To iSuccess // The provider can be "openai", "google", "claude", "grok", "mistral", "custom", etc. Set ComProvider Of hoAi To "openai" // Use your provider's API key. Set ComApiKey Of hoAi To "MY_API_KEY" // Choose a model. Set ComModel Of hoAi To "gpt-5-mini" // Tool function calling must always occur within a conversation. Move "convo_astrology" To sConversation_name Move "You are a helpful astrologer" To sSysMessage Move "Respond only with a horoscope generated by a tool. Use the tool output as the final answer." To sDevMessage Get ComNewConvo Of hoAi sConversation_name sSysMessage sDevMessage To iSuccess // Provide inputs Get ComInputAddText Of hoAi "What is my horoscope? I am an Aquarius." To iSuccess // Send inputs, tool functions, etc. and ask for a "text" response. Get ComAsk Of hoAi "text" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAi To sTemp1 Showln sTemp1 Procedure_Return End // Did the AI respond with requests for tool function calls? Get ComHasFunctionCalls Of hoAi To bTemp1 If (bTemp1 = True) Begin Get Create (RefClass(cComChilkatJsonObject)) To hoJsonFn If (Not(IsComObjectCreated(hoJsonFn))) Begin Send CreateComObject of hoJsonFn End Set ComEmitCompact Of hoJsonFn To False Get pvComObject of hoJsonFn to vJsonFn Get ComGetFunctionCalls Of hoAi vJsonFn To iSuccess Get ComEmit Of hoJsonFn To sTemp1 Showln sTemp1 // Note: Chilkat will convert responses from all AI providers to this format: // { // "function_call": [ // { // "name": "get_horoscope", // "call_id": "call_RYmeysYQFocFc7Z2ofkv61dW", // "arguments": "{\"sign\":\"Aquarius\"}", // "args": { // "sign": "Aquarius" // } // } // ] // } Get ComSizeOfArray Of hoJsonFn "function_call" To iNumFnCalls Move 0 To iFn_idx While (iFn_idx < iNumFnCalls) Set ComI Of hoJsonFn To iFn_idx Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFnName If (Not(IsComObjectCreated(hoSbFnName))) Begin Send CreateComObject of hoSbFnName End Get pvComObject of hoSbFnName to vSbFnName Get ComStringOfSb Of hoJsonFn "function_call[i].name" vSbFnName To iSuccess Get ComStringOf Of hoJsonFn "function_call[i].call_id" To sCallId Get ComContentsEqual Of hoSbFnName "get_horoscope" True To bTemp1 If (bTemp1 = True) Begin // The get_horoscope function (as defined above) has one argument named "sign". Get ComStringOf Of hoJsonFn "function_call[i].args.sign" To sZodiac_sign Showln "zodiac_sign = " sZodiac_sign // Insert application code here to call your app's get_horoscope function, passing the zodiac_sign to it.. // For this example, we'll pretend the app's get_horoscope function returned the following: Move "Aquarius: Next Tuesday you will befriend a baby otter." To sApplicationFnCallResult // Provide the tool call result as an input for the followup Ask. Get ComInputAddFnResult Of hoAi sCallId sApplicationFnCallResult To iSuccess End // Your application would add code to check for and handle each possible function call. Move (iFn_idx + 1) To iFn_idx Loop // After making the requested tool function calls, send the results back to the AI. Get ComAsk Of hoAi "text" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAi To sTemp1 Showln sTemp1 Procedure_Return End End // Get the final AI response. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponse If (Not(IsComObjectCreated(hoSbResponse))) Begin Send CreateComObject of hoSbResponse End Get pvComObject of hoSbResponse to vSbResponse Get ComGetOutputTextSb Of hoAi vSbResponse To iSuccess Get ComGetAsString Of hoSbResponse To sTemp1 Showln sTemp1 End_Procedure |
||||
© 2000-2026 Chilkat Software, Inc. All Rights Reserved.