모델별 실행 레시피
최종 업데이트
글·사진·영상·녹음을 한 색인에서 검색하기, Jina v5 Omni
텍스트 색인을 유지하고 다른 형식의 질문을 연결할 수 있어요.
Jina v5 Omni는 텍스트·이미지·영상·오디오를 1,024차원 공통 벡터 공간에 놓고 text-small과 정렬돼요. 모델은 CC BY-NC 4.0이므로 상업 사용 전에 조건을 확인해야 합니다.
텍스트 색인을 그대로 두고 검색 입력을 늘려요
Jina v5 Omni로 사진·영상·오디오도 검색 벡터로 바꿀 수 있어요. 아래 데모에서는 text-small로 회의록을 인코딩하고 정렬된 omni-small로 사진 질의를 인코딩해 공통 공간에서 순위를 매깁니다. 이 예제는 메모리 내 한 번 검색이며 디스크 색인을 저장하거나 재사용하지 않습니다.
먼저 make_meeting_slide.py를 실행해 검색 이미지 meeting-slide.jpg를 만드세요. 검색 코드는 jina_search.py로 저장한 뒤 실행하며, 회의 사진과 가까운 회의록이 위에 출력됩니다.
from PIL import Image
from sentence_transformers import SentenceTransformer
text_model = SentenceTransformer(
"jinaai/jina-embeddings-v5-text-small",
revision="dd76d535f5447ca3897a9c893fb1e612ead98192",
trust_remote_code=True,
model_kwargs={"default_task": "retrieval"},
)
omni_model = SentenceTransformer(
"jinaai/jina-embeddings-v5-omni-small",
revision="950200abde3a3bcf3d5bdfe5d28fb5bb5e7dfbb0",
trust_remote_code=True,
model_kwargs={"default_task": "retrieval", "modality": "vision"},
)
minutes = [
"title: Budget review | text: The team moved the Q4 review to Thursday at 10 a.m.",
"title: Product launch | text: The launch checklist assigns the demo to Mina.",
]
doc_vectors = text_model.encode_document(minutes, normalize_embeddings=True)
photo = Image.open("meeting-slide.jpg").convert("RGB")
query_vector = omni_model.encode_query(photo, normalize_embeddings=True)
scores = omni_model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
print(f"{float(scores[index]):.4f}\t{minutes[index]}")python -m venv .venv
source .venv/bin/activate
python -m pip install -U 'transformers>=5.1' sentence-transformers pillow torchfrom PIL import Image, ImageDraw
image = Image.new("RGB", (1000, 700), "#f4f1e8")
draw = ImageDraw.Draw(image)
draw.rounded_rectangle((70, 70, 930, 630), radius=24, fill="white", outline="#26354a", width=4)
draw.text((130, 145), "Q4 BUDGET REVIEW", fill="#26354a")
draw.text((130, 235), "Thursday | 10:00 AM", fill="#26354a")
draw.text((130, 335), "Agenda: operating costs and hiring plan", fill="#26354a")
image.save("meeting-slide.jpg", quality=92)
print("saved meeting-slide.jpg")python make_meeting_slide.py
python jina_search.py
같은 검색 집합으로 색인 이득을 재요

검색 태스크와 사용 조건을 확인해요
Sentence Transformers에서는 Omni 모델을 default_task='retrieval'로 불러온 뒤 encode_query()와 encode_document()를 사용해요. 이미지·영상·오디오도 질의나 문서 역할을 지정해 입력할 수 있어요. text-small 색인과 omni-small 질의를 비교할 때는 양쪽에 같은 태스크 어댑터를 적용해요.
모델 카드에는 CC BY-NC 4.0 라이선스가 적용돼요. 조직 업무에 사용하기 전에는 라이선스가 허용하는 이용 범위를 확인해요. 결과 표에는 파일 유형, 색인 날짜, 모델 revision, 태스크, 색인 저장량을 함께 기록해요.
상업 서비스에 넣을 목적이라면 이 모델을 먼저 고르지 마세요. 가중치 라이선스가 비상업 조건이므로, 수익이 발생하는 기능에는 허용 범위를 확인한 다른 모델을 비교해야 해요.

용어 각주
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- Jina v5 Omni는 텍스트·이미지·영상·오디오를 1,024차원 공통 벡터 공간에 놓고 text-small과 정렬돼요. 모델은 CC BY-NC 4.0이므로 상업 사용 전에 조건을 확인해야 합니다.
- 필요한 메모리는 어느 정도인가요?
- Jina v5 Omni로 사진·영상·오디오도 검색 벡터로 바꿀 수 있어요. 아래 데모에서는 text-small로 회의록을 인코딩하고 정렬된 omni-small로 사진 질의를 인코딩해 공통 공간에서 순위를 매깁니다. 이 예제는 메모리 내 한 번 검색이며 디스크 색인을 저장하거나 재사용하지 않습니다.
- 선택하지 않는 편이 좋은 경우는 언제인가요?
- 상업 서비스에 넣을 목적이라면 이 모델을 먼저 고르지 마세요. 가중치 라이선스가 비상업 조건이므로, 수익이 발생하는 기능에는 허용 범위를 확인한 다른 모델을 비교해야 해요.
- 조건과 출처는 어디서 확인하나요?
- 모델 카드에는 CC BY-NC 4.0 라이선스가 적용돼요. 조직 업무에 사용하기 전에는 라이선스가 허용하는 이용 범위를 확인해요. 결과 표에는 파일 유형, 색인 날짜, 모델 revision, 태스크, 색인 저장량을 함께 기록해요.
