こんにちは。jinnaiです。
最近、社内のナレッジ共有やプロジェクト管理にNotionを使用する企業が増えています。Notionは、その使いやすさと多機能性から、迅速に情報を整理し共有するための強力なツールとなっています。しかし、膨大な情報が集まる中で、必要な情報を効率的に検索することは難しい課題です。そこで、LlamaIndexを活用することで、RAG(Retrieval-Augmented Generation)を使った高度な情報検索と社内チャットボットの構築が可能になります。本記事では、LlamaIndexとNotionを組み合わせる方法について詳しく解説します。
[toc]
RAGとは
RAG(Retrieval-Augmented Generation)とは、情報検索と生成を組み合わせた技術です。RAGは、検索エンジンやデータベースから情報を引き出し、それをもとに新たな回答や文章を生成することで、高度な情報提供が可能になります。この技術は、特に大量のデータを扱う場合に有効で、ユーザーが求める情報を迅速かつ正確に提供できます。
Llamaindexとは
LlamaIndexは、LLM(大規模言語モデル)に様々な外部データを追加することができるデータフレームワークです。これにより、以下のようなさまざまなアプリケーションを構築できます。
- チャットボットやQAボット
- 構造化データの抽出
- 半自律エージェントの作成
LlamaIndexを使うことで、データの取り込み・処理、複雑なクエリの実行、LLMのプロンプティングを組み合わせた高度なワークフローの実装が容易になります。LlamaIndexは、PythonとTypeScriptの両方で利用可能です。
今回、以下の公式情報のData Connectorsで公開されているNotion Readerを使って試していきたいと思います。
LlamaHubを使ったRAGの構築
過去の記事でもご紹介した通り、LlamaHubとはLlamaIndexの拡張機能であり、複数のデータソースを統合するためのハブとして機能します。このデータコネクタを活用すれば、カスタムデータソースを大規模言語モデル(LLM)に接続することが可能になります。
Llamaindexで公開されているData Connectorsの一覧にないものでも、LlamaHubで紹介されているエージェントやデータローダーを使えば、RAGシステムの構築が可能になるかもしれません。
過去の記事でもMicrosoft 社のOneDrive、ビジネス版OneDrive for Business上に保存されたドキュメントをLLMにコネクトし、RAGのデモを行っておりますので、是非ご確認ください。
[blogcard url=”https://sec.atd-net.com/azureopenai-cognitivesearch-spo-data/”]
実際にやってみる
では実際にやってみたいと思います。まずは必要なものをインストールします。
pip install llama-index-readers-notion
Notionのページ読込とインデックスの作成を行います。NotionAPIを利用するにはNotion上でインテグレーションを作成する必要があり、作成したインテグレーションを指定することで利用が可能となります。
from llama_index.readers.notionimport NotionPageReader
from llama_index.core import GPTVectorStoreIndex, StorageContext, load_index_from_storage
from dotenv import load_dotenv
# openai api keyの設定
load_dotenv()
openai_api_key = os.environ.get('OPEN_API_KEY')
openai.api_key = openai_api_key
# notion class
class NotionRequest(BaseModel):
page_id: str
question: str
# Notion Integrantion tokenの設定
load_dotenv()
integration_token = os.environ.get('NOTION_INTEGRATION_TOKEN')
if not integration_token:
raise ValueError("NOTION_INTEGRATION_TOKEN is not set")
# pageID 指定とページ読込
try:
logging.info("Requesting Notion data...")
page_ids = ["4ef0671ff304475288aece33ff4f8566"]
documents = NotionPageReader(integration_token=integration_token).load_data(page_ids=page_ids)
logging.info("Notion data loaded successfully.")
except Exception as e:
logging.error(f"Error loading data from Notion: {e}")
raise HTTPException(status_code=500, detail="Failed to load data from Notion")
if not documents:
raise HTTPException(status_code=404, detail="No documents found in Notion page")
# インデックス作成
try:
vector_store_index = GPTVectorStoreIndex.from_documents(documents)
vector_store_index.storage_context.persist("../notion_vector_store")
logging.info("[*] Index saved to disk")
except Exception as e:
logging.error(f"Error creating or saving index: {e}")
raise HTTPException(status_code=500, detail="Failed to create or save index")
インデックスをメモリ上に保存するのではなく、ストレージ上に保存するために、storage_contextを使って保存しています。
後はインデックスの読込のコードも追加します。
#Create storage context
storage_context = StorageContext.from_defaults(persist_dir="../notion_vector_store")
#index load from storage
index = load_index_from_storage(storage_context)
#Llamaindex search
query_engine = index.as_query_engine(similarity_top_k=3,)
answer = query_engine.query("<query_text>")
これを簡易的なチャットアプリと組み合わせると、以下のように動作します。
デモ
以下のようなNotionページに対して読み込みを行います。
例えば、以下では弊社ATD InnoSolutionsがDXPO展示会に出展することになったのですが、その企画を考えるためのメモページです。
みんなで議論したナレッジみたいなものですね。
そしてチャットと組み合わせた結果がこんな感じです。
うまく、質問に対して回答できていると思います。
Notionという強力なナレッジ情報を連携した社内チャットボットの有用性
Notionでプロジェクト管理やナレッジ、タスクやポータルサイトなどの情報共有ができるようになった中、Notionだけでこれらを完結している企業も少なくありません。蓄積されたデータは非常に多く、その検索にかかる時間を短縮するだけでも業務効率は大幅に向上することが期待できます。新人教育や引継ぎの際にも活用できるので属人化防止も期待できるのではないでしょうか?
まとめ
NotionとLlamaIndexを活用することで、RAGを利用した高度な情報検索と社内チャットボットの構築が可能になります。この組み合わせにより、情報の検索・共有の効率が劇的に向上し、組織全体の生産性を向上させることができます。ぜひ、LlamaIndexとNotionを試してみて、効果的な情報活用を実現してください。
ChatGPTのみならず、生成AIの進化が勢いを増し続けています。
当社でも時代に置いて行かれないように様々な事業から技術支援を行っております。
ご興味がございましたらぜひともお問い合わせください。
また、弊社ではエンジニアを絶賛募集中です!
AI、IoT、Microsoft技術の道を進みたい人は是非連絡ください。