Mistral Delphi API 클라이언트

· 컴포넌트

Mistral AI는 다국어 이해, 코드 생성, 함수 호출, 구조화된 출력에 뛰어난 고성능 모델을 제공하며 유럽의 선도적인 AI 공급자로 자리 잡았어요. Mistral을 애플리케이션에 통합하려는 Delphi 개발자를 위해 sgcWebSockets는 TsgcHTTP_API_Mistral을 제공해요 — 전체 Mistral API를 깔끔하고 타입 안전한 Delphi 코드로 감싸는 포괄적인 네이티브 컴포넌트예요.

지능형 챗봇 구축, 구조화된 JSON 출력 생성, 이미지 분석, 의미 검색을 위한 Embeddings 생성, 도구 강화 워크플로 오케스트레이션 등 무엇을 하든 이 컴포넌트는 모든 Mistral 기능에 직접 접근할 수 있게 해줘요. REST 상용구 코드도 없고, JSON 처리도 없어요. 컴포넌트를 드롭하고 API 키를 설정한 다음 바로 개발을 시작하세요.

완전한 API 지원

Mistral API의 모든 주요 기능이 기본 제공돼요.

Chat Completions
시스템 프롬프트와 함께 메시지를 보내고 동기 또는 스트리밍으로 응답을 받아요. temperature, top-p, stop sequences를 완전히 제어할 수 있어요.
실시간 스트리밍
Server-Sent Events를 사용하여 토큰 단위로 응답을 스트리밍해요. 답변이 생성되는 대로 표시하는 반응형 UI를 구축할 수 있어요.
Vision
텍스트 프롬프트와 함께 base64로 인코딩된 데이터 또는 이미지 URL을 보내 이미지를 분석해요. Pixtral 모델은 시각적 콘텐츠를 설명하고 해석하며 추론해요.
JSON 모드
Mistral이 유효한 JSON 출력을 반환하도록 강제해요. 데이터 추출, 구조화된 응답, API 통합 파이프라인에 적합해요.
도구 사용 — 함수 호출
JSON Schema로 커스텀 도구를 정의해요. Mistral이 호출 시점을 결정하여 에이전트적 다단계 워크플로를 지원해요.
Embeddings
고품질 벡터 임베딩을 생성해요. 의미 검색, 클러스터링, 분류, 추천 시스템을 구동해요.
안전 프롬프트
단일 속성으로 Mistral의 내장 안전 가드레일을 활성화해요. 유해하거나 부적절한 콘텐츠를 자동으로 필터링해요.
모델 관리
사용 가능한 모든 Mistral 모델을 프로그래밍 방식으로 나열해요. 모델 ID, 소유자, 생성 날짜, 기능을 조회할 수 있어요.
내장 재시도 및 로깅
설정 가능한 시도 횟수와 대기 간격으로 일시적 오류 시 자동 재시도해요. 디버깅을 위한 전체 요청/응답 로깅이 있어요.

시작하기

1분 이내에 Mistral AI를 Delphi 프로젝트에 통합해 보세요. 컴포넌트를 드롭하고 API 키를 설정한 다음 첫 번째 메시지를 보내세요.

// Create the component and configure the API key
var
  Mistral: TsgcHTTP_API_Mistral;
  vResponse: string;
begin
  Mistral := TsgcHTTP_API_Mistral.Create(nil);
  Try
    Mistral.MistralOptions.ApiKey := 'YOUR_API_KEY';
    // Send a simple message to Mistral
    vResponse := Mistral._CreateMessage(
      'mistral-large-latest', 'Hello, Mistral!');
    ShowMessage(vResponse);
  Finally
    Mistral.Free;
  End;
end;

두 가지 API 스타일. 모든 기능은 편의 메서드(문자열 기반, 최소 코드)와 타입이 지정된 요청/응답 클래스(전체 제어, 타입 안전성)를 모두 제공해요. 사용 사례에 가장 적합한 방식을 선택하세요.

Chat Completions 및 스트리밍

Chat Completions API는 모든 Mistral 상호작용의 기반이에요. 선택적 시스템 프롬프트와 함께 텍스트를 보내고 동기 또는 실시간 스트리밍으로 응답을 받아요.

시스템 프롬프트

대화의 컨텍스트, 페르소나, 또는 제약 조건을 설정하는 시스템 프롬프트를 제공하여 Mistral의 동작을 제어해요.

vResponse := Mistral._CreateMessageWithSystem(
  'mistral-large-latest',
  'You are a helpful assistant that responds in Spanish.',
  'What is the capital of France?');
