■ OpenAI 클래스의 embeddings 변수를 사용해 유사도를 검색하는 방법을 보여준다. (FAISS 벡터 데이터베이스 사용)
▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import os import numpy import faiss from openai import OpenAI os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>" openAI = OpenAI() # 입력 텍스트의 텍스트 임베딩을 생성한다. inputText = "오늘은 비가 오지 않아서 다행이다." response = openAI.embeddings.create( input = inputText, model = "text-embedding-ada-002" ) inputEmbeddingList = [embedding.embedding for embedding in response.data] # inputEmbeddingList의 항목은 List 타입이다. inputEmbeddingNDArray = numpy.array(inputEmbeddingList).astype("float32") # 2차원 배열 : (1, 1536) # 대상 텍스트의 텍스트 임베딩을 생성한다. targetTextList = [ "좋아하는 음식은 무엇인가요?", "어디에 살고 계신가요?", "아침 전철은 혼잡하네요.", "오늘은 날씨가 좋네요.", "요즘 경기가 좋지 않네요." ] response = openAI.embeddings.create( input = targetTextList, model = "text-embedding-ada-002" ) targetEmbeddingList = [embedding.embedding for embedding in response.data] # targetEmbeddingList의 항목은 List 타입이다. targetEmbeddingNDArray = numpy.array(targetEmbeddingList).astype("float32") # 2차원 배열 : (5, 1536) # Faiss의 인덱스를 생성한다. indexFlatL2 = faiss.IndexFlatL2(targetEmbeddingNDArray.shape[1]) # 대상 텍스트의 임베딩 2차원 배열값을 인덱스에 추가한다. indexFlatL2.add(targetEmbeddingNDArray) # 유사도 검사를 수행한다. distanceList, indexList = indexFlatL2.search(inputEmbeddingNDArray, 1) print(distanceList) print(indexList) print(targetTextList[indexList[0][0]]) """ [[0.28370145]] [[3]] 오늘은 날씨가 좋네요. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
annotated-types==0.7.0 anyio==4.4.0 certifi==2024.6.2 distro==1.9.0 exceptiongroup==1.2.1 faiss-gpu==1.7.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 idna==3.7 numpy==1.26.4 openai==1.31.1 packaging==24.0 pydantic==2.7.3 pydantic_core==2.18.4 sniffio==1.3.1 tqdm==4.66.4 typing_extensions==4.12.1 |
※ faiss-cpu 모듈은 현재 최신 버전으로 1.8.0을 설치해도 정상 작동했다.