Добро пожаловать в неофициальную обертку API Groqcloud для Delphi . Этот проект предоставляет интерфейс Delphi для доступа и взаимодействия с мощными языковыми моделями, доступными на Groqcloud , в том числе разработанные:
Meta Llama , OpenAI Whisper , MistralAI Mixtral и Google Gemma .
С помощью этой библиотеки вы можете плавно интегрировать современные языковые возможности, чат и видение, генерацию кода или транскрипцию речи к тексту в ваши приложения Delphi .
Groqcloud предлагает высокопроизводительную, эффективную платформу, оптимизированную для работы с большими языковыми моделями через свои запатентованные юниты по обработке языка (LPU), обеспечивая скорость и энергоэффективность, которые превосходят традиционные графические процессоры. Эта обертка упрощает доступ к этим моделям, позволяя вам использовать передовую инфраструктуру Groqcloud без накладных расходов на управление базовым оборудованием.
Для получения более подробной информации о предложениях Groqcloud, посетите официальную документацию Groqcloud.
Чтобы инициализировать экземпляр API, вам необходимо получить ключ API от Groqcloud.
После того, как у вас есть токен, вы можете инициализировать интерфейс 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 . Эта запись раскрывает следующие свойства:
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 в настоящее время поддерживает следующие модели.
Хозяйственные модели можно получить непосредственно через конечную точку API моделей Groqcloud, используя идентификаторы модели, перечисленные выше. Чтобы получить список всех доступных моделей 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 не предоставляет никаких решений для интеграции текста.
API API завершения чата Groq интерпретирует серию сообщений и создает соответствующие выходы ответов. Эти модели могут обрабатывать либо разговоры с несколькими поворотами, либо задачи с одним интеркциями.
Режим JSON Mode (бета) JSON Mode в настоящее время находится в бета -версии и гарантирует, что все завершения чата находятся в действительном формате JSON.
Как использовать:
"response_format": {"type": "json_object"} в ваш запрос на завершение чата. Лучшие практики для оптимальной бета -эффективности:
Бета -ограничения:
Код ошибки:
Если генерация JSON не удается, Groq ответит ошибкой 400 , указав json_validate_failed в качестве кода ошибки.
Примечание
Мы будем использовать только мета -модели во всех примерах, представленных для генерации текста.
API GroqCloud позволяет создать текст, используя различные входы, такие как текст и изображения. Это универсально и может поддерживать широкий спектр приложений, в том числе:
В приведенных ниже примерах мы будем использовать процедуры 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 ); Вы можете использовать API GroqCloud для создания интерактивного чата, настроенного для ваших пользователей. Благодаря возможности чата 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 ); При настройке модели искусственного интеллекта у вас есть возможность установить руководящие принципы для того, как она должна отвечать. Например, вы можете назначить это конкретную роль, например 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 );API GROQ обеспечивает быстрый вывод и низкую задержку для мультимодальных моделей с возможностями зрения, что позволяет понять и интерпретировать визуальные данные из изображений. Изучая контент изображения, эти мультимодальные модели могут создавать читаемый на человеке текст, чтобы предложить ценную информацию о предоставленной визуальной информации.
API GROQ позволяет расширенные мультимодальные модели, которые плавно интегрируются в различные приложения, предоставляя эффективные и точные возможности обработки изображений для таких задач, как ответ на визуальный ответ, генерация заголовков и распознавание оптических символов (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-vision-preview и llama-3.2-11b-vision-preview теперь поддерживают режим JSON! Вот пример Python, который запрашивает модель как с изображением, так и с текстом (например, «Пожалуйста, извлеките соответствующую информацию в качестве объекта JSON».) С помощью repply_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 обеспечивает высокоэффективное решение речи в тексте, предлагая совместимые с открытыми конечные точки, которые облегчают транскрипцию и перевод в реальном времени. Этот API обеспечивает бесшовную интеграцию для расширенных возможностей обработки аудио в приложениях, достигая скорости, сравнимых с человеческим разговором в реальном времени.
APIS использует модели шепота Openai, наряду с тонкой настройкой модели distil-whisper-large-v3-en доступной для обнимающего лица (только английский). Для получения дополнительной информации, пожалуйста, обратитесь к официальной документации.
Загрузки файлов в настоящее время ограничены 25 МБ , и поддерживаются следующие типы входных файлов:
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, базы данных и Интернет, позволяя доступ к живым данным и расширяя свои возможности за пределами только генерации текста. Эта функциональность преодолевает разрыв между статическими знаниями от обучения 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 соответственно.
Блок 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 предоставляет структуры и инструменты для классификации и управления вредным контентом на основе предопределенных категорий вреда. Он включает перечисления, вспомогательные методы и записи для оптимизации идентификации и классификации различных типов вреда в приложениях, поддерживая структурированный подход к безопасности контента и оценке рисков.
Примечание
Llama Guard 3 обучается прогнозировать этикетки безопасности по 14 категориям , показанным ниже, на основе таксономии опасностей MLCommons.
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.