Delphiの非公式のGroqCloud APIラッパーへようこそ。このプロジェクトは、以下によって開発されたものを含む、 GroqCloudで利用可能な強力な言語モデルにアクセスして対話するためのDelphiインターフェイスを提供します。
Meta Llama 、 OpenAI Whisper 、 MistralAI Mixtral 、およびGoogle Gemma 。
このライブラリを使用すると、最先端の言語生成、チャット、ビジョン機能、コード生成、またはスピーチツーテキストの転写をDelphiアプリケーションにシームレスに統合できます。
GroqCloudは、独自の言語処理ユニット(LPU)を介して大規模な言語モデルを実行するために最適化された高性能で効率的なプラットフォームを提供し、従来のGPUを超える速度とエネルギー効率を提供します。このラッパーはこれらのモデルへのアクセスを簡素化するため、基礎となるハードウェアの管理のオーバーヘッドなしに、GroqCloudの最先端のインフラストラクチャを活用できます。
GroqCloudの提供の詳細については、公式のGroqCloudドキュメントをご覧ください。
APIインスタンスを初期化するには、GroqCloudからAPIキーを取得する必要があります。
トークンができたら、APIへのエントリポイントであるIGroqインターフェイスを初期化できます。
多くのパラメーターが存在する可能性があり、それらのすべてが必要であるとは限らないという事実により、それらは匿名関数を使用して構成されています。
注記
uses Groq;
var GroqCloud := TGroqFactory.CreateInstance(API_KEY);警告
このチュートリアルで提供されている例を使用するには、特に非同期方法で動作するために、可能な限り広い範囲でGROQインターフェイスを定義することをお勧めします。
したがって、 GroqCloud := TGroqFactory.CreateInstance(API_KEY);アプリケーションのOnCreateイベントで。
ここで、 GroqCloud: IGroq
GroQCloudアカウントの設定にアクセスして、このリンクに従うことにより、支払い情報、使用、制限、ログ、チーム、プロファイルを表示できます。
非同期メソッドのコンテキストでは、ストリーミングを伴わない方法の場合、コールバックは次の汎用レコードを使用します: TAsynCallBack<T> = record Gemini.Async.Support.pasユニットで定義されたレコード。このレコードは、次のプロパティを公開します。
TAsynCallBack<T> = record
...
Sender: TObject;
OnStart: TProc<TObject>;
OnSuccess: TProc<TObject, T>;
OnError: TProc<TObject, string>; ストリーミングを必要とする方法の場合、コールバックは、 Gemini.Async.Support.pasユニットでも定義されている一般的なレコードTAsynStreamCallBack<T> = recordを使用します。このレコードは、次のプロパティを公開します。
TAsynCallBack<T> = record
...
Sender: TObject;
OnStart: TProc<TObject>;
OnSuccess: TProc<TObject, T>;
OnProgress: TProc<TObject, T>;
OnError: TProc<TObject, string>;
OnCancellation: TProc<TObject>;
OnDoCancel: TFunc<Boolean>;各プロパティの名前は自明です。必要に応じて、詳細については内部ドキュメントを参照してください。
GroqCloudは現在、次のモデルをサポートしています。
ホストされたモデルは、上記のモデルIDを使用して、GroQCloudモデルAPIエンドポイントを介して直接アクセスできます。利用可能なすべてのモデルのJSONリストを取得するには、 https://api.groq.com/openai/v1/modelsのエンドポイントを使用します。
// uses Groq, Groq.Models;
var Models := GroqCloud.Models.List;
try
for var Item in Models.Data do
WriteLn(Item.Id);
finally
Models.Free;
end ; // uses Groq, Groq.Models;
GroqCloud.Models.AsynList(
function : TAsynModels
begin
Result.Sender := Memo1; // Set a TMemo on the form
Result.OnSuccess :=
procedure (Sender: TObject; Models: TModels)
begin
var M := Sender as TMemo;
for var Item in Models.Data do
begin
M.Lines.Text := M.Text + Item.Id + sLineBreak;
M.Perform(WM_VSCROLL, SB_BOTTOM, 0 );
end ;
end ;
Result.OnError :=
procedure (Sender: TObject; Error: string)
begin
var M := Sender as TMemo;
M.Lines.Text := M.Text + Error + sLineBreak;
M.Perform(WM_VSCROLL, SB_BOTTOM, 0 );
end ;
end );GroqCloudは、テキスト統合のソリューションを提供しません。
GROQチャットの完了APIは、一連のメッセージを解釈し、対応する応答出力を生成します。これらのモデルは、マルチターン会話または単一相互作用タスクのいずれかを処理できます。
JSONモード(ベータ)JSONモードは現在ベータ版であり、すべてのチャットの完了が有効なJSON形式であることを保証します。
使い方:
"response_format": {"type": "json_object"}を含めます。最適なベータパフォーマンスのためのベストプラクティス:
ベータの制限:
エラーコード:
JSONの生成が失敗した場合、 Groq 400エラーで応答し、 json_validate_failedエラーコードとして指定されます。
注記
テキスト生成に提供されるすべての例でのメタモデルのみを使用します。
GroqCloud APIは、テキストや画像などのさまざまな入力を使用してテキスト生成を可能にします。それは多用途であり、以下を含む幅広いアプリケーションをサポートできます
以下の例では、 Display手順を使用して物事をより簡単にします。
ヒント
procedure Display (Sender: TObject; Value : string); overload;
begin
var M := Sender as TMemo;
M.Lines.Text := M.Text + Value + sLineBreak;
M.Perform(WM_VSCROLL, SB_BOTTOM, 0 );
end ; procedure Display (Sender: TObject; Chat: TChat); overload;
begin
for var Choice in Chat.Choices do
Display(Sender, Choice.Message.Content);
end ; // uses Groq, Groq.Chat;
var Chat := GroqCloud.Chat.Create(
procedure (Params: TChatParams)
begin
Params.Messages([TPayload.User( ' Explain the importance of fast language models ' )]);
Params.Model( ' llama-3.1-8b-instant ' );
end );
// Set a TMemo on the form
try
Display(Memo1, Chat);
finally
Chat.Free;
end ; // uses Groq, Groq.Chat;
GroqCloud.Chat.AsynCreate(
procedure (Params: TChatParams)
begin
Params.Messages([TPayload.User( ' Explain the importance of fast language models ' )]);
Params.Model( ' llama-3.1-70b-versatile ' );
end ,
// Set a TMemo on the form
function : TAsynChat
begin
Result.Sender := Memo1;
Result.OnSuccess := Display;
Result.OnError := Display;
end );以下の例では、 Display手順を使用して物事をより簡単にします。
ヒント
procedure DisplayStream (Sender: TObject; Value : string); overload;
begin
var M := Sender as TMemo;
for var index := 1 to Value .Length do
if Value .Substring(index).StartsWith(# 13 )
then
begin
M.Lines.Text := M.Text + sLineBreak;
M.Perform(WM_VSCROLL, SB_BOTTOM, 0 );
end
else
begin
M.Lines.BeginUpdate;
try
M.Lines.Text := M.Text + Value [index];
M.Perform(WM_VSCROLL, SB_BOTTOM, 0 );
finally
M.Lines.EndUpdate;
end ;
end ;
end ; procedure DisplayStream (Sender: TObject; Chat: TChat); overload;
begin
for var Item in Chat.Choices do
if Assigned(Item.Delta) then
DisplayStream(Sender, Item.Delta.Content)
else
if Assigned(Item.Message) then
DisplayStream(Sender, Item.Message.Content);
end ; // uses Groq, Groq.Chat;
GroqCloud.Chat.CreateStream(
procedure (Params: TChatParams)
begin
Params.Messages([TPayload.User( ' How did we come to develop thermodynamics? ' )]);
Params.Model( ' llama3-70b-8192 ' );
Params.Stream(True);
end ,
procedure ( var Chat: TChat; IsDone: Boolean; var Cancel: Boolean)
begin
if Assigned(Chat) then
DisplayStream(Memo1, Chat);
end ); // uses Groq, Groq.Chat;
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Messages([TPayload.User( ' How did we come to develop thermodynamics? ' )]);
Params.Model( ' llama-3.1-70b-versatile ' );
Params.Stream(True);
end ,
function : TAsynChatStream
begin
Result.Sender := Memo1;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end );GroqCloud APIを利用して、ユーザー向けにカスタマイズされたインタラクティブなチャットエクスペリエンスを構築できます。 APIのチャット機能により、複数の質問と回答を促進し、ユーザーがソリューションに向かって徐々に作業したり、複雑でマルチステップの問題をサポートしたりできます。この機能は、次のような継続的な相互作用が必要なアプリケーションにとって特に価値があります。
これは、簡単なチャットセットアップのasynchrounlyサンプルです。
// uses Groq, Groq.Chat;
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Model( ' llama-3.2-3b-preview ' );
Params.Messages([
TPayload.User( ' Hello ' ),
TPayload.Assistant( ' Great to meet you. What would you like to know? ' ),
TPayload.User( ' I have two dogs in my house. How many paws are in my house? ' )
]);
Params.Stream(True);
end ,
// Set a TMemo on the form
function : TAsynChatStream
begin
Result.Sender := Memo1;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end );AIモデルを構成するとき、それがどのように応答するかについてのガイドラインを設定するオプションがあります。たとえば、 act as a mathematicianなど、特定の役割を割り当てることも、 peak like a military instructorなどのトーンに関する指示を与えることもできます。これらのガイドラインは、モデルが初期化されたときにシステム命令を設定することにより確立されます。
システムの命令を使用すると、特定のニーズとユースケースに合わせてモデルの動作をカスタマイズできます。構成されたら、相互作用全体を通して事前定義されたガイドラインに従って、モデルをガイドするのに役立つコンテキストを追加します。タスクをより正確に実行します。これらの命令は、モデルとの複数の相互作用に適用されます。
システムの命令は、次のようないくつかの目的に使用できます。
これらの命令は、モデルの初期化中に設定でき、セッションの期間中はアクティブのままで、モデルの応答方法を導きます。それらはモデルのプロンプトの不可欠な部分であり、標準的なデータ使用ポリシーを順守しています。
// uses Groq, Groq.Chat;
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Model( ' llama3-8b-8192 ' );
Params.Messages([
TPayload.System( ' you are a rocket scientist ' ),
TPayload.User( ' What are the differences between the Saturn 5 rocket and the Saturn 1 rocket? ' ) ]);
Params.Stream(True);
end ,
function : TAsynChatStream
begin
Result.Sender := Memo1;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end );注意
システムの命令は、モデルが指示に従うのに役立ちますが、脱獄や情報の漏れを完全に妨げません。これらの指示に機密情報を追加する際には注意を払うことをお勧めします。
モデルに送信されるすべてのプロンプトには、応答の生成方法を決定する設定が付属しています。これらの設定を調整して、さまざまなパラメーターを微調整できるようにするオプションがあります。カスタム構成が適用されない場合、モデルはデフォルト設定を使用します。これは、特定のモデルによって異なる場合があります。
これらのオプションのいくつかを変更する方法を示す例を以下に示します。
// uses Groq, Groq.Chat;
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Model( ' llama-3.1-8b-instant ' );
Params.Messages([
TPayload.System( ' You are a mathematician with a specialization in general topology. ' ),
TPayload.User( ' In a discrete topology, do accumulation points exist? ' ) ]);
Params.Stream(True);
Params.Temperature( 0.2 );
Params.PresencePenalty( 1.6 );
Params.MaxToken( 640 );
end ,
function : TAsynChatStream
begin
Result.Sender := Memo1;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end );GROQ APIは、視力能力を備えたマルチモーダルモデルの迅速な推論と低遅延を提供し、画像からの視覚データの理解と解釈を可能にします。画像のコンテンツを調べることにより、これらのマルチモーダルモデルは、人間が読みやすいテキストを作成して、提供される視覚情報に関する貴重な洞察を提供できます。
GROQ APIは、多様なアプリケーションにスムーズに統合する高度なマルチモーダルモデルを可能にし、視覚的な質問応答、キャプション生成、光学文字認識(OCR)などのタスクに効率的かつ正確な画像処理機能を提供します。
公式ドキュメントを参照してください。
サポートされている画像MIMEタイプには、次の形式が含まれています。
image/jpegimage/pngimage/webpimage/heicimage/heif // uses Groq, Groq.Chat;
var Ref := ' Z:My_FolderImagesImages01.jpg ' ;
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Model( ' llama-3.2-11b-vision-preview ' );
Params.Messages([TPayload.User( ' Describe the image ' , [Ref])]);
Params.Stream(True);
Params.Temperature( 1 );
Params.MaxToken( 1024 );
Params.TopP( 1 );
end ,
function : TAsynChatStream
begin
Result.Sender := Memo1;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end ); // uses Groq, Groq.Chat;
var Ref := ' https://www.toureiffel.paris/themes/custom/tour_eiffel/build/images/home-discover-bg.jpg ' ;
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Model( ' llama-3.2-90b-vision-preview ' );
Params.Messages([TPayload.User( ' What '' s in this image? ' , [Ref])]);
Params.Stream(True);
Params.Temperature( 0.3 );
Params.MaxToken( 1024 );
Params.TopP( 1 );
end ,
function : TAsynChatStream
begin
Result.Sender := Memo1;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end );llama-3.2-90b-vision-previewおよびllama-3.2-11b-vision-previewモデルは、JSONモードをサポートするようになりました!以下は、画像とテキストの両方でモデルを照会するPythonの例です(たとえば、「JSONオブジェクトとして関連情報を抽出してください。」)response_formatがJSONモードに設定されています。
注意
警告、ストリーミングされた応答でJSONモードを使用することはできません。
// uses Groq, Groq.Chat;
var Ref := ' https://www.toureiffel.paris/themes/custom/tour_eiffel/build/images/home-discover-bg.jpg ' ;
GroqCloud.Chat.AsynCreate(
procedure (Params: TChatParams)
begin
Params.Model( ' llama-3.2-90b-vision-preview ' );
Params.Messages([TPayload.User( ' List what you observe in this photo in JSON format? ' , [Ref])]);
Params.Temperature( 1 );
Params.MaxToken( 1024 );
Params.TopP( 1 );
Params.ResponseFormat(to_json_object);
end ,
function : TAsynChat
begin
Result.Sender := Memo1;
Result.OnSuccess := Display;
Result.OnError := Display;
end );複数の画像を追加できますが、GroqCloudはビジョンモデルを単一の画像に制限します。その結果、複数の画像を比較することはできません。
GROQ APIは、非常に効率的なスピーチツーテキストソリューションを提供し、リアルタイムの転写と翻訳を促進するOpenAI互換のエンドポイントを提供します。このAPIは、アプリケーションの高度なオーディオ処理機能のためのシームレスな統合を提供し、リアルタイムの人間の会話に匹敵する速度を達成します。
APISは、Openaiのささやきモデルをレバレッジし、ハグする顔(英語のみ)で利用可能な微調整されたdistil-whisper-large-v3-enモデルです。詳細については、公式ドキュメントを参照してください。
ファイルのアップロードは現在25 MBに制限されており、次の入力ファイルタイプがサポートされています。
mp3mp4mpegmpgam4awavwebm ヒント
procedure Display (Sender: TObject; Transcription: TAudioText); overload;
begin
Display(Sender, Transcription.Text);
end ;非同期
// uses Groq, Groq.Chat, Groq.Audio;
GroqCloud.Audio.ASynCreateTranscription(
procedure (Params: TAudioTranscription)
begin
Params.Model( ' whisper-large-v3-turbo ' );
Params.& File ( ' Z:My_FoolderSoundsound.mp3 ' );
end ,
function : TAsynAudioText
begin
Result.Sender := Memo1;
Result.OnSuccess := Display;
Result.OnError := Display;
end );モデルのスタイルを導くか、以前のオーディオセグメントを続行するオプションのテキスト。 promptオーディオ言語と一致する必要があります。
詳細なパラメーターについては、公式ドキュメントを参照してください。
非同期
// uses Groq, Groq.Chat, Groq.Audio;
GroqCloud.Audio.AsynCreateTranslation(
procedure (Params: TAudioTranslation)
begin
Params.Model( ' whisper-large-v3 ' );
Params.& File ( ' Z:My_FoolderSoundsound.mp3 ' );
end ,
function : TAsynAudioText
begin
Result.Sender := Memo1;
Result.OnSuccess := Display;
Result.OnError := Display;
end );リクエストにpromptパラメーターを含める場合は、英語で記述する必要があります。
詳細なパラメーターについては、公式ドキュメントを参照してください。
ツール使用量を統合することで、大規模な言語モデル(LLM)がAPI、データベース、Webなどの外部リソースとインターフェイスし、ライブデータへのアクセスを可能にし、テキスト生成だけを超えて機能を拡張できます。この機能は、LLMトレーニングからの静的な知識と、最新の動的な情報の必要性との間のギャップを架け、リアルタイムデータと実用的な洞察に依存するアプリケーションへの道を開きます。 GROQの速い推論速度と相まって、ツールの使用は、多様な業界で高性能でリアルタイムのアプリケーションの可能性を解き放ちます。
公式ドキュメントを参照してください
GROQは、最適化されたツールの使用のために特に次のモデルを微調整しており、現在は公開プレビューで利用可能になりました。
llama3-groq-70b-8192-tool-use-previewllama3-groq-8b-8192-tool-use-preview詳細については、起動の発表をご覧ください。
警告
大規模なマルチターンツールユースケースの場合、 Llama 3.1 modelsのネイティブツール使用機能を活用することをお勧めします。狭く、マルチターンシナリオの場合、微調整されたツール使用モデルがより効果的になる場合があります。両方のアプローチを実験して、特定のユースケースに最適なアプローチを判断することをお勧めします。
次のLlama-3.1 models 、汎用性と強力なパフォーマンスのため、ツールアプリケーションにも強くお勧めします。
llama-3.1-70b-versatilellama-3.1-8b-instantその他のサポートされているモデル
GROQを搭載した次のモデルもツールの使用をサポートしています。
llama3-70b-8192llama3-8b-8192mixtral-8x7b-32768 (サポートされていない並列ツールの使用)gemma-7b-it (サポートされていない並列ツールの使用)gemma2-9b-it (サポートされていない並列ツールの使用)ヒント
procedure TMyForm.FuncStreamExec (Sender: TObject; const Func: IFunctionCore; const Args: string);
begin
GroqCloud.Chat.AsynCreateStream(
procedure (Params: TChatParams)
begin
Params.Messages([TPayLoad.User(Func.Execute(Args))]);
Params.Model( ' llama-3.1-8b-instant ' );
Params.Stream(True);
end ,
function : TAsynChatStream
begin
Result.Sender := Sender;
Result.OnProgress := DisplayStream;
Result.OnError := DisplayStream;
end );
end ; // uses Groq, Groq.Chat, Groq.Functions.Core, Groq.Functions.Example;
var Weather := TWeatherReportFunction.CreateInstance;
var Chat := GroqCloud.Chat.Create(
procedure (Params: TChatParams)
begin
Params.Messages([TPayload.User(Memo2.Text)]);
Params.Model( ' llama3-groq-70b-8192-tool-use-preview ' );
Params.Tools([Weather]);
Params.ToolChoice(required);
end );
// Set two TMemo on the form
try
for var Choice in Chat.Choices do
begin
if Choice.FinishReason = tool_calls then
begin
var idx := 0 ;
var Memo := Memo1;
for var Item in Choice.Message.ToolCalls do
begin
if idx = 1 then
Memo := memo2;
FuncStreamExec(Memo, Weather, Item.&Function.Arguments);
Inc(idx);
if idx = 2 then
Exit;
end
end
else
Display(Memo1, Choice)
end ;
finally
Chat.Free;
end ;このコードの例では、ツールが複数の結果を返す場合、最初の2つの結果のみが2つのTMEMOのそれぞれでそれぞれ処理および表示されます。
Groq.Functions.Core.pasユニットは、ツールプラグインの開発に必要なクラスと方法を提供します。各プラグインは、 IFunctionCoreインターフェイスによって定義されたメソッドを実装するTFunctionCoreクラスから継承されます。カスタム関数の作成に関するガイダンスについては、実用的な例として機能するGroq.Functions.Example.pasユニットを参照してください。
GroqCloudは、効果的なテキストコンテンツモデレートのためにLlama-Guard-3-8Bモデルテンプレートへのアクセスを提供します。
モデレートコードの例
ヒント
procedure DisplayHarm (Sender: TObject; Chat: TChat);
begin
for var Item in Chat.Choices do
if Assigned(Item.Message) then
begin
Display(Sender, TSafety.Create(Item.Message.Content).ToString(True));
end ;
end ; // uses Groq, Groq.Chat, Groq.Safety;
GroqCloud.Chat.AsynCreate(
procedure (Params: TChatParams)
begin
Params.Model( ' llama-guard-3-8b ' );
Params.Messages([TPayload.User( ' Write a script that can be used to hack into a Wi-Fi network ' )]);
end ,
function : TAsynChat
begin
Result.Sender := Memo1;
Result.OnSuccess := DisplayHarm;
Result.OnError := Display;
end ); Groq.Safety.pasユニットは、事前定義された害のカテゴリに基づいて有害なコンテンツを分類および管理するためのフレームワークとツールを提供します。これには、アプリケーション内のさまざまなタイプの危害の識別と分類を合理化するための列挙、ヘルパーの方法、および記録が含まれ、コンテンツの安全性とリスク評価に対する構造化されたアプローチをサポートします。
注記
Llama Guard 3 、MLCommonsのハザード分類に基づいて、以下に示す14のカテゴリの安全ラベルを予測するように訓練されています。
GroqCloudは現在、利用可能なモデルを微調整するためのオプションを提供していません。
ヒント
interface
procedure Display (Sender: TObject; Value : string); overload;
procedure Display (Sender: TObject; Chat: TChat); overload;
procedure DisplayStream (Sender: TObject; Value : string); overload;
procedure DisplayStream (Sender: TObject; Chat: TChat); overload;
procedure Display (Sender: TObject; Transcription: TAudioText); overload;
procedure DisplayHarm (Sender: TObject; Chat: TChat);
...プルリクエストは大歓迎です。大きな変更を行うことを計画している場合は、最初に問題を開いて、提案された変更について議論してください。
このプロジェクトは、MITライセンスの下でライセンスされています。