Hindsight 프로바이더

Hindsight 프로바이더

Hindsight 는 AI 에이전트를 위한 영속 메모리(persistent memory) 서비스예요. @vectorize-io/hindsight-ai-sdk 패키지는 대화 간 장기 메모리를 에이전트에 제공하는 AI SDK 호환 도구 5가지를 제공해요.

기능은 다음과 같아요:

  • 5가지 메모리 도구: retain, recall, reflect, getMentalModel, getDocument
  • generateText, streamText, ToolLoopAgent에서 동작
  • 도구 생성 시 설정되는 인프라 옵션(예산, 태그, 비동기 모드) — 의미적 선택은 모델에 맡김
  • bankId를 통한 다중 사용자 메모리 격리
  • 완전한 TypeScript 지원

출처: 문서

본문

설정 (Setup)

Hindsight는 Docker로 로컬에서 실행하거나 클라우드 서비스로 사용할 수 있어요.

자체 호스팅 (Docker)

export OPENAI_API_KEY=your-key
docker run --rm -it -p 8888:8888 -p 9999:9999 \
  -e HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY \
  -v $HOME/.hindsight-docker:/home/hindsight/.pg0 \
  ghcr.io/vectorize-io/hindsight:latest

API는 http://localhost:8888에서, UI는 http://localhost:9999에서 사용할 수 있어요.

클라우드 (Cloud)

Hindsight 대시보드에서 가입하고 API URL을 받으세요.

설치 (Installation)

도구 만들기 (Creating Tools)

HindsightClient를 초기화하고 메모리 저장소를 식별하는 bankId(보통 사용자 ID)와 함께 createHindsightTools에 전달해요:

import { HindsightClient } from '@vectorize-io/hindsight-client';
import { createHindsightTools } from '@vectorize-io/hindsight-ai-sdk';

const client = new HindsightClient({ baseUrl: process.env.HINDSIGHT_API_URL });

const tools = createHindsightTools({
  client,
  bankId: 'user-123',
});

기본 사용법 (Basic Usage)

generateText

import { HindsightClient } from '@vectorize-io/hindsight-client';
import { createHindsightTools } from '@vectorize-io/hindsight-ai-sdk';
import { generateText, isStepCount } from 'ai';
import { openai } from '@ai-sdk/openai';

const client = new HindsightClient({ baseUrl: process.env.HINDSIGHT_API_URL });
const tools = createHindsightTools({ client, bankId: 'user-123' });

const { text } = await generateText({
  model: openai('gpt-4o'),
  tools,
  stopWhen: isStepCount(5),
  system: 'You are a helpful assistant with long-term memory.',
  prompt: 'Remember that I prefer dark mode and large fonts.',
});

ToolLoopAgent

import { ToolLoopAgent } from 'ai';
import { openai } from '@ai-sdk/openai';
import { HindsightClient } from '@vectorize-io/hindsight-client';
import { createHindsightTools } from '@vectorize-io/hindsight-ai-sdk';

const client = new HindsightClient({ baseUrl: process.env.HINDSIGHT_API_URL });

const agent = new ToolLoopAgent({
  model: openai('gpt-4o'),
  tools: createHindsightTools({ client, bankId: 'user-123' }),
  instructions: 'You are a helpful assistant with long-term memory.',
});

const result = await agent.generate({
  prompt: 'Remember that my favorite editor is Neovim',
});

다중 사용자 메모리 (Multi-User Memory)

다중 사용자 애플리케이션에서는 각 요청이 인증된 사용자의 올바른 bankId를 사용하도록 요청 핸들러 안에서 도구를 만들어요:

// app/api/chat/route.ts
import {
  createUIMessageStreamResponse,
  streamText,
  isStepCount,
  convertToModelMessages,
  toUIMessageStream,
} from 'ai';
import { openai } from '@ai-sdk/openai';
import { HindsightClient } from '@vectorize-io/hindsight-client';
import { createHindsightTools } from '@vectorize-io/hindsight-ai-sdk';

const hindsightClient = new HindsightClient({
  baseUrl: process.env.HINDSIGHT_API_URL,
});

export async function POST(req: Request) {
  const { messages, userId } = await req.json();

  const tools = createHindsightTools({
    client: hindsightClient,
    bankId: userId,
  });

  const result = streamText({
    model: openai('gpt-4o'),
    tools,
    stopWhen: isStepCount(5),
    system: 'You are a helpful assistant with long-term memory.',
    messages: await convertToModelMessages(messages),
  });

  return createUIMessageStreamResponse({
    stream: toUIMessageStream({ stream: result.stream }),
  });
}

HindsightClient 인스턴스는 공유되고(모듈 수준에서 한 번 생성), createHindsightTools는 현재 사용자 ID로 요청마다 호출돼요.

설정 (Configuration)

인프라 옵션은 도구 생성 시 설정되어, 비용·태깅·성능을 애플리케이션이 제어하면서 의미적 선택(무엇을 기억할지, 무엇을 검색할지)은 모델에 맡겨요.

const tools = createHindsightTools({
  client,
  bankId: userId,
  retain: {
    async: true,
    tags: ['env:prod', 'app:support'],
    metadata: { version: '2.0' },
  },
  recall: {
    budget: 'high',
    types: ['experience', 'world'],
    maxTokens: 2048,
    includeEntities: true,
  },
  reflect: {
    budget: 'mid',
  },
});

retain 옵션

파라미터 타입 기본값 설명
async boolean false fire-and-forget 수집 모드
tags string[] — 유지된 모든 메모리에 적용되는 태그
metadata Record<string, string> — 유지된 모든 메모리에 적용되는 메타데이터
description string 내장 기본 도구 설명 오버라이드

recall 옵션

파라미터 타입 기본값 설명
budget 'low' | 'mid' | 'high' 'mid' 검색 깊이와 지연 시간 트레이드오프
types ('world' | 'experience' | 'observation')[] 전체 특정 팩트 유형으로 결과 제한
maxTokens number API 기본값 반환되는 최대 총 토큰
includeEntities boolean false 결과에 엔티티 관찰 포함
includeChunks boolean false 결과에 원시 소스 청크 포함
description string 내장 기본 도구 설명 오버라이드

reflect 옵션

파라미터 타입 기본값 설명
budget 'low' | 'mid' | 'high' 'mid' 종합 깊이와 지연 시간 트레이드오프
maxTokens number API 기본값 최대 응답 토큰
description string 내장 기본 도구 설명 오버라이드

메모리 도구 (Memory Tools)

도구 설명
retain 메모리 뱅크에 정보 저장
recall 쿼리를 사용해 메모리 검색
reflect 저장된 메모리에서 통찰 합성
getMentalModel 구조화된 지식 모델 검색
getDocument 식별자로 저장된 문서 검색

더 알아보기 (Learn more)

전체 API 문서와 설정 옵션은 Hindsight 문서를 참고하세요.

전체 사이트맵