Ollama Delphi API 클라이언트

· 컴포넌트

Ollama는 자체 하드웨어에서 대규모 언어 모델을 로컬로 쉽게 실행할 수 있게 해줘요 — 클라우드 의존성도, API 비용도 없고, 완전한 데이터 프라이버시를 제공해요. 애플리케이션에 로컬 AI 기능을 통합하려는 Delphi 개발자를 위해 sgcWebSockets는 TsgcHTTP_API_Ollama를 제공해요 — 전체 Ollama API를 깔끔하고 타입에 안전한 Delphi 코드로 감싼 네이티브 컴포넌트예요.

민감한 데이터를 온프레미스에서 유지해야 하거나, 오프라인에서 작동하는 AI 기능을 구축하거나, 직접 모델 라이브러리를 관리하거나, 로컬 벡터 검색을 위한 임베딩을 생성해야 하는 경우, 이 컴포넌트는 모든 Ollama 기능에 직접 접근할 수 있게 해줘요. 클라우드 계정도, 정기 API 요금도 필요 없어요. 컴포넌트를 드롭하고 Ollama 인스턴스를 가리키게 한 다음 바로 개발을 시작하세요.

완전한 API 커버리지

Ollama API의 모든 주요 기능을 별도 설정 없이 지원해요.

채팅 완료
시스템 프롬프트와 함께 메시지를 보내고, 동기 또는 스트리밍 방식으로 응답을 받아요. temperature, top-p, 중지 시퀀스를 완전히 제어할 수 있어요.
실시간 스트리밍
Server-Sent Events를 사용해 토큰 단위로 응답을 스트리밍해요. 로컬에서 실행되는 모델로 반응형 UI를 구축할 수 있어요.
모델 관리
모델을 프로그래밍 방식으로 가져오고, 세부 정보를 표시하고, 태그를 나열하고, 삭제해요. Delphi 코드에서 전체 라이프사이클을 관리할 수 있어요.
임베딩
벡터 임베딩을 로컬에서 생성해요. 클라우드로 데이터를 보내지 않고 의미 기반 검색, 클러스터링, 분류를 구현할 수 있어요.
자체 호스팅 / 설정 가능한 호스트
설정 가능한 호스트 URL을 통해 모든 Ollama 인스턴스에 연결해요. 로컬, LAN 서버, 또는 프라이빗 클라우드에서 실행할 수 있어요.
내장된 재시도 및 로깅
일시적인 실패에 대해 설정 가능한 시도 횟수와 대기 간격으로 자동 재시도해요. 디버깅을 위한 완전한 요청/응답 로깅을 제공해요.

시작하기

1분 이내에 Ollama를 Delphi 프로젝트에 통합하세요. 컴포넌트를 드롭하고, 호스트를 설정하고, 첫 메시지를 보내보세요.

// Create the component and configure the host
var
  Ollama: TsgcHTTP_API_Ollama;
  vResponse: string;
begin
  Ollama := TsgcHTTP_API_Ollama.Create(nil);
  Try
    Ollama.OllamaOptions.Host := 'http://localhost:11434';
    // Send a simple message to a local model
    vResponse := Ollama._CreateMessage(
      'llama3', 'Hello, Ollama!');
    ShowMessage(vResponse);
  Finally
    Ollama.Free;
  End;
end;

API 키가 필요 없어요. 로컬 Ollama 인스턴스에 연결할 때는 인증이 필요하지 않아요. 원격 또는 보안 배포의 경우 OllamaOptions.ApiKey를 통해 선택적으로 API 키를 설정할 수 있어요.

채팅 완료 및 스트리밍

채팅 완료 API는 Ollama 인스턴스에 가져온 모든 모델과 함께 작동해요. 선택적 시스템 프롬프트와 함께 텍스트를 보내고, 동기 또는 실시간 스트리밍 방식으로 응답을 받으세요.

시스템 프롬프트

대화의 컨텍스트, 성격, 제약을 설정하는 시스템 프롬프트를 제공해 모델 동작을 제어하세요.

vResponse := Ollama._CreateMessageWithSystem(
  'llama3',
  '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를 사용해 모델의 응답을 토큰 단위로 스트리밍하세요.

// Enable streaming via SSE
Ollama.OnHTTPAPISSE := OnSSEEvent;
Ollama._CreateMessageStream('llama3',
  'Write a short poem about Delphi programming.');
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, 중지 시퀀스, 최대 토큰)를 완전히 제어하려면 타입이 지정된 요청 및 응답 클래스를 사용하세요.

var
  oRequest: TsgcOllamaClass_Request_ChatCompletion;
  oMessage: TsgcOllamaClass_Request_Message;
  oResponse: TsgcOllamaClass_Response_ChatCompletion;
begin
  oRequest := TsgcOllamaClass_Request_ChatCompletion.Create;
  Try
    oRequest.Model := 'llama3';
    oRequest.MaxTokens := 2048;
    oRequest.Temperature := 0.7;
    oMessage := TsgcOllamaClass_Request_Message.Create;
    oMessage.Role := 'user';
    oMessage.Content := 'Explain quantum computing in simple terms.';
    oRequest.Messages.Add(oMessage);
    oResponse := Ollama.CreateMessage(oRequest);
    Try
      if Length(oResponse.Choices) > 0 then
        ShowMessage(oResponse.Choices[0].MessageContent);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

모델 관리

Delphi 코드에서 전체 로컬 모델 라이브러리를 관리하세요. 새 모델을 가져오고, 세부 정보를 검사하고, 사용 가능한 태그를 나열하고, 더 이상 필요 없는 모델을 삭제하세요 — 모두 프로그래밍 방식으로 가능해요.

모델 가져오기

// Download a model from the Ollama registry
Ollama._PullModel('llama3');

모델 세부 정보 표시

// Get detailed information about a model
vDetails := Ollama._ShowModel('llama3');
ShowMessage(vDetails);

모델 및 태그 나열

// List all models via OpenAI-compatible endpoint
vModels := Ollama._GetModels;
// List model tags with detailed metadata (name, size, digest)
vTags := Ollama._GetTags;
// Typed API: access tag properties directly
var
  oTags: TsgcOllamaClass_Response_Tags;
  i: Integer;
begin
  oTags := Ollama.GetTags;
  Try
    for i := 0 to Length(oTags.Models) - 1 do
      Memo1.Lines.Add(Format('%s (%d bytes)',
        [oTags.Models[i].Name, oTags.Models[i].Size]));
  Finally
    oTags.Free;
  End;
end;

모델 삭제

// Remove a model from the local system
Ollama._DeleteModel('old-model:latest');

임베딩

임베딩이 가능한 모델로 벡터 임베딩을 로컬에서 생성하세요. 임베딩은 의미 기반 검색, 문서 클러스터링, 분류를 지원해요 — 외부 서버로 데이터를 보내지 않고도 가능해요.

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

완전한 제어를 위해 타입 API를 사용해 원시 임베딩 값에 접근하세요.

var
  oResponse: TsgcOllamaClass_Response_Embeddings;
  i: Integer;
begin
  oResponse := Ollama.CreateEmbeddings(
    'nomic-embed-text',
    'Delphi is a powerful programming language.');
  Try
    for i := 0 to oResponse.EmbeddingCount - 1 do
      Memo1.Lines.Add(FloatToStr(oResponse.GetEmbeddingValue(i)));
  Finally
    oResponse.Free;
  End;
end;

데이터 프라이버시. Ollama를 사용하면 데이터가 네트워크를 벗어나지 않아요. 데이터 거주성과 프라이버시가 중요한 규제 산업(의료, 금융, 정부)에 이상적이에요.

설정 및 옵션

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

속성 설명
OllamaOptions.Host Ollama 서버 URL (예: http://localhost:11434)
OllamaOptions.ApiKey 보안 배포를 위한 선택적 API 키
HttpOptions.ReadTimeout HTTP 읽기 타임아웃(밀리초 단위, 기본값: 60000)
LogOptions.Enabled 요청/응답 로깅 활성화
RetryOptions.Enabled 일시적 실패에 대한 자동 재시도
RetryOptions.Retries 최대 재시도 횟수(기본값: 3)
RetryOptions.Wait 재시도 사이의 대기 시간(밀리초 단위, 기본값: 3000)

지원되는 모델

Ollama는 수백 개의 오픈 소스 모델을 지원해요. 인기 있는 몇 가지를 소개해요:

모델 매개변수 최적 용도
llama3 8B / 70B 범용 채팅, 추론
mistral 7B 빠르고 효율적인 텍스트 생성
codellama 7B / 13B / 34B 코드 생성 및 분석
nomic-embed-text 137M 텍스트 임베딩, 의미 기반 검색

비용 제로, 완전한 제어. 토큰당 요금 없이 자체 하드웨어에서 AI 모델을 실행하세요. sgcWebSockets의 내장된 재시도 로직 및 로깅과 결합해, Delphi를 위한 프로덕션 준비가 완료된 로컬 AI 통합을 얻을 수 있어요.