サンプル集  >  Python  >  コンテンツをベクトル化して保存
コンテンツをベクトル化して保存
2025/11/23

コンテンツをベクトル化して保存してみます。

◆環境
OS Windows 10 Home 22H2 64bit OS x64 プロセッサ
Python 3.13.1
VS Code 1.106.0

必要なモジュールをインストールするコマンドです。

pip install llama-index openai chromadb python-dotenv

コマンドを実行します。

pip install llama-index openai chromadb python-dotenv
Requirement already satisfied: llama-index in c:\users\ymlib\appdata\
local\programs\python\python313\lib\site-packages (0.14.8)
Requirement already satisfied: openai in c:\users\ymlib\appdata\local
\programs\python\python313\lib\site-packages (2.8.1)
Collecting chromadb
:

:
 tokenizers-0.22.1 typer-0.20.0 typer-slim-0.20.0 urllib3-2.3.0 uvi
corn-0.38.0 watchfiles-1.1.1 websocket-client-1.9.0 websockets-15.0
.1 zipp-3.23.0

Open AIのEmbeddingモデルを利用してベクトルを生成し保存します。

build_index.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: 
import os
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from datetime import datetime, timezone, timedelta

# JST(日本時間)のタイムゾーンを定義
JST = timezone(timedelta(hours=9))

# APIキーを設定
os.environ["OPENAI_API_KEY"] = "..."
    
# OpenAI LLM / Embedding の設定
embed_model = OpenAIEmbedding(model="text-embedding-3-large")
llm = OpenAI(model="gpt-4.1-mini")

def build_index():
    documents = SimpleDirectoryReader("data").load_data()

    index = VectorStoreIndex.from_documents(
        documents,
        embed_model=embed_model,
        llm=llm,
    )
    index.storage_context.persist(persist_dir="./storage")
    print("index created!")

if __name__ == "__main__":
    start = datetime.now(JST)
    build_index()
    end = datetime.now(JST)
    proc_time = end - start
    print(f"実行時間: {proc_time} ms")

dataフォルダにベクトル化したいコンテンツを格納します。 今回はpdfファイルを2つ読み込ませてみます。

コンテンツページ数容量
エアコンのマニュアル64ページ8.29MB
プリンターのマニュアル56ページ6.09MB

実行してみます。

py .\build_index.py
2025-11-23 11:02:36,785 - INFO - HTTP Request: POST https://api.opena
i.com/v1/embeddings "HTTP/1.1 200 OK"  
2025-11-23 11:02:38,553 - INFO - HTTP Request: POST https://api.opena
i.com/v1/embeddings "HTTP/1.1 200 OK"  
index created!
実行時間: 0:00:25.263690 ms

\storageフォルダが作成され、以下のファイルが生成されました。 生成されたファイルは合計で約11.8MB程度でした。

ファイル名容量(byte)
default__vector_store.json11,677,086
docstore.json771,700
graph_store.json18
image__vector_store.json72
index_store.json14,359

ファイルの内容を見ても正しいのかどうか分かりませんでした。 PCのスペックによるとは思いますが、pdfで120ページのマニュアルを処理するのに25秒弱かかりました。

▲ PageTop  ■ Home


Copyright (C) 2025 ymlib.com