LlamaIndex v0.10.15 – 2024.3.5時点  Github LlamaHub

 GPTモデルに独自プロンプトを追加学習させるRAGライブラリ

# 使用するバージョン
pip install llama-index==0.9.2
pip install langchain==0.0.336
pip show xxx

# APIキー読み込み
import os 
with open('./openai-api-key.txt', 'r') as f:
    key = f.read()
os.environ["OPENAI_API_KEY"] = key

# ロギング機能(ログにサードパーティーモジュールの出力メッセージを含ませることができる)
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True) # 出力先=標準出力, プライオリティ=debug以上

ドキュメントの読み込み

 /data/ ディレクトリ内に、インデックスの元となる学習データを準備しておく
(拡張子は .txt .pdf .docx URL 等。複数ファイルも可。)

# 変数 documents を定義

from llama_index import SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()


LlamaIndex 単体

インデックスの作成 ★ OpenAI API に接続

# 変数 index を定義

from llama_index import GPTVectorStoreIndex
index = GPTVectorStoreIndex.from_documents(documents)


## 別の方法
index = GPTVectorStoreIndex.from_documents([]) # 空のインデックスの作成
for doc in documents:
    index.insert(doc) # インデックスへのドキュメントの挿入

クエリエンジンの作成

# 変数 query_engine を定義

query_engine = index.as_query_engine()

質疑応答

print(query_engine.query("質問文"))


LlamaIndex + LangChain

インデックスの作成 ★ OpenAI API に接続

 LLMPredictor を使用

# 変数 index を定義

from llama_index import GPTVectorStoreIndex, LLMPredictor, ServiceContext
from langchain.chat_models import ChatOpenAI

# LLMPredictorを定義
llm_predictor = LLMPredictor(llm=ChatOpenAI(
    temperature=0,
    model_name="gpt-3.5-turbo"))

# ServiceContextを定義
service_context = ServiceContext.from_defaults(
    llm_predictor=llm_predictor)

index = GPTVectorStoreIndex.from_documents(
    documents,
    service_context=service_context)

 PromptHelper を使用

from llama_index import GPTVectorStoreIndex, PromptHelper, ServiceContext
from langchain.chat_models import ChatOpenAI

prompt_helper = PromptHelper(num_output=256)

service_context = ServiceContext.from_defaults(
    prompt_helper=prompt_helper)

index = GPTVectorStoreIndex.from_documents(
    documents,
    service_context=service_context)

sentence_transformers

クエリエンジンの作成

query_engine = index.as_query_engine()

質疑応答

print(query_engine.query("質問文"))


インデックスの保存と読み込み

保存

from llama_index import GPTVectorStoreIndex

index.storage_context.persist()

# /storage/フォルダに、下記jsonファイルが生成・保存される
   ├ default__vector_store.json
   ├ docstore.json
   ├ graph_store.json
   ├ index_store.json

保存したインデックスの読み込み

from llama_index import StorageContext, load_index_from_storage

storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)