2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【続編】n8n×Obsidian自動化の「次の一手」— ローカルAIで記事の品質チェックと自動生成を実現した話

2
Posted at

こんにちは、エンジニアのTaichiです。

前回の記事「n8n×Obsidianで最強の情報収集システムを作った話」では、n8n + Obsidian + GitHub を使って「朝起きたら最新ニュースが届いている」仕組みを紹介しました。

たくさんの反響をいただいてありがとうございます!

あれから148本のニュースが自動で溜まったのですが、ある問題に気づきました。

「溜まったニュースを、どう活用するか」

情報は集まる。でも、それを記事にするのは結局自分の手作業。しかもクラウドAI(ChatGPTなど)に原稿を投げるのはプライバシーが気になる…。

そこで今回は、**ローカルで動くAI(Ollama)**をObsidianに接続して、

  1. 📊 25本のブログ記事をAIに自動で品質チェックさせる
  2. 📝 溜まったニュースから新しい記事を自動生成させる

という仕組みを構築しました。前回の続編です。


🏗️ 今回のアーキテクチャ

前回の構成に、ローカルAIが加わりました。

【前回のシステム(そのまま稼働中)】
  n8n (VPS) → RSS取得 → OpenAI要約 → GitHub → Obsidian
                                                    ↓
                                            148本のニュースが蓄積
                                                    ↓
【今回追加したシステム】                               ↓
  ┌─────────────────────────────────────────────────┐
  │  Obsidian(ローカル)                              │
  │    └─ Copilotプラグイン ←→ Ollama (localhost)    │
  │         ↓                      ↓                │
  │    チャットで記事作成    Qwen2.5 32B (19GB)       │
  │                                                   │
  │  Python スクリプト                                  │
  │    └─ 全記事品質チェック(5項目×10点満点)          │
  │    └─ ニュースから記事自動生成(30分間隔OK)       │
  └─────────────────────────────────────────────────┘

ポイントはすべてローカルで完結していること。データが外部に出ません。


🛠️ Step 1: ローカルAI(Ollama)のセットアップ

インストール(5分)

# Ollamaのインストール(Windowsはインストーラーをダウンロード)
# https://ollama.ai からダウンロードして実行するだけ

# モデルのダウンロード(32Bモデル、約19GB)
ollama pull qwen2.5:32b

これだけで、http://localhost:11434 にAPIサーバーが立ちます。

動作確認

# ターミナルで直接チャット
ollama run qwen2.5:32b
>>> こんにちは!医療AIについて教えてください

ここまでで、ローカルにAIが動く環境が完成です。


🛠️ Step 2: Obsidianと接続する

Copilotプラグインのインストール

  1. Obsidian → 設定 → コミュニティプラグイン → 閲覧
  2. Copilot」で検索してインストール
  3. 有効化

Copilotの設定

設定項目
Model タブ → Add Model
Model Name qwen2.5:32b
Provider Ollama
Base URL デフォルト(空欄)
CORS ☑ ON

Basicタブで Default Chat Modelqwen2.5:32b (Ollama) に変更。

💡 ハマりポイント:LM Studio vs Ollama

最初は LM Studio で接続しようとしたのですが、Copilotプラグインv3.2.5が POST /v1/responses というエンドポイントを使用しており、LM Studio v0.4.2が対応していませんでした。

[ERROR] Unexpected endpoint or method. (OPTIONS /v1/responses)

解決策: Ollamaに切り替えたら一発で動きました。Ollamaはバックグラウンドサービスとして常駐するため、常に接続可能です。

💡 ハマりポイント:GPUメモリの競合

LM StudioとOllamaを同時に起動すると、GPUメモリが足りなくなります。

Error: model requires more system memory (22.3 GiB) than is available (1.5 GiB)

解決策: 片方だけ使う。LM Studioはモデルを「Eject」してからOllamaを使用。


🛠️ Step 3: 全記事をAIに品質チェックさせる

ここからが本番です。25本のブログ記事を自動で品質レビューするPythonスクリプトを作りました。

スクリプト(article_quality_check.py)

import os, json, glob, time, urllib.request

BLOG_DIR = "path/to/src/content/blog"
OLLAMA_URL = "http://localhost:11434/api/generate"

articles = sorted(glob.glob(os.path.join(BLOG_DIR, "*.mdx")))

for i, path in enumerate(articles, 1):
    with open(path, "r", encoding="utf-8") as f:
        content = f.read()[:2000]  # 先頭2000文字

    prompt = f"""この記事を5項目で10点満点で採点してください。
1. 正確性  2. 読みやすさ  3. 構成  4. SEO  5. 実用性
改善提案も1つ出してください。

---
{content}"""

    payload = json.dumps({
        "model": "qwen2.5:32b",
        "prompt": prompt,
        "stream": False,
        "options": {"num_predict": 400, "temperature": 0.3}
    }).encode("utf-8")

    req = urllib.request.Request(
        OLLAMA_URL, data=payload,
        headers={"Content-Type": "application/json"}
    )
    with urllib.request.urlopen(req, timeout=180) as resp:
        result = json.loads(resp.read().decode("utf-8"))
        review = result["response"]

    # レポートに追記
    with open("review_report.md", "a", encoding="utf-8") as f:
        f.write(f"\n## {i}. {os.path.basename(path)}\n\n{review}\n\n---\n")

実行結果

25本の記事を自動チェック。約45分で完了しました。

レビュー例(一部抜粋):

## 人工呼吸器ウィーニング予測記事

正確性: 8/10 — 技術的に正確。Passkey表記に誤りあり
読みやすさ: 8/10 — 専門用語が多めだが構成は明確
構成: 9/10 — 論理的な流れ
SEO: 6/10 — タグが空欄。キーワード不足
実用性: 8/10 — コードサンプルが実践的
改善提案: 内部リンクを追加してSEO強化を

**人間がやったら丸一日かかる作業が、45分で完了。**しかも各記事に具体的な改善提案つき。


🛠️ Step 4: ニュースから記事を自動生成する

前回のシステムで溜まった148本のニュースを元ネタにして、記事を自動生成する仕組みも作りました。

スクリプト(auto_article_generator.py)

import os, json, glob, random, urllib.request

NEWS_DIR = "path/to/05_knowledge/news"
DRAFTS_DIR = "path/to/02_drafts/note"

# ランダムにニュース3本を選ぶ
news_files = random.sample(glob.glob(os.path.join(NEWS_DIR, "*.md")), 3)

news_text = ""
for f in news_files:
    with open(f, "r", encoding="utf-8") as fp:
        news_text += fp.read()[:800] + "\n---\n"

# AIにアイデア → 記事本文を生成させる
prompt = f"""以下のニュースを参考に、note記事を書いてください。
一般向け、1500文字、見出し3つ、ハッシュタグ付き。

{news_text}"""

# Ollama API呼び出し(省略:Step 3と同じパターン)

実際に生成された記事

# 医師9割が支持!「ユビー」の受診メモ機能が医療現場を変える

日々の生活の中で、体調不良を感じた時に頼りになるのが医療サービスです。
しかし、症状を正確に伝えることが難しいという経験は誰しもあるでしょう...

**ニュース3本を参照して、約5,000文字の記事を全自動で生成。**これを --loop フラグで30分間隔の自動実行もできます。

python auto_article_generator.py --loop  # 30分ごとに自動生成

🎉 結果:「情報を集めるだけ」から「記事を生み出す工場」へ

前回と今回の成果を合わせると、こんなシステムが完成しました。

工程 自動化前 自動化後
ニュース収集 手動で巡回 ✅ n8nが毎朝自動収集
ニュース要約 自分で読む ✅ AIが自動要約
記事のネタ出し 自分で考える ✅ AIがニュースから提案
記事の執筆 自分で書く ✅ AIが下書きを生成
品質チェック 自分で読み返す ✅ AIが5項目で自動採点
月額コスト ChatGPT Plus $20/月 ¥0(ローカル)

必要なもの

ソフト 用途 料金
Obsidian メモ・記事管理 無料
Ollama ローカルAIエンジン 無料
Qwen2.5 32B AIモデル 無料
n8n RSS収集の自動化 無料(セルフホスト)

ハードウェアはGPU搭載PC(VRAM 16GB以上推奨)が必要です。


まとめ

前回の「情報を集める」システムに、今回「情報を加工して記事にする」機能を追加しました。

ポイントは3つ:

  1. ローカルAI(Ollama)はセットアップが簡単。 ollama pull でモデルを入れて、Copilotで接続するだけ
  2. 品質チェックの自動化は費用対効果が高い。 25本のレビューが45分・無料
  3. プライバシーが守られる。 データが外部に出ないので、安心して使える

次回は ComfyUI でアイキャッチ画像のAI自動生成と、ポートフォリオサイトへの AIチャットボット埋め込み に挑戦する予定です。

技術的なツッコミや改善アイデア、ぜひコメントでお待ちしています!


📢 お知らせ

医療×AI×自動化をテーマに記事を書いています:

フォロー・LGTMいただけると励みになります! 🙏

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?