このリポジトリには、Openai Public APIを介したDelphiの実装が含まれています。
❗これは非公式のライブラリです。 Openaiは、Delphiの公式図書館を提供していません。
API | 状態 |
---|---|
モデル | ?終わり |
完了(レガシー) | ?終わり |
チャット | ?終わり |
チャットビジョン | ?終わり |
編集 | ?終わり |
画像 | ?終わり |
埋め込み | ?終わり |
オーディオ | ?終わり |
ファイル | ?終わり |
微調整(預金) | ?終わり |
微調整 | ?終わり |
モデレーション | ?終わり |
エンジン(脱退) | ?終わり |
アシスタント | ?進行中 |
スレッド | ?進行中 |
メッセージ | ?進行中 |
実行 | ?進行中 |
Openaiは、2015年にカリフォルニア州サンフランシスコで設立された非営利の人工知能研究機関です。これは、人類全体に利益をもたらし、社会的進歩を促進する方法でデジタルインテリジェンスを前進させる目的で作成されました。組織は、自律的に迅速に考え、行動し、適応できるAI(人工知能)プログラムとシステムの開発に努めています。 Openaiの使命は、市民の良好、経済成長、その他の公的利益のためにAIの安全かつ責任ある使用を確保することです。これには、一般的なAIの安全性、自然言語処理、応用強化学習方法、マシンビジョンアルゴリズムなどの重要なトピックに関する最先端の研究が含まれます。
OpenAI APIは、自然言語またはコードの理解または生成を伴うほぼすべてのタスクに適用できます。さまざまなタスクに適したさまざまなレベルの電力を備えたさまざまなモデルと、独自のカスタムモデルを微調整する機能を提供しています。これらのモデルは、コンテンツ生成からセマンティック検索と分類まで、すべてに使用できます。
このライブラリは、CHATGPTが機能することに基づいて、OpenAIサービスのAPIへのアクセス、たとえばDALL-E
を使用したテキストからの画像の生成を提供します。
GetIt
からIDEに直接パッケージをインストールできます。または、ライブラリを使用するには、 root
フォルダーをIDEライブラリパスまたはプロジェクトソースパスに追加するだけです。
APIインスタンスを初期化するには、オープンAI組織からAPIトークンを取得する必要があります。
トークンができたら、APIへのエントリポイントであるTOpenAI
クラスを初期化できます。
多くのパラメーターが存在する可能性があり、それらのすべてが必要であるとは限らないという事実により、それらは匿名関数を使用して構成されています。
uses OpenAI;
var OpenAI := TOpenAIComponent.Create(Self, API_TOKEN);
または
uses OpenAI;
var OpenAI: IOpenAI := TOpenAI.Create(API_TOKEN);
トークンがトークンを所有すると、インスタンスが初期化されます。リクエストを行う準備ができています。
APIで利用可能なさまざまなモデルをリストして説明します。モデルのドキュメントを参照して、どのモデルが利用可能であるか、およびそれらの違いを理解できます。
var Models := OpenAI.Model.List();
try
for var Model in Models.Data do
MemoChat.Lines.Add(Model.Id);
finally
Models.Free;
end ;
詳細については、モデルのドキュメントを確認してください。
プロンプトが与えられると、モデルは1つ以上の予測された完了を返し、各位置で代替トークンの確率を返すこともできます。
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 ;
詳細については、完了文書を確認してください。
チャットの会話を考えると、モデルはチャット完了応答を返します。 ChatGptは、Openaiの最も先進的な言語モデルであるGPT-3.5-Turboを搭載しています。
Openai APIを使用して、GPT-3.5-ターボで独自のアプリケーションを構築して、次のようなことを行うことができます。
このガイドでは、チャットベースの言語モデルをAPI呼びかける方法と、良い結果を得るためのヒントを共有する方法について説明します。
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 ;
詳細については、チャットドキュメントを確認してください。
プロンプトおよび/または入力画像が与えられた場合、モデルは新しい画像を生成します。
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 ;
詳細については、画像のドキュメントを確認してください。
API呼び出しでは、GPT-3.5-Turbo-0613およびGPT-4-0613への関数を説明し、モデルに、引数を含むJSONオブジェクトを出力してそれらの関数を呼び出すことをインテリジェントに選択できます。チャット完了APIは関数を呼び出しません。代わりに、モデルはJSONを生成し、コードの関数を呼び出すために使用できます。
最新のモデル(GPT-3.5-Turbo-0613およびGPT-4-0613)は、関数を呼び出す必要があること(入力に応じて)を検出し、関数のシグネチャを順守するJSONで応答するために微調整されています。この機能には、潜在的なリスクもあります。ユーザーに代わって世界に影響を与えるアクションを実行する前に、ユーザー確認フローに強く構築することをお勧めします(電子メールの送信、オンラインの投稿、購入など)。
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 ;
詳細については、関数のドキュメントを確認してください。
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)
このライブラリは、サードパーティライブラリを必要としません。最近のDelphiバージョン(10.3+)で動作します。完全にテストされていない場合、サポートされているすべてのプラットフォーム(Windows、Linux、MacOS、Android、iOS)でも動作するはずです。
ライブラリは秘密のAPIキーを必要とするため、セキュリティリスクについて確信していない限り、シークレットキーが公開されるため、クライアントアプリケーションで使用することはお勧めしません。
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.