LM Studio Provider

LM Studio Provider

LM Studio는 로컬 모델을 실행하기 위한 사용자 인터페이스에요.

OpenAI 호환 API 서버를 포함하고 있어서 AI SDK와 함께 사용할 수 있어요. LM Studio UI의 Local Server 탭에서 로컬 서버를 시작할 수 있어요 ("Start Server" 버튼).

출처: 문서

본문

설정

LM Studio 프로바이더는 OpenAI API와 호환되므로 @ai-sdk/openai-compatible 모듈을 통해 사용할 수 있어요. 다음과 같이 설치할 수 있어요:

npm install @ai-sdk/openai-compatible

프로바이더 인스턴스

LM Studio를 사용하려면 @ai-sdk/openai-compatible의 createOpenAICompatible 함수로 커스텀 프로바이더 인스턴스를 만들 수 있어요:

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const lmstudio = createOpenAICompatible({
  name: 'lmstudio',
  baseURL: 'http://localhost:1234/v1',
});

LM Studio는 기본적으로 포트 1234를 사용하지만, 앱의 Local Server 탭에서 변경할 수 있어요.

언어 모델

LM Studio에서 프로바이더 인스턴스를 사용해 로컬 LLM과 상호작용할 수 있어요. 첫 번째 인자는 모델 id에요 (예: llama-3.2-1b).

const model = lmstudio('llama-3.2-1b');
모델을 사용하려면 먼저 다운로드해야 해요.

예시

generateText 함수로 LM Studio 언어 모델을 사용해 텍스트를 생성할 수 있어요:

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';

const lmstudio = createOpenAICompatible({
  name: 'lmstudio',
  baseURL: 'https://localhost:1234/v1',
});

const { text } = await generateText({
  model: lmstudio('llama-3.2-1b'),
  prompt: 'Write a vegetarian lasagna recipe for 4 people.',
  maxRetries: 1, // 서버가 실행 중이 아니면 즉시 오류
});

LM Studio 언어 모델은 streamText와도 함께 사용할 수 있어요.

임베딩 모델

.embeddingModel() 팩토리 메서드를 사용해 LM Studio 임베딩 API를 호출하는 모델을 만들 수 있어요.

const model = lmstudio.embeddingModel('text-embedding-nomic-embed-text-v1.5');

예시 - 단일 값 임베딩

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { embed } from 'ai';

const lmstudio = createOpenAICompatible({
  name: 'lmstudio',
  baseURL: 'https://localhost:1234/v1',
});

// 'embedding'은 단일 임베딩 객체(number[])에요
const { embedding } = await embed({
  model: lmstudio.embeddingModel('text-embedding-nomic-embed-text-v1.5'),
  value: 'sunny day at the beach',
});

예시 - 여러 값 임베딩

데이터를 로드할 때, 예를 들어 검색 증강 생성(RAG)용 데이터 스토어를 준비할 때 여러 값을 한 번에 임베딩하는 것(배치 임베딩)이 유용할 때가 많아요.

AI SDK는 이를 위한 embedMany 함수를 제공해요. embed와 비슷하게 임베딩 모델과 함께 사용할 수 있어요, 예: lmstudio.embeddingModel('text-embedding-nomic-embed-text-v1.5') 또는 lmstudio.embeddingModel('text-embedding-bge-small-en-v1.5').

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { embedMany } from 'ai';

const lmstudio = createOpenAICompatible({
  name: 'lmstudio',
  baseURL: 'https://localhost:1234/v1',
});

// 'embeddings'은 임베딩 객체 배열(number[][])이에요.
// 입력 값과 동일한 순서로 정렬돼 있어요.
const { embeddings } = await embedMany({
  model: lmstudio.embeddingModel('text-embedding-nomic-embed-text-v1.5'),
  values: [
    'sunny day at the beach',
    'rainy afternoon in the city',
    'snowy night in the mountains',
  ],
});

더 알아보기 (Learn more)