의미론적 캐시(Semantic Cache)는 의미론적 유사성을 기반으로 자연 텍스트를 캐싱하는 도구입니다. 자연어 분류 또는 AI 응답 캐싱과 같이 의미를 기반으로 정보를 쿼리하거나 검색하는 모든 작업에 이상적입니다. 두 텍스트가 유사하지만 동일하지 않을 수 있습니다(예: "스페인에서 확인하기 좋은 장소"와 "스페인에서 방문하기 가장 좋은 장소"). 기존 캐싱은 이러한 의미적 유사성을 인식하지 못하고 재사용 기회를 놓칩니다.
의미론적 캐시를 사용하면 다음을 수행할 수 있습니다.
패키지를 설치합니다:
npm install @upstash/semantic-cache @upstash/vector
먼저 여기에서 Upstash 벡터 데이터베이스를 만듭니다. 의미 체계 캐시를 연결하려면 url
및 token
자격 증명이 필요합니다. 중요: 데이터베이스를 생성할 때 미리 만들어진 임베딩 모델을 선택하세요.
메모
다양한 임베딩 모델은 다양한 사용 사례에 적합합니다. 예를 들어 짧은 지연 시간이 우선순위인 경우 bge-small-en-v1.5
와 같이 차원 크기가 더 작은 모델을 선택합니다. 정확성이 중요하다면 더 많은 차원을 갖춘 모델을 선택하세요.
프로젝트의 루트 디렉터리에 .env
파일을 만들고 Upstash Vector URL과 토큰을 추가합니다.
UPSTASH_VECTOR_REST_URL=https://example.upstash.io
UPSTASH_VECTOR_REST_TOKEN=your_secret_token_here
Node.js 애플리케이션에서 시맨틱 캐시를 사용하는 방법은 다음과 같습니다.
import { SemanticCache } from "@upstash/semantic-cache" ;
import { Index } from "@upstash/vector" ;
// ? your vector database
const index = new Index ( ) ;
// ? your semantic cache
const semanticCache = new SemanticCache ( { index , minProximity : 0.95 } ) ;
async function runDemo ( ) {
await semanticCache . set ( "Capital of Turkey" , "Ankara" ) ;
await delay ( 1000 ) ;
// ? outputs: "Ankara"
const result = await semanticCache . get ( "What is Turkey's capital?" ) ;
console . log ( result ) ;
}
function delay ( ms : number ) {
return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
}
runDemo ( ) ;
minProximity
매개변수 minProximity
매개변수의 범위는 0
~ 1
입니다. 캐시 적중을 결정하기 위해 최소 관련성 점수를 정의할 수 있습니다. 이 숫자가 높을수록 사용자 입력이 캐시된 콘텐츠와 더 유사해야 히트할 수 있습니다. 실제로 0.95점은 유사성이 매우 높다는 것을 의미하고, 0.75점은 이미 유사성이 낮다는 것을 의미합니다. 예를 들어 가능한 가장 높은 값인 1.00은 사용자 쿼리와 캐시 콘텐츠가 정확히 일치하는 것만 캐시 적중으로 허용합니다.
네임스페이스를 사용하여 데이터를 파티션으로 분리할 수 있습니다.
import { SemanticCache } from "@upstash/semantic-cache" ;
import { Index } from "@upstash/vector" ;
// ? your vector database
const index = new Index ( ) ;
// ? your semantic cache
const semanticCache = new SemanticCache ( { index , minProximity : 0.95 , namespace : "user1" } ) ;
await semanticCache . set ( "Capital of Turkey" , "Ankara" ) ;
다음 예는 다양한 사용 사례에서 시맨틱 캐시를 활용하는 방법을 보여줍니다.
메모
벡터 인덱스가 업데이트되는 시간을 허용하기 위해 데이터를 설정한 후 1초 지연을 추가합니다. 이러한 지연은 데이터를 검색할 수 있는지 확인하는 데 필요합니다.
await semanticCache . set ( "Capital of France" , "Paris" ) ;
await delay ( 1000 ) ;
// ? outputs "Paris"
const result = await semanticCache . get ( "What's the capital of France?" ) ;
await semanticCache . set ( "largest city in USA by population" , "New York" ) ;
await delay ( 1000 ) ;
// ? outputs "New York"
const result = await semanticCache . get ( "which is the most populated city in the USA?" ) ;
참고: 임베딩 모델은 사용하려는 언어를 지원해야 합니다.
await semanticCache . set ( "German Chancellor" , "Olaf Scholz" ) ;
await delay ( 1000 ) ;
// ? "Who is the chancellor of Germany?" -> outputs "Olaf Scholz"
const result = await semanticCache . get ( "Wer ist der Bundeskanzler von Deutschland?" ) ;
await semanticCache . set ( "year in which the Berlin wall fell" , "1989" ) ;
await delay ( 1000 ) ;
// ? outputs "1989"
const result = await semanticCache . get ( "what's the year the Berlin wall destroyed?" ) ;
await semanticCache . set ( "the chemical formula for water" , "H2O" ) ;
await semanticCache . set ( "the healthiest drink on a hot day" , "water" ) ;
await delay ( 1000 ) ;
// ? outputs "water"
const result = await semanticCache . get ( "what should i drink when it's hot outside?" ) ;
// ? outputs "H2O"
const result = await semanticCache . get ( "tell me water's chemical formula" ) ;
귀하의 기여에 감사드립니다! 이 프로젝트에 기여하고 싶다면 저장소를 포크하고 변경한 후 끌어오기 요청을 제출하세요.
MIT 라이센스에 따라 배포됩니다. 자세한 내용은 LICENSE
참조하세요.