// Returns: "La capital de Francia es París."

실시간 스트리밍

반응형 사용자 인터페이스를 위해 Server-Sent Events를 사용하여 Mistral의 응답을 토큰 단위로 스트리밍해요. OnHTTPAPISSE 이벤트 핸들러를 할당하고 _CreateMessageStream을 호출하세요.

// Enable streaming via SSE
Mistral.OnHTTPAPISSE := OnSSEEvent;
Mistral._CreateMessageStream('mistral-large-latest',
  'Explain the theory of relativity.');
procedure TForm1.OnSSEEvent(Sender: TObject;
  const aEvent, aData: string; var Cancel: Boolean);
begin
  // aData: JSON payload with generated content
  Memo1.Lines.Add(aData);
end;

고급 타입 지정 API

temperature, top-p, stop sequences, random seed, safe prompt 등 요청 매개변수를 완전히 제어하려면 타입이 지정된 요청 및 응답 클래스를 사용해요.

var
  oRequest: TsgcMistralClass_Request_ChatCompletion;
  oMessage: TsgcMistralClass_Request_Message;
  oResponse: TsgcMistralClass_Response_ChatCompletion;
begin
  oRequest := TsgcMistralClass_Request_ChatCompletion.Create;
  Try
    oRequest.Model := 'mistral-large-latest';
    oRequest.MaxTokens := 2048;
    oRequest.Temperature := 0.7;
    oRequest.TopP := 0.9;
    oRequest.SafePrompt := True;
    oRequest.RandomSeed := 42;
    oMessage := TsgcMistralClass_Request_Message.Create;
    oMessage.Role := 'user';
    oMessage.Content := 'Explain quantum computing in simple terms.';
    oRequest.Messages.Add(oMessage);
    oResponse := Mistral.CreateMessage(oRequest);
    Try
      if Length(oResponse.Choices) > 0 then
        ShowMessage(oResponse.Choices[0].Message.Content);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Vision — 이미지 이해

Mistral의 Pixtral 모델은 이미지를 분석하고 추론할 수 있어요. 텍스트 프롬프트와 함께 사진, 스크린샷, 다이어그램, 문서를 보내고 상세한 설명, 데이터 추출, 또는 시각적 Q&A를 받아요.

// Load an image and ask Mistral to analyze it
var
  vBase64: string;
begin
  vBase64 := sgcBase64Encode(LoadFileToBytes('architecture-diagram.png'));
  ShowMessage(Mistral._CreateVisionMessage(
    'pixtral-large-latest',
    'Describe the architecture shown in this diagram.',
    vBase64, 'image/png'));
end;

사용 사례. 문서 분석 자동화, 다이어그램에서 데이터 추출, 이미지 분류, 워크플로에 시각적 이해 기능 구축 — 모두 네이티브 Delphi 코드로 구현해요.

JSON 모드

Mistral이 유효하고 파싱 가능한 JSON 출력을 반환하도록 강제해요. JSON 모드는 데이터 추출, 구조화된 API 응답, 기계가 읽을 수 있는 출력이 보장되어야 하는 자동화된 처리 파이프라인에 적합해요.

// Generate structured JSON output
vResponse := Mistral._CreateMessageJSON(
  'mistral-large-latest',
  'Extract the name, age, and city from: John is 30, lives in Madrid.');
// Returns: {"name": "John", "age": 30, "city": "Madrid"}
// Using the typed API for JSON mode
oRequest.ResponseFormat := 'json_object';

도구 사용 — 함수 호출

JSON Schema로 커스텀 도구를 정의하면 Mistral이 호출 시점과 방법을 결정해요. 이것은 AI를 비즈니스 로직에 연결하는 에이전트적 다단계 워크플로를 구축하는 기반이에요.

// Define a tool with JSON Schema
oTool := TsgcMistralClass_Request_Tool.Create;
oTool.FunctionName := 'get_weather';
oTool.FunctionDescription := 'Get the current weather in a location';
oTool.FunctionParameters :=
  '{"type":"object","properties":{"location":{"type":"string",' +
  '"description":"City and country"}},"required":["location"]}';
oRequest.Tools.Add(oTool);
oRequest.ToolChoice := 'auto';
oResponse := Mistral.CreateMessage(oRequest);
// Check if Mistral wants to call a tool
if oResponse.Choices[0].FinishReason = 'tool_calls' then
begin
  for i := 0 to Length(oResponse.Choices[0].Message.ToolCalls) - 1 do
  begin
    vToolId   := oResponse.Choices[0].Message.ToolCalls[i].Id;
    vFuncName := oResponse.Choices[0].Message.ToolCalls[i].FunctionCall.Name;
    vFuncArgs := oResponse.Choices[0].Message.ToolCalls[i].FunctionCall.Arguments;
    // Execute the tool and return the result
  end;
end;

Embeddings

Mistral의 임베딩 모델을 사용하여 텍스트에 대한 고품질 벡터 임베딩을 생성해요. Embeddings는 의미 검색, 문서 클러스터링, 추천 엔진, 분류 작업을 구동해요.

// Generate embeddings for a text
var
  vEmbedding: string;
begin
  vEmbedding := Mistral._CreateEmbeddings(
    'mistral-embed',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

완전한 제어를 위해 타입이 지정된 API를 사용하여 여러 입력을 일괄 처리하고 인코딩 형식을 선택해요.

var
  oRequest: TsgcMistralClass_Request_Embeddings;
  oResponse: TsgcMistralClass_Response_Embeddings;
begin
  oRequest := TsgcMistralClass_Request_Embeddings.Create;
  Try
    oRequest.Model := 'mistral-embed';
    oRequest.Input.Add('First document to embed');
    oRequest.Input.Add('Second document to embed');
    oRequest.EncodingFormat := 'float';
    oResponse := Mistral.CreateEmbeddings(oRequest);
    Try
      ShowMessage('Embeddings: ' + IntToStr(Length(oResponse.Data)));
      ShowMessage('Tokens used: ' + IntToStr(oResponse.Usage.TotalTokens));
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

안전 프롬프트

Mistral은 단일 속성으로 활성화할 수 있는 내장 안전 레이어를 제공해요. SafePrompt가 활성화되면 유해하거나 부적절한 콘텐츠를 필터링하기 위해 안전에 초점을 맞춘 시스템 프롬프트가 자동으로 앞에 추가돼요.

// Enable safety guardrails
oRequest.SafePrompt := True;

재현 가능한 결과. RandomSeed를 고정값으로 설정하여 결정론적 출력을 얻을 수 있어요. Temperature := 0과 결합하면 동일한 입력에 대해 동일한 응답을 보장해요 — 테스트 및 검증 파이프라인에 이상적이에요.

모델 관리

사용 가능한 Mistral 모델을 프로그래밍 방식으로 조회해요. 모든 모델을 나열하여 새로운 기능이 제공될 때 발견할 수 있어요.

// List all available Mistral models
vModels := Mistral._GetModels;
// Typed API: access model properties directly
var
  oModels: TsgcMistralClass_Response_Models;
  i: Integer;
begin
  oModels := Mistral.GetModels;
  Try
    for i := 0 to Length(oModels.Data) - 1 do
      Memo1.Lines.Add(oModels.Data[i].Id + ' (by ' +
        oModels.Data[i].OwnedBy + ')');
  Finally
    oModels.Free;
  End;
end;

설정 및 옵션

포괄적인 설정 옵션으로 컴포넌트 동작을 세밀하게 조정해요.

속성 설명
MistralOptions.ApiKey Mistral API 키 (필수)
HttpOptions.ReadTimeout HTTP 읽기 제한 시간(밀리초, 기본값: 60000)
LogOptions.Enabled 요청/응답 로깅 활성화
RetryOptions.Enabled 일시적 오류 시 자동 재시도
RetryOptions.Retries 최대 재시도 횟수(기본값: 3)
RetryOptions.Wait 재시도 사이의 대기 시간(밀리초, 기본값: 3000)

요청 매개변수

매개변수 설명
Temperature 샘플링 temperature(0.0–2.0). 낮을수록 더 결정론적이에요.
TopP 핵 샘플링(0.0–1.0). 누적 확률 컷오프를 제어해요.
MaxTokens 응답의 최대 토큰 수(기본값: 4096).
SafePrompt 콘텐츠 필터링을 위한 내장 안전 가드레일 활성화.
RandomSeed 재현 가능한 출력을 위한 고정 시드. 테스트에 이상적이에요.
ResponseFormat 보장된 JSON 출력을 위해 'json_object'로 설정해요.
ToolChoice 도구 선택 제어: 'auto', 'none', 또는 'required'.

유럽 AI의 장점. Mistral은 프랑스에 본사를 두고 EU 호스팅 추론을 제공하여 유럽 데이터 거주 요건이 있는 조직에게 탁월한 선택이에요. sgcWebSockets 컴포넌트의 내장 재시도 로직, 로깅, 타입 안전 API와 결합하면 전체 규정 준수를 갖춘 프로덕션 준비 AI 통합을 얻을 수 있어요.