| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- AI
- instruction
- XML
- python
- mysql
- Linux
- Class
- for
- Rag
- Pipelining
- DATAPATH
- web
- react
- Java
- system
- architecture
- html
- computer
- DB
- Algorithm
- javascript
- CSS
- php
- DS
- control
- MIPS
- data structure
- function
- github
- openai
- Today
- Total
YYYEJI
[MAC] 벡터 저장소 FAISS(Facebook AI Similarity Search) 사용한 코드 살펴보기 본문
https://yyyeji.tistory.com/441
벡터 저장소(Vector Store)이란?
벡터 저장소란!!비정형 데이터를 벡터(숫자 배열)형태로 저장하고,빠르게 검색할 수 있게 해주는 특수한 데이터베이스에요!단순한 키워드 검색이 아니라 의미 기반 검색이 가능해서유사도가 높
yyyeji.tistory.com

↑↑↑ 벡터 저장소가 궁금할 땐 ↑↑↑
FAISS(Facebook AI Similarity Search)
효율적인 벡터 유사도 검색 및 클러스터링을 위한 오픈소스 벡터 저장소라고 할 수 있습니다!!
(긔찮은 건 아니지만 ,, 벡터 저장소 초기화하고 벡터 저장소 로드하는 부분은
같아서 ChromaDB랑 내용이 똑같을 거에요 ㅎㅎ)
벡터 저장소를 초기화시켜줍니다!
from langchain_community.document_loaders import PyPDFLoader
# PDF 로더 초기화 (근로기준법 문서)
pdf_loader = PyPDFLoader("/content/A.pdf")
# 동기 로딩
pdf_docs = pdf_loader.load()
print("문서의 페이지 수:", len(pdf_docs))
PyPDFLoader()를 통해 로더 객체를 생성해주었습니다.
.load() 함수는 PDF를 읽어서 각 페이지를 하나의 Document 객체로 변환해 리스트에 저장합니다.
from langchain_text_splitters import RecursiveCharacterTextSplitter
# TikToken 인코더를 사용하여 재귀적 텍스트 분할기 초기화 (토큰 수 기준 분할)
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
encoding_name="cl100k_base",
chunk_size=500,
chunk_overlap=100,
)
# split_documents() 메서드 사용 : Document 객체를 여러 개의 작은 청크 문서로 분할
chunks = text_splitter.split_documents(pdf_docs)
print(f"생성된 청크 수: {len(chunks)}")
print(f"각 청크의 길이: {list(len(chunk.page_content) for chunk in chunks)}")
# 각 청크의 시작 부분과 끝 부분 확인
for chunk in chunks[:3]:
print(chunk.page_content[:100] + "---" + chunk.page_content[-100:])
print("-" * 100)
이 코드는 PDF에서 불러온 문서를 토큰 단위로 적당히 자르(Chunking)는 중입니다.
RecursiveCharacterTextSplitter.from_tiktoken_encoder()를 통해 토큰 단위로 분할을 했고
chunk_size는 500 토큰,
chunk_overlap 청크 간 100 토큰씩 겹치게 분할하여 맥락을 보존합니다!
pdf__docs 리스트를 여러 개의 작은 청크로 나눕니다

그러면 이렇게 분할된 데이터들을 확인할 수 있어요

이제 FAISS를 사용해서 문서 검색을 해보겠습니다.
query = "탄소 제로 정책에 대해서 알려줘"
results = faiss_db.similarity_search(
query,
k=5,
filter={"source": "/content/[정책브리프 2021-04] 탄소중립 대응을 위한 정부 정책과 동향.pdf"}
)
faiss_db.similarity_search()를 통해 유사도 검색을 할건데 내부 요소는
query → 주어진 쿼리와 가장 유사한 문서 반환
k=5 → 상위 5개의 결과를 반환하도록 지정
filter → 특정 출처의 문서만 검색 가능!
chroma랑 마찬가지로 유사도 점수가 포함된 검색이 가능합니다!
query = "탄소 제로 정책에 대해서 알려줘"
results = faiss_db.similarity_search_with_score(
query,
k=5,
)
faiss_db.similarity_search_with_score()를 사용하시면 돼요!
↓↓↓ Chroma 코드가 궁금하다면 ?? ↓↓↓
[MAC] 벡터 저장소 ChromaDB 사용한 코드 살펴보기
벡터 저장소(Vector Store)이란?벡터 저장소란!!비정형 데이터를 벡터(숫자 배열)형태로 저장하고,빠르게 검색할 수 있게 해주는 특수한 데이터베이스에요!단순한 키워드 검색이 아니라 의미 기반
yyyeji.tistory.com
'인공지능 챗봇' 카테고리의 다른 글
| [MAC] Naive RAG 구현 코드 구현하기 (13) | 2025.08.05 |
|---|---|
| [MAC] 벡터 저장소 기반 RAG 검색기 사용하기 (6) | 2025.08.05 |
| [MAC] 벡터 저장소 ChromaDB 사용한 코드 살펴보기 (2) | 2025.08.05 |
| [MAC] 문서 임베딩(Document Embedding) 코드 파해치기 (6) | 2025.08.05 |
| [MAC] 데이터 로더 후 텍스트 분할(Text Splitting) 하는 과정 (7) | 2025.08.05 |