Esta repositorta contiene la implementación de Delphi sobre la API pública de OpenAI.
❗ Esta es una biblioteca no oficial. Operai no proporciona ninguna biblioteca oficial para Delphi.
API | Estado |
---|---|
Modelos | ? Hecho |
Finalizaciones (legado) | ? Hecho |
Charlar | ? Hecho |
Visión de chat | ? Hecho |
Ediciones | ? Hecho |
Imágenes | ? Hecho |
Incrustaciones | ? Hecho |
Audio | ? Hecho |
Archivos | ? Hecho |
Ajuste fino (deprimido) | ? Hecho |
Sintonia FINA | ? Hecho |
Moderaciones | ? Hecho |
Motores (deprimidos) | ? Hecho |
Asistentes | ? En curso |
Trapos | ? En curso |
Mensajes | ? En curso |
Carreras | ? En curso |
Openai es una organización de investigación de inteligencia artificial sin fines de lucro fundada en San Francisco, California, en 2015. Fue creado con el propósito de avanzar en la inteligencia digital de manera que beneficie a la humanidad en su conjunto y promueva el progreso social. La organización se esfuerza por desarrollar programas y sistemas de IA (inteligencia artificial) que puedan pensar, actuar y adaptarse rápidamente por su cuenta, de forma autónoma. La misión de Operai es garantizar el uso seguro y responsable de la IA para el bien cívico, el crecimiento económico y otros beneficios públicos; Esto incluye la investigación de vanguardia sobre temas importantes como la seguridad general de la IA, el procesamiento del lenguaje natural, los métodos de aprendizaje de refuerzo aplicado, los algoritmos de visión artificial, etc.
La API de OpenAI se puede aplicar a prácticamente cualquier tarea que implique comprender o generar un lenguaje o código natural. Ofrecemos un espectro de modelos con diferentes niveles de potencia adecuados para diferentes tareas, así como la capacidad de ajustar sus propios modelos personalizados. Estos modelos se pueden usar para todo, desde generación de contenido hasta búsqueda y clasificación semántica.
Esta biblioteca proporciona acceso a la API del servicio OpenAI, sobre la base de la cual funciona ChatGPT y, por ejemplo, la generación de imágenes a partir de texto usando DALL-E
.
Puede instalar el paquete desde GetIt
directamente en el IDE. O, para usar la biblioteca, simplemente agregue la carpeta root
a la ruta de la biblioteca IDE o la ruta de fuente de su proyecto.
Para inicializar la instancia de API, debe obtener el token API de su organización abierta de IA.
Una vez que tenga un token, puede inicializar la clase TOpenAI
, que es un punto de entrada a la API.
Debido al hecho de que puede haber muchos parámetros y no se requieren todos, se configuran utilizando una función anónima.
uses OpenAI;
var OpenAI := TOpenAIComponent.Create(Self, API_TOKEN);
o
uses OpenAI;
var OpenAI: IOpenAI := TOpenAI.Create(API_TOKEN);
Una vez que token posee el token, y la instancia se inicializa, está listo para hacer solicitudes.
Lista y describa los diversos modelos disponibles en la API. Puede consultar la documentación de los modelos para comprender qué modelos están disponibles y las diferencias entre ellos.
var Models := OpenAI.Model.List();
try
for var Model in Models.Data do
MemoChat.Lines.Add(Model.Id);
finally
Models.Free;
end ;
Revise la documentación de los modelos para obtener más información.
Dado un aviso, el modelo devolverá una o más terminaciones predichas y también puede devolver las probabilidades de tokens alternativos en cada posición.
var Completions := OpenAI.Completion.Create(
procedure(Params: TCompletionParams)
begin
Params.Prompt(MemoPrompt.Text);
Params.MaxTokens( 2048 );
end );
try
for var Choice in Completions.Choices do
MemoChat.Lines.Add(Choice.Index.ToString + ' ' + Choice.Text);
finally
Completions.Free;
end ;
Revise la documentación de finalización para obtener más información.
Dada una conversación de chat, el modelo devolverá una respuesta de finalización de chat. ChatGPT funciona con GPT-3.5-TURBO, el modelo de idioma más avanzado de OpenAI.
Usando la API de OpenAI, puede construir sus propias aplicaciones con GPT-3.5-TURBO para hacer cosas como:
Esta guía explica cómo hacer una llamada API para modelos de idiomas basados en chat y consejos para compartir para obtener buenos resultados.
var Chat := OpenAI.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Messages([TChatMessageBuild.Create(TMessageRole.User, Text)]);
Params.MaxTokens( 1024 );
end );
try
for var Choice in Chat.Choices do
MemoChat.Lines.Add(Choice.Message.Content);
finally
Chat.Free;
end ;
OpenAI.Chat.CreateStream(
procedure(Params: TChatParams)
begin
Params.Messages([TchatMessageBuild.User(Buf.Text)]);
Params.MaxTokens( 1024 );
Params.Stream;
end ,
procedure(Chat: TChat; IsDone: Boolean; var Cancel: Boolean)
begin
if ( not IsDone) and Assigned(Chat) then
Writeln(Chat.Choices[ 0 ].Delta.Content)
else if IsDone then
Writeln( ' DONE! ' );
Writeln( ' ------- ' );
Sleep( 100 );
end );
var Chat := OpenAI.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Model( ' gpt-4-vision-preview ' );
var Content: TArray<TMessageContent>;
Content := Content + [TMessageContent.CreateText(Text)];
Content := Content + [TMessageContent.CreateImage(FileToBase64( ' file path ' ))];
Params.Messages([TChatMessageBuild.User(Content)]);
Params.MaxTokens( 1024 );
end );
try
for var Choice in Chat.Choices do
MemoChat.Lines.Add(Choice.Message.Content);
finally
Chat.Free;
end ;
Revise la documentación de chat para obtener más información.
Dado un aviso y/o una imagen de entrada, el modelo generará una nueva imagen.
var Images := OpenAI.Image.Create(
procedure(Params: TImageCreateParams)
begin
Params.Prompt(MemoPrompt.Text);
Params.ResponseFormat( ' url ' );
end );
try
for var Image in Images.Data do
Image1.Bitmap.LoadFromUrl(Image.Url);
finally
Images.Free;
end ;
Revise la documentación de imágenes para obtener más información.
En una llamada API, puede describir las funciones a GPT-3.5-TURBO-0613 y GPT-4-0613, y hacer que el modelo elija de manera inteligente generar un objeto JSON que contenga argumentos para llamar a esas funciones. La API de finalización de chat no llama a la función; En su lugar, el modelo genera JSON que puede usar para llamar a la función en su código.
Los últimos modelos (GPT-3.5-TURBO-0613 y GPT-4-0613) se han ajustado tanto para detectar cuándo debe llamarse una función (dependiendo de la entrada) y responder con JSON que se adhiere a la firma de la función. Con esta capacidad también viene los riesgos potenciales. Recomendamos encarecidamente la construcción de flujos de confirmación del usuario antes de tomar medidas que afecten al mundo en nombre de los usuarios (enviando un correo electrónico, publicar algo en línea, realizar una compra, etc.).
var Chat := OpenAI.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Functions(Funcs); // list of functions (TArray<IChatFunction>)
Params.FunctionCall(TFunctionCall.Auto);
Params.Messages([TChatMessageBuild.User(Text)]);
Params.MaxTokens( 1024 );
end );
try
for var Choice in Chat.Choices do
if Choice.FinishReason = TFinishReason.FunctionCall then
ProcFunction(Choice.Message.FunctionCall) // execute function (send result to chat, and continue)
else
MemoChat.Lines.Add(Choice.Message.Content);
finally
Chat.Free;
end ;
...
procedure ProcFunction (Func: TChatFunctionCall);
begin
var FuncResult := Execute(Func. Name , Func.Arguments); // execute function and get result (json)
var Chat := OpenAI.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Functions(Funcs); // list of functions (TArray<IChatFunction>)
Params.FunctionCall(TFunctionCall.Auto);
Params.Messages([ // need all history
TChatMessageBuild.User(Text),
TChatMessageBuild.NewAsistantFunc(Func. Name , Func.Arguments),
TChatMessageBuild.Func(FuncResult, Func. Name )]);
Params.MaxTokens( 1024 );
end );
try
for var Choice in Chat.Choices do
MemoChat.Lines.Add(Choice.Message.Content);
finally
Chat.Free;
end ;
end ;
Revise las funciones de la documentación para obtener más información.
try
var Images := OpenAI.Image.Create(...);
except
on E: OpenAIExceptionRateLimitError do
ShowError( ' OpenAI Limit Error: ' + E.Message);
on E: OpenAIException do
ShowError( ' OpenAI Error: ' + E.Message);
end ;
OpenAI.API.Client.ProxySettings := TProxySettings.Create(ProxyHost, ProxyPort, ProxyUserName, ProxyPassword);
Chatgpt (fmx)
Esta biblioteca no requiere ninguna biblioteca de terceros. Funciona en versiones recientes de Delphi (10.3+). Sin embargo, no está completamente probado por completo, también debería funcionar en todas las plataformas compatibles (Windows, Linux, MacOS, Android, iOS).
Dado que la biblioteca requiere su clave de API secreta, no se recomienda que la use en aplicaciones de clientes, ya que su clave secreta estará expuesta, a menos que esté seguro sobre los riesgos de seguridad.
MIT License
Copyright (c) 2023 HemulGM
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.