FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
consultar a API ChatGPT con REST en C++ Builder Rad Studio 12
Buenos dias a todos
me gustaria si alguien me pudiese ayudar en este asunto que me trae de cabeza ya Estoy intentando hacer una consulta a CHATGPT mediante los componentes RESTClient RESTRequest y RESTResponse de C++ Builder Rad Studio 12 tengo esta funcion y aunque lo he intentado de multiples maneras, siempre me tira este error que lo que deduzco es que no logra autentificarse bien en el API de entrada Código:
{"error":{"message":"You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you're accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https:\/\/platform.openai.com\/account\/api-keys.","type":"invalid_request_error","param":null,"code":null}} he de aclarar que el codigo compila sin errores ninguno y funciona y en la ejecucion es cuando falla al intentar la Authorization Código:
// Set REST Client Memo1->Clear(); RESTClient1->BaseURL = "https://api.openai.com/v1/chat/completions"; RESTClient1->Params->AddHeader( "content", "Content-Type: application/json"); RESTClient1->Params->AddHeader( "Authorization", "Authorization: Bearer AQUI_PONGO_EL_API_KEY_QUE_TENGO_CREADO"); // Set REST Request RESTRequest1->Method = TRESTRequestMethod::rmPOST; RESTRequest1->Response = RESTResponse1; RESTRequest1->Response->ContentType = "application/json"; RESTRequest1->Response->ContentEncoding="UTF-8"; RESTRequest1->ClearBody(); RESTRequest1->Body->Add("{ \"prompt\": \"it was a rainy day for\", \"max_tokens\": 150 }", Rest::Types::TRESTContentType::ctNotLeadChar); RESTRequest1->Execute(); // Get REST Response TJSONValue *jValue = RESTResponse1->JSONValue; // Print REST Response Memo1->Lines->Add(jValue->ToString()); si alguien me pudiese ayudar lo agradeceria enormemente Última edición por Neftali [Germán.Estévez] fecha: 06-03-2024 a las 12:17:48. Razón: Añadir URL |
#2
|
||||
|
||||
¿Has probado con el RESTDebugger o con PostMan/Insomnia?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
Prueba a añadir el parámetro de esta manera:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
|||
|
|||
pues no Neftali, no tengo esos programas, intente bajarme el REST Debugger pero estos tios de Embarcadero tienen un formulario enorme pa esa jodida descarga y la verdad que ni lo rellene
tampoco funciona el codigo ese, lo acepta y compila asi como lo he adaptado, no lo he metido como me has puesto porque el parametro PoDoNotEncode no lo acepta lo he adaptado a C++ builder de esta manera pero me sigue dando el error de "Unauthorized" diciendo que no le estoy dando la API KEY Código:
RESTRequest1->AddParameter("Authorization","Authorization: Bearer API_KEY", pkHTTPHEADER); RESTRequest1->AddParameter( "Content-Type", "application/json"); Código:
RESTRequest1->AddParameter("Authorization","Bearer API_KEY", pkHTTPHEADER); RESTRequest1->AddParameter( "Content-Type", "application/json"); el codigo que ellos dan para lo de CHAT GPT con su componente es este: Código:
uses System.JSON, VCL.TMSFNCCloudBase; function AskChatGPT(AQuestion: string): string; var LCb: TTMSFNCCloudBase; LPostdata: string; LJsonValue: TJsonValue; LJsonArray: TJsonArray; LJSonString: TJsonString; begin Result := ''; LPostData := '{' + '"model": "text-davinci-003",'+ '"prompt": "' + AQuestion + '",'+ '"max_tokens": 2048,'+ '"temperature": 0'+ '}'; // create instance of TMS FNC Cloud Base class LCb := TTMSFNCCloudBase.Create; try // Use JSON for the REST API calls and set API KEY via Authorization header LCb.Request.AddHeader('Authorization','Bearer ' + CHATGPT_APIKEY); LCb.Request.AddHeader('Content-Type','application/json'); // Select HTTPS POST method, set POST data and specify endpoint URL LCb.Request.Method := rmPOST; LCb.Request.PostData := LPostData; LCb.Request.Host := 'http__s://api.openai.com'; LCb.Request.Path := 'v1/completions'; // Execute the HTTPS POST request synchronously (last param Async = false) LCb.ExecuteRequest(nil,nil,false); // Process returned JSON when request was successful if Lcb.RequestResult.Success then begin LJsonValue := TJSonObject.ParseJSONValue(Lcb.RequestResult.ResultString); LJsonValue := LJsonValue.GetValue<TJSonValue>('choices'); if LJsonValue is TJSonArray then begin LJSonArray := LJsonValue as TJSonArray; LJSonString := LJSonArray.Items[0].GetValue<TJSONString>('text'); Result := LJSonString.Value; end else end else raise Exception.Create('HTTP response code: ' + LCb.RequestResult.ResponseCode.ToString); finally LCb.Free; end; end; |
#5
|
||||
|
||||
Cita:
Revisalo, tal vez con las básicas o la community no viene, esto ya no lo puedo asegurar. A mi, esta me funciona en RADStudio 12:
Lo que pasa que en mi caso, me dice que ya he excedido la cuota, pero creo que si llega a ese punto es que ya ha pasado la autentificación.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
podrias darmela en formato C++ Builder?? yo es que pascal no lo controlo muy bien, se sustituir los . por -> y las comillas simples por dobles pero no mucho mas
y creo que si le meto los 4 parametros el de DoNotEncode dice que no corresponde con la estructura de la funcion me molesta que no funcione porque este codigo PHP lo tengo en mi hosting y funciona perfecto con mi api key y tal para consultar CHATGPT desde la pagina web pero aunque miro que lo envio con el Method POST y como lo compone el codigo este de PHP, no se lo traga no se porque mira, el codigo php es este y te aseguro que funciona perfecto ya luego en la app C++ Builder mirare como componer el prompt bien pero la cuestion es que no pasa el Login del Authorization Código:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Verificar si se recibió la pregunta del chat if (isset($_POST['mensaje'])) { // Obtener la pregunta del chat $pregunta = $_POST['mensaje']; $api_key = "AQUI PONGO MI API KEY SOLAMENTE sk-taltal"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http__s://api.openai.com/v1/chat/completions'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer ' . $api_key, ]); $data = [ 'model' => 'gpt-3.5-turbo', 'messages' => [], ]; $data['messages'][] = ['role' => 'system', 'content' => 'Actua como un experto ']; $data['messages'][] = ['role' => 'user', 'content' => $pregunta]; curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $response = curl_exec($ch); $respuesta = ''; $decoded_response = json_decode($response, true); if (isset($decoded_response['choices'][0]['message']['content'])) { $respuesta = $decoded_response['choices'][0]['message']['content']; } curl_close($ch); echo $respuesta; } } |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Integrar ChatGPT en aplicación C++ Builder | chenech | Trucos | 1 | 20-02-2023 21:16:20 |
CSFML en Rad Studio 10.0 Seattle (o en C++ Builder en general) | Snaked | C++ Builder | 3 | 24-11-2016 04:40:32 |
Como consultar si existe una tabla desde el componente Query de C++ Builder | MARX | C++ Builder | 3 | 06-08-2016 20:42:38 |
Consultar movimientos bancarios utilizando servicios rest | EL WINDSURFISTA | Internet | 2 | 11-02-2016 09:57:56 |
Consumir servicios rest desde c++ builder 6 | JM1985 | C++ Builder | 3 | 20-01-2016 08:40:07 |
|