歡迎來到Delphi的非官方Groqcloud API包裝紙。該項目提供了一個Delphi界面,用於訪問和與GroqCloud上可用的強大語言模型進行交互,其中包括:
Meta Llama , OpenAI Whisper , MistralAI Mixtral和Google Gemma 。
借助此庫,您可以將最先進的語言生成,聊天和視覺功能,代碼生成或語音到文本轉錄集成到您的Delphi應用程序中。
Groqcloud提供了一個高性能,有效的平台,可通過其專有語言處理單元(LPU)優化,可運行大型語言模型,從而提供超過傳統GPU的速度和能源效率。該包裝器簡化了對這些模型的訪問,使您可以利用Groqcloud的尖端基礎架構,而無需管理基礎硬件的開銷。
有關Groqcloud產品產品的更多詳細信息,請訪問官方的Groqcloud文檔。
要初始化API實例,您需要從GroqCloud獲得一個API鍵。
具有令牌後,您可以初始化IGroq接口,這是API的入口點。
由於可能有很多參數,而不是所有參數,因此它們是使用匿名函數配置的。
筆記
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 unit中定義的記錄。該記錄公開了以下屬性:
TAsynCallBack<T> = record
...
Sender: TObject;
OnStart: TProc<TObject>;
OnSuccess: TProc<TObject, T>;
OnError: TProc<TObject, string>; 對於需要流式傳輸的方法,回調使用通用記錄TAsynStreamCallBack<T> = record ,也在Gemini.Async.Support.pas單元中定義。該記錄公開了以下屬性:
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 Models 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模式(Beta)JSON模式當前處於Beta中,並確保所有聊天完成均處於有效的JSON格式。
如何使用:
"response_format": {"type": "json_object"} 。最佳Beta性能的最佳實踐:
Beta限制:
錯誤代碼:
如果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的聊天功能,您可以促進多個問題和答案,使用戶能夠逐步朝著解決方案努力或獲得對複雜的多步驟問題的支持。此功能對於需要進行持續交互的應用程序特別有價值,例如:
這是一個簡單聊天設置的異步樣本:
// 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-Preiview和Llama-3.2-11b-Vision-Preview Models現在支持JSON模式!這是一個python示例,該示例使用圖像和文本(例如,“請將相關信息作為JSON對象提取為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參數,則必須用英語編寫。
有關詳細參數,請參閱官方文檔。
工具用法的集成使大型語言模型(LLMS)與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 ;在此代碼示例中,如果該工具返回多個結果,則將僅在兩個TMEMO中的每個TMEMO中處理並顯示前兩個結果。
Groq.Functions.Core.pas單元提供開發工具插件所需的類和方法。每個插件都從TFunctionCore類繼承,該類實現了由IFunctionCore接口定義的方法。有關創建自定義功能的指導,請參閱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單元提供了基於預定義的損害類別對有害內容進行分類和管理有害內容的框架和工具。它包括枚舉,輔助方法和記錄,以簡化應用程序內各種損害的識別和分類,支持結構化的方法安全和風險評估。
筆記
根據MLCommons的危害分類法, Llama Guard 3進行了訓練,可以預測下面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許可獲得許可。