概要
以前にOllamaをインストールしたので、今度はRAG(Retrieval-Augmented Generation)を実装してみました。
用語
RAG
Retrieval-Augmented Generationの略でモデルにない回答に対する問題に対して、外部の知識を利用して答える技術。
実装
モジュールのインストール
pip install llama_index
プログラム
from llama_index.llms.ollama import Ollama from llama_index.core import SimpleDirectoryReader, VectorStoreIndex from llama_index.embeddings.huggingface import HuggingFaceEmbedding def main(): llm = Ollama(model="Elyza", request_timeout=30.0) embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L6-v2") # PDF(テキスト)の読み込み reader = SimpleDirectoryReader(input_files=["./input_data/test.txt"]) data = reader.load_data() index = VectorStoreIndex.from_documents(data, embed_model=embed_model) query_engine = index.as_query_engine(llm=llm, streaming=True, similarity_top_k=3) response = query_engine.query( "RAGとは何ですか?" ) response.print_response_stream() print() for node in response.source_nodes: print(f"Text: {node.node.text[:100]}...") # print(f"Similarity score: {node.similarity_score}") if __name__ == '__main__': main()
input_data/test.txt
の中身は下記の通りです。
Retrieval-Augmented Generation (RAG) は、大規模言語モデル(LLM)によるテキスト生成に、外部情報の検索を組み合わせることで、回答精度を向上させる技術のこと。 「検索拡張生成」、「取得拡張生成」などと訳されます。外部情報の検索を組み合わせることで、大規模言語モデル(LLM)の出力結果を簡単に最新の情報に更新できるようになる効果や、出力結果の根拠が明確になり、事実に基づかない情報を生成する現象(ハルシネーション)を抑制する効果などが期待されています。 (読み:ラグ)
結果
外部知識がない場合は下記の出力結果となります。
% python src/rag_project/main.py RAGとは「Red(赤)・Amber(黄)・Green (緑) 」の略語です。 業務改善やプロジェクト管理など、様々な状況で利用されます。 例えば、プロジェクトの進捗状況を示すために「RAG」が使われます。 - レッド: 課題あり、対処が必要な状況 - アムベル: 注意が必要ですが、何とかなるかもしれません - グリーン: 順調です、心配ない
外部知識がある場合は下記の出力結果となります。
% python src/rag_project/main.py /Users/seiki/program/python/rag-project/.venv/lib/python3.8/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`. warnings.warn( RAGは、大規模言語モデル (LLM) によるテキスト生成に、外部情報の検索を組み合わせることで、回答精度を向上させる技術のことです。