찾다
백엔드 개발파이썬 튜토리얼Ollama를 사용하여 벡터 검색을 구현하는 부분

Part Implementing Vector Search with Ollama

1부에서는 PostgreSQL을 pgVector 설정으로 다루었고, 2부에서는 OpenAI 임베딩을 사용하여 벡터 검색을 구현했습니다. 이 마지막 부분에서는 Ollama를 사용하여 로컬에서 벡터 검색을 실행하는 방법을 보여줍니다. ✨


내용물

  • 컨텐츠
  • 왜 올라마인가?
  • Docker로 Ollama 설정
  • 데이터베이스 업데이트
  • 구현
  • 검색어
  • 성능 팁
  • 문제해결
  • OpenAI 대 Ollama
  • 마무리

왜 올라마인가? ?

Ollama를 사용하면 다음을 통해 AI 모델을 로컬에서 실행할 수 있습니다.

  • 더 나은 데이터 개인정보 보호를 위한 오프라인 운영
  • API 비용 없음
  • 빠른 응답 시간

OpenAI의 1536차원과 비교하여 768차원 벡터를 생성하는 Ollama의 nomic-embed-text 모델을 사용하겠습니다.

Docker로 Ollama 설정하기?

Docker 설정에 Ollama를 추가하려면 compose.yml에 다음 서비스를 추가하세요.

services:
  db:
    # ... (existing db service)

  ollama:
    image: ollama/ollama
    container_name: ollama-service
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama

  data_loader:
    # ... (existing data_loader service)
    environment:
      - OLLAMA_HOST=ollama
    depends_on:
      - db
      - ollama

volumes:
  pgdata:
  ollama_data:

그런 다음 서비스를 시작하고 모델을 가져옵니다.

docker compose up -d

# Pull the embedding model
docker compose exec ollama ollama pull nomic-embed-text

# Test embedding generation
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": "Hello World"
}'

데이터베이스 업데이트?

Ollama 임베딩을 저장하기 위해 데이터베이스 업데이트:

-- Connect to the database
docker compose exec db psql -U postgres -d example_db

-- Add a column for Ollama embeddings
ALTER TABLE items
ADD COLUMN embedding_ollama vector(768);

새로 설치하려면 postgres/schema.sql을 업데이트하세요.

CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    item_data JSONB,
    embedding vector(1536),        # OpenAI
    embedding_ollama vector(768)   # Ollama
);

구현 ?

Ollama Python 라이브러리를 설치하려면 요구사항.txt를 업데이트하세요.

ollama==0.3.3

다음은 Ollama 임베딩을 추가하기 위한 load_data.py 업데이트의 예입니다.

import ollama  # New import

def get_embedding_ollama(text: str):
    """Generate embedding using Ollama API"""
    response = ollama.embed(
        model='nomic-embed-text',
        input=text
    )
    return response["embeddings"][0]

def load_books_to_db():
    """Load books with embeddings into PostgreSQL"""
    books = fetch_books()

    for book in books:
        description = (
            f"Book titled '{book['title']}' by {', '.join(book['authors'])}. "
            f"Published in {book['first_publish_year']}. "
            f"This is a book about {book['subject']}."
        )

        # Generate embeddings with both OpenAI and Ollama
        embedding = get_embedding(description)                # OpenAI
        embedding_ollama = get_embedding_ollama(description)  # Ollama

        # Store in the database
        store_book(book["title"], json.dumps(book), embedding, embedding_ollama)

이것은 명확성을 위해 단순화된 버전입니다. 전체 소스코드는 여기에 있습니다.

보시다시피 Ollama API 구조는 OpenAI와 유사합니다!

검색어?

Ollama 임베딩을 사용하여 유사한 항목을 검색하는 검색어:

-- View first 5 dimensions of an embedding
SELECT
    name,
    (replace(replace(embedding_ollama::text, '[', '{'), ']', '}')::float[])[1:5] as first_dimensions
FROM items;

-- Search for books about web development:
WITH web_book AS (
    SELECT embedding_ollama FROM items WHERE name LIKE '%Web%' LIMIT 1
)
SELECT
    item_data->>'title' as title,
    item_data->>'authors' as authors,
    embedding_ollama  (SELECT embedding_ollama FROM web_book) as similarity
FROM items
ORDER BY similarity
LIMIT 3;

성능 팁?

색인 추가

CREATE INDEX ON items
USING ivfflat (embedding_ollama vector_cosine_ops)
WITH (lists = 100);

자원 요구 사항

  • RAM: 모델의 경우 ~2GB
  • 첫 번째 쿼리: 모델 로딩이 약간 지연될 것으로 예상됩니다
  • 후속 쿼리: 응답 시간 ~50ms

GPU 지원

대규모 데이터세트를 처리하는 경우 GPU 지원을 통해 임베딩 생성 속도를 크게 높일 수 있습니다. 자세한 내용은 Ollama Docker 이미지를 참고하세요.

문제 해결?

연결 거부 오류

Ollama 도서관은 Ollama 서비스를 어디서 찾을 수 있는지 알아야 합니다. data_loader 서비스에서 OLLAMA_HOST 환경 변수를 설정합니다:

data_loader:
  environment:
    - OLLAMA_HOST=ollama

모델을 찾을 수 없음 오류

모델을 수동으로 당기기:

docker compose exec ollama ollama pull nomic-embed-text

또는 ollama.pull() 함수를 사용하여 Python 코드 내에서 모델을 자동으로 가져오는 스크립트를 추가할 수 있습니다. 자세한 내용은 여기를 확인하세요.

높은 메모리 사용량

  • 올라마 서비스 재시작
  • 더 작은 모델 사용을 고려해보세요

OpenAI 대 Ollama ⚖️

Feature OpenAI Ollama
Vector Dimensions 1536 768
Privacy Requires API calls Fully local
Cost Pay per API call Free
Speed Network dependent ~50ms/query
Setup API key needed Docker only

마무리 하시겠습니까?

이 튜토리얼에서는 Ollama를 사용하여 로컬 벡터 검색을 설정하는 방법만 다루었습니다. 실제 애플리케이션에는 다음과 같은 추가 기능이 포함되는 경우가 많습니다.

  • 쿼리 최적화 및 전처리
  • 하이브리드 검색(전체 텍스트 검색과 결합)
  • 웹 인터페이스와의 통합
  • 보안 및 성능 고려사항

FastAPI로 구축된 간단한 API를 포함한 전체 소스 코드는 GitHub에서 확인할 수 있습니다. PR과 피드백을 환영합니다!

자원:

  • 올라마 문서
  • Ollama Python 라이브러리
  • Ollama 임베딩 모델

질문이나 의견이 있으신가요? 아래에 댓글을 남겨주세요! ?

위 내용은 Ollama를 사용하여 벡터 검색을 구현하는 부분의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬과 시간 : 공부 시간을 최대한 활용파이썬과 시간 : 공부 시간을 최대한 활용Apr 14, 2025 am 12:02 AM

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

파이썬 : 게임, Guis 등파이썬 : 게임, Guis 등Apr 13, 2025 am 12:14 AM

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python vs. C : 응용 및 사용 사례가 비교되었습니다Python vs. C : 응용 및 사용 사례가 비교되었습니다Apr 12, 2025 am 12:01 AM

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경