欢迎来到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许可获得许可。