0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Notion × Ollama】AIメンターちゃんに教わった自分だけのナレッジDBをローカルLLMに読み込ませる方法

0
Posted at

はじめに

「Notionにまとめた技術メモ、LLMに全部覚えさせたい…!」

IT研修の講師をしていると、Notionにナレッジがどんどん溜まっていきます。コマンド早見表、トラブルシュート集、研修で使ったたとえ話…。これをローカルLLMに読み込ませれば、自分専用のAIアシスタントが作れます。

この記事では、Notion DatabaseからデータをエクスポートしてOllamaのローカルLLMに読み込ませるまでの手順を、テンプレート付きで解説します。

全体の流れ

Notion Database → Python(API) → JSONL → Ollama Modelfile → ローカルLLM

3ステップで完成します:

  1. Notionにナレッジ用DBを作る
  2. PythonスクリプトでJSONLにエクスポート
  3. OllamaのModelfileに組み込んで起動

Step 1: Notion Databaseのテンプレート設計

なぜDB設計が大事?

LLMに読み込ませるとき、「タイトルと本文だけ」だと検索性が落ちます。メタデータ(カテゴリ・タグ・レベル)を付けておくと、RAG構成にしたときの精度がグッと上がります。

推奨プロパティ一覧

プロパティ名 用途
タイトル タイトル ナレッジの名前
カテゴリ セレクト Linux / Python / Java 等
タグ マルチセレクト 初心者向け / LPIC / コマンド集 等
コンテンツ リッチテキスト 本文(ページ本文でもOK)
要約 リッチテキスト 3行要約(RAG検索用)
ソース セレクト 自作記事 / 公式ドキュメント 等
対象レベル セレクト 入門 / 基礎 / 応用 / 実務
更新日 日付 最終更新日
LLM取込済 チェックボックス エクスポート管理用

ポイント:「要約」プロパティが重要

RAG(検索拡張生成)を使う場合、全文ではなく要約でヒットさせてから本文を参照する方式が効果的です。3行程度の要約を入れておくと、チャンク検索の精度が上がります。

Step 2: Notion APIでエクスポート

事前準備

  1. Notion Integrations でインテグレーションを作成
  2. トークンを取得
  3. 対象DBに「接続」を追加
pip install notion-client
export NOTION_TOKEN="secret_xxxxx"
export NOTION_DATABASE_ID="your-database-id"

エクスポートスクリプトの要点

from notion_client import Client
import json

notion = Client(auth=os.environ["NOTION_TOKEN"])

# DB全件取得(ページネーション対応)
results = []
has_more = True
start_cursor = None

while has_more:
    response = notion.databases.query(
        database_id=DATABASE_ID,
        start_cursor=start_cursor,
    )
    results.extend(response["results"])
    has_more = response.get("has_more", False)
    start_cursor = response.get("next_cursor")

取得したデータは、LLMが読みやすい形式に整形してJSONLに書き出します。

doc = {
    "title": title,
    "metadata": {"category": category, "tags": tags, "level": level},
    "summary": summary,
    "content": content,
    "formatted_text": f"# {title}\nカテゴリ: {category}\n\n{content}"
}
f.write(json.dumps(doc, ensure_ascii=False) + "\n")

出力されるJSONL例

{"title": "chmod コマンド早見表", "metadata": {"category": "Linux", "tags": ["初心者向け", "LPIC"]}, "summary": "chmodはパーミッション変更コマンド...", "content": "## chmod とは\n...", "formatted_text": "# chmod コマンド早見表\n..."}

Step 3: Ollamaに読み込ませる

方法A: Modelfileのsystemプロンプトに埋め込む(お手軽)

ナレッジ量が少ない場合(目安:コンテキスト長に収まる範囲)はこれが一番簡単です。

FROM llama3.2

SYSTEM """
あなたはIT研修のアシスタントです。
以下のナレッジベースを参照して質問に回答してください。

# chmod コマンド早見表
カテゴリ: Linux | レベル: 入門

## chmod とは
ファイルやディレクトリのパーミッションを変更するコマンド。
...(ナレッジ全文)...
"""

PARAMETER temperature 0.3
PARAMETER num_ctx 8192
ollama create my-it-tutor -f Modelfile
ollama run my-it-tutor

方法B: RAG構成にする(本格運用向け)

ナレッジが多い場合は、ベクトルDBと組み合わせます。

JSONL → Embedding → ChromaDB → 質問時に類似検索 → LLMに注入
import chromadb

client = chromadb.Client()
collection = client.create_collection("knowledge")

# JONLからドキュメントを登録
with open("knowledge_base.jsonl") as f:
    for i, line in enumerate(f):
        doc = json.loads(line)
        collection.add(
            documents=[doc["formatted_text"]],
            metadatas=[doc["metadata"]],
            ids=[doc["id"]]
        )

# 質問時に検索して上位をコンテキストに
results = collection.query(query_texts=["chmodの使い方"], n_results=3)
context = "\n---\n".join(results["documents"][0])

使い方の選択ガイド

状況 おすすめ方法
ナレッジ50件以下 方法A(systemプロンプト埋め込み)
ナレッジ50件以上 方法B(RAG + ChromaDB)
研修中にリアルタイムで使いたい 方法A(レスポンスが速い)
チーム全員で使いたい 方法B + API化

テンプレートファイル

今回のテンプレートとスクリプトはGitHub(またはこの記事の末尾)に置いています:

  • notion_db_template.json — Notion DBスキーマ+サンプルデータ
  • notion_to_llm.py — エクスポート&Modelfile生成スクリプト

実際に使ってみた感想

研修中に「このコマンドなんだっけ?」と聞かれたとき、自分のナレッジを覚えたLLMに聞くと自分の言葉遣い・たとえ話で返ってくるのが良いです。「うさうさラーメン店」の例え話もちゃんと再現してくれます。

まとめ

  • Notion DBはメタデータをしっかり設計するのがコツ
  • 少量ならsystemプロンプト埋め込みで十分動く
  • 大量ならChromaDB等でRAG構成にする
  • ローカルLLMなので情報漏洩の心配なし、研修現場でも安心

自分だけのナレッジを覚えたAIアシスタント、ぜひ試してみてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?