Delphi 의 비공식 GroqCloud API 래퍼 에 오신 것을 환영합니다. 이 프로젝트는 GroqCloud 에서 사용할 수있는 강력한 언어 모델에 액세스하고 상호 작용하는 델파이 인터페이스를 제공합니다.
Meta 라마 , OpenAI Whisper , MistralAI Mixtral 및 Google Gemma .
이 라이브러리를 사용하면 최첨단 언어 생성, 채팅 및 비전 기능, 코드 생성 또는 텍스트-텍스트 전사를 델파이 애플리케이션에 원활하게 통합 할 수 있습니다.
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 모드를 지원합니다! 다음은 response_format가 JSON 모드로 설정된 이미지와 텍스트 (예 : "관련 정보를 JSON 객체로 추출하십시오")로 모델을 쿼리하는 Python 예제입니다.
주의
경고, 스트리밍 된 응답으로 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는 응용 프로그램에서 고급 오디오 처리 기능을위한 완벽한 통합을 제공하여 실시간 인간 대화와 비슷한 속도를 달성합니다.
API는 Hugging Face (English Only)에서 사용할 수있는 미세 조정 된 distil-whisper-large-v3-en 모델과 함께 OpenAI의 Whisper 모델을 활용합니다. 자세한 내용은 공식 문서를 참조하십시오.
파일 업로드는 현재 25MB 로 제한되며 다음 입력 파일 유형이 지원됩니다.
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 (Large Language Model)이 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 위험의 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 라이센스에 따라 라이센스가 부여됩니다.