Interfaze

Interfaze

Interfaze는 개발자와 자동화를 위해 만들어진 LLM이에요. Interfaze provider는 이를 표준 generateText 및 streamText API로 가져오고, Output을 통한 구조화 출력을 포함하며, Interfaze의 추가 기능 — 시맨틱 캐시 플래그, 추론, 내부 작업 precontext —을 providerMetadata에 드러내요.

자세한 내용은 Interfaze documentation을 참고하세요.

출처: 문서

본문

셋업 (Setup)

Interfaze provider는 @interfaze-ai/ai-sdk 모듈에서 사용할 수 있어요. 다음과 같이 설치할 수 있어요:

npm install @interfaze-ai/ai-sdk
pnpm add @interfaze-ai/ai-sdk
yarn add @interfaze-ai/ai-sdk
bun add @interfaze-ai/ai-sdk

Provider 인스턴스 (Provider Instance)

기본 interfaze 인스턴스를 import하거나 createInterfaze로 만들 수 있어요:

import { createInterfaze, interfaze } from '@interfaze-ai/ai-sdk';

const model = interfaze('interfaze-beta'); // reads INTERFAZE_API_KEY

const custom = createInterfaze({ apiKey: 'YOUR_KEY' });

API 키는 Interfaze dashboard에서 얻을 수 있어요.

언어 모델 (Language Models)

provider 인스턴스로 모델을 만들고 generateText / streamText로 사용하세요:

import { interfaze } from '@interfaze-ai/ai-sdk';
import { generateText } from 'ai';

const { text } = await generateText({
  model: interfaze('interfaze-beta'),
  prompt: 'Which US public companies reported earnings today?',
});

여기서 답은 웹 검색이 뒷받침해요 — 소스는 providerMetadata.interfaze.precontext에 놓여요(Interfaze metadata 참고). streamText도 같은 방식으로 작동해요.

구조화 출력 (Structured Output)

Interfaze는 generateText와 streamText로 구조화 출력을 지원해요. Zod 스키마로 Output.object를 사용해 타입 있는 객체를 생성하세요. 이미지에서 데이터를 추출할 때도(OCR이 내부적으로 실행) 마찬가지예요:

import { interfaze } from '@interfaze-ai/ai-sdk';
import { generateText, Output } from 'ai';
import { z } from 'zod';

const { output } = await generateText({
  model: interfaze('interfaze-beta'),
  output: Output.object({
    schema: z.object({
      merchant: z.string(),
      total: z.number(),
      items: z.array(z.object({ name: z.string(), price: z.number() })),
    }),
  }),
  messages: [
    {
      role: 'user',
      content: [
        { type: 'text', text: 'Extract this receipt.' },
        {
          type: 'image',
          image: new URL('https://jigsawstack.com/preview/vocr-example.jpg'),
        },
      ],
    },
  ],
});

추론 (Reasoning)

reasoningEffort('minimal' | 'low' | 'medium' | 'high', 그리고 Interfaze의 'on' | 'off' | 'auto')을 설정하면, 추론 텍스트가 providerMetadata.interfaze.reasoning으로 돌아와요:

const { text, providerMetadata } = await generateText({
  model: interfaze('interfaze-beta'),
  prompt: 'Which region should we launch in first, and why?',
  providerOptions: { interfaze: { reasoningEffort: 'high' } },
});

console.log(providerMetadata?.interfaze?.reasoning);

시맨틱 캐시 적중은 추론 없이 저장된 답을 재생해요. 호출마다 새로운 추론이 필요하면 provider에 bypassCache: true를 설정하세요.

가드레일 (Guardrails)

guard로 안전 카테고리를 활성화하세요. 차단된 요청은 오류가 아니라 텍스트가 평문 문자열 unsafe <code>인 정상 완료로 돌아와요:

const { text } = await generateText({
  model: interfaze('interfaze-beta'),
  prompt: '...',
  providerOptions: { interfaze: { guard: ['S1', 'S10', 'S12_IMAGE'] } },
});

멀티모달 (Multimodal)

이미지, 오디오, 비디오, 문서 모두 표준 AI SDK 콘텐츠 파트를 사용해요. 공개 URL(Interfaze가 서버 쪽에서 가져오므로 나가는 길에 다운로드·재인코딩되지 않음) 또는 원시 바이트를 전달하세요:

Kind Types
Image image/jpeg image/png image/webp image/bmp image/heic image/heif
Audio audio/wav audio/mpeg audio/mp4 audio/ogg audio/flac
Video video/mp4 video/quicktime video/webm video/3gpp video/x-msvideo video/x-matroska
Documents application/pdf application/vnd.openxmlformats-officedocument.wordprocessingml.document application/json application/xml application/yaml
Text text/plain text/csv text/markdown text/tab-separated-values

image/gif와 image/avif는 API에서 거부돼요.

await generateText({
  model: interfaze('interfaze-beta'),
  messages: [
    {
      role: 'user',
      content: [
        { type: 'text', text: 'Summarize this document.' },
        {
          type: 'file',
          mediaType: 'application/pdf',
          data: new URL('https://arxiv.org/pdf/1706.03762'),
        },
      ],
    },
  ],
});

비디오는 video/* 미디어 타입의 file 파트예요. Interfaze는 URL을 서버 쪽에서 읽어요:

{
  type: 'file',
  mediaType: 'video/mp4',
  data: new URL('https://…/clip.mp4'),
}

Interfaze 메타데이터 (Interfaze Metadata)

Interfaze는 일반 채팅 provider가 버리는 필드를 반환해요. 런타임에는 generateText와 streamText 모두에서 providerMetadata.interfaze로 사용할 수 있어요:

const result = await generateText({
  model: interfaze('interfaze-beta'),
  prompt: 'What is the weather in San Francisco?',
});

const metadata = result.providerMetadata?.interfaze;

metadata?.vcache; // semantic-cache hit flag
metadata?.reasoning; // reasoning text
metadata?.precontext; // OCR / web / scrape / … output

Precontext는 출력 전용이에요 — 답변하는 동안 Interfaze가 실행한 내부 도구를 보고해요. streamText에서는 provider가 showAdditionalInfo: true로 생성된 경우에만(Client Options 참고) 최종 providerMetadata에 포함돼요. 접근하려면 스트림을 소비한 후 result.providerMetadata를 await하세요.

클라이언트 옵션 (Client Options)

라우터, 캐시, 스트리밍 동작은 provider에서 한 번 설정해요:

const interfaze = createInterfaze({
  showAdditionalInfo: true, // include precontext in final stream metadata
  bypassMoA: true, // skip the mixture-of-agents router
  bypassCache: true, // skip the semantic cache
});

더 알아보기 (Learn more)