Este repositorty contém a implementação da Delphi sobre a API pública do OpenAI.
❗ Esta é uma biblioteca não oficial. O OpenAI não fornece nenhuma biblioteca oficial para Delphi.
API | Status |
---|---|
Modelos | ? Feito |
Conclusões (legado) | ? Feito |
Bater papo | ? Feito |
Visão de bate -papo | ? Feito |
Edições | ? Feito |
Imagens | ? Feito |
Incorporação | ? Feito |
Áudio | ? Feito |
Arquivos | ? Feito |
Tunes finos (privados) | ? Feito |
Afinação | ? Feito |
Moderações | ? Feito |
Motores (privados) | ? Feito |
Assistentes | ? Em andamento |
Tópicos | ? Em andamento |
Mensagens | ? Em andamento |
Corre | ? Em andamento |
O Openai é uma organização de pesquisa de inteligência artificial sem fins lucrativos fundada em São Francisco, Califórnia em 2015. Foi criado com o objetivo de avançar a inteligência digital de maneiras que beneficiam a humanidade como um todo e promove o progresso social. A organização se esforça para desenvolver programas e sistemas de IA (inteligência artificial) que possam pensar, agir e se adaptar rapidamente por conta própria - autonomamente. A missão da OpenAI é garantir o uso seguro e responsável da IA para o bem cívico, crescimento econômico e outros benefícios públicos; Isso inclui pesquisas de ponta sobre tópicos importantes, como segurança geral da IA, processamento de linguagem natural, métodos de aprendizado de reforço aplicados, algoritmos de visão de máquina etc.
A API OpenAI pode ser aplicada a praticamente qualquer tarefa que envolva a compreensão ou geração de linguagem ou código natural. Oferecemos um espectro de modelos com diferentes níveis de potência adequados para diferentes tarefas, bem como a capacidade de ajustar seus próprios modelos personalizados. Esses modelos podem ser usados para tudo, desde geração de conteúdo até pesquisa e classificação semântica.
Esta biblioteca fornece acesso à API do Serviço OpenAI, com base nos quais o ChatGPT funciona e, por exemplo, a geração de imagens do texto usando DALL-E
.
Você pode instalar o pacote do GetIt
diretamente no IDE. Ou, para usar a biblioteca, basta adicionar a pasta root
ao caminho da biblioteca IDE ou ao seu caminho de origem do projeto.
Para inicializar a instância da API, você precisa obter o token da API em sua organização aberta de IA.
Depois de ter um token, você pode inicializar a classe TOpenAI
, que é um ponto de entrada para a API.
Devido ao fato de que podem haver muitos parâmetros e nem todos eles são necessários, eles são configurados usando uma função anônima.
uses OpenAI;
var OpenAI := TOpenAIComponent.Create(Self, API_TOKEN);
ou
uses OpenAI;
var OpenAI: IOpenAI := TOpenAI.Create(API_TOKEN);
Depois de simplificar, você possui o token e a instância é inicializada, você está pronto para fazer solicitações.
Liste e descreva os vários modelos disponíveis na API. Você pode consultar a documentação dos modelos para entender quais modelos estão disponíveis e as diferenças entre eles.
var Models := OpenAI.Model.List();
try
for var Model in Models.Data do
MemoChat.Lines.Add(Model.Id);
finally
Models.Free;
end ;
Revise a documentação dos modelos para obter mais informações.
Dado um aviso, o modelo retornará uma ou mais conclusões previstas e também pode retornar as probabilidades de tokens alternativos em cada posição.
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 a documentação das conclusões para obter mais informações.
Dada uma conversa de bate -papo, o modelo retornará uma resposta de conclusão de bate -papo. O ChatGPT é alimentado pelo GPT-3.5-Turbo, o modelo de linguagem mais avançado do OpenAI.
Usando a API OpenAI, você pode criar seus próprios aplicativos com o GPT-3.5-Turbo para fazer coisas como:
Este guia explica como fazer uma chamada de API para modelos de idiomas baseados em bate-papo e compartilha dicas para obter bons 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 a documentação do bate -papo para obter mais informações.
Dada uma imagem de entrada rápida e/ou de entrada, o modelo gerará uma nova imagem.
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 a documentação das imagens para obter mais informações.
Em uma chamada da API, você pode descrever funções para GPT-3.5-Turbo-0613 e GPT-4-0613 e fazer com que o modelo opte de forma inteligente para produzir um objeto JSON contendo argumentos para chamar essas funções. A API de conclusão de bate -papo não chama a função; Em vez disso, o modelo gera JSON que você pode usar para chamar a função em seu código.
Os modelos mais recentes (GPT-3.5-Turbo-0613 e GPT-4-0613) foram ajustados para detectar quando uma função deve ser chamada (dependendo da entrada) e para responder com JSON que adere à assinatura da função. Com essa capacidade, também surge riscos potenciais. Recomendamos fortemente a construção de fluxos de confirmação do usuário antes de tomar ações que afetam o mundo em nome dos usuários (enviando um email, postando algo online, fazendo uma 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 a documentação das funções para obter mais informações.
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 não requer nenhuma biblioteca de terceiros. Funciona nas versões recentes de Delphi (10.3+). Embora não seja totalmente testado, ele também deve funcionar em todas as plataformas suportadas (Windows, Linux, MacOS, Android, iOS).
Como a biblioteca requer sua chave de API secreta, não é recomendável que você a use nos aplicativos do cliente, pois sua chave secreta será exposta, a menos que você tenha certeza dos riscos de segurança.
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.