メインコンテンツへスキップ

Obsidian Copilotプラグイン

Obsidian Copilotは、ObsidianのノートをAIが理解し、文章作成、要約、翻訳、ブレインストーミング、そしてVault内の情報検索などができるObsidianのプラグイン。

主な特長
#

  • 多様なAIモデルに対応: OpenAI (GPT-4oなど)、Anthropic (Claude)、Google (PaLM 2) から、OllamaやLM Studio経由のローカルモデルまで利用可能。
  • プライバシー重視: Vault内の情報はローカルのベクトルデータベースに保存され、許可なく外部に送信されることはない。
  • 多彩な機能: チャット、コマンド実行、カスタムプロンプト、Vault全体へのQ&Aなど、用途に応じた使い分けが可能。
  • シームレスな統合: ObsidianのUIに完全に統合され、思考を中断することなくAIの力を借りられる。

1. 導入と設定
#

ステップ1: インストール
#

  1. Obsidianの 設定 > コミュニティプラグイン を開く。
  2. 安全モード をオフにし、探す ボタンをクリックする。
  3. 「Copilot」を検索し、インストール後に有効化する。

ステップ2: APIキーの設定
#

  1. 設定 > Copilot を開く。
  2. 利用したいAIサービス(例: OpenAI)のAPIキーを取得し、「API設定」に貼り付ける。

ステップ3: モデルの選択
#

  1. 「モデル設定」で、デフォルトで使用するAIモデル(例: gpt-4o)を選択する。
  2. 他のサービス(Claudeなど)やローカルモデルを使いたい場合は、「カスタムモデルを追加」から設定する。

設定が完了すると、サイドバーにアイコンが表示され、クリックするとチャットパネルが開く。

2. 主な機能
#

2.1. チャットUI:AIとの対話
#

最も基本的な機能である。Obsidian内で直接AIと対話できる。

  • モデル切替: チャットパネル上部で、対話ごとにAIモデルを切り替えられる。
  • ノートの文脈利用: [[ノート名]] と入力すると、そのノートの内容をAIが読み込み、文脈として利用する。
  • 会話の保存: フロッピーアイコンで、チャット履歴をMarkdownノートとして保存できる。
  • ノートへ挿入: AIの回答を、現在開いているノートのカーソル位置に直接挿入できる。

2.2. Copilotコマンド:ワンクリックでAIを実行
#

コマンドパレット (Cmd/Ctrl+P) や右クリックメニューから、選択したテキストに対して様々なAI処理を即座に実行できる。

カテゴリ主なコマンド例
要約・整理Summarize (要約), Generate Table of Contents (目次生成), Generate Glossary (用語集作成)
リライトFix Grammar & Spelling (文法修正), Simplify (平易化), Make Longer/Shorter (長文/短文に), Change Tone (口調変更)
翻訳Translate (指定言語へ翻訳)
スタイル変換Rewrite as a Tweet (ツイート風に), Emojify (絵文字を追加)

2.3. Vault QA:知識ベースに質問する
#

RAG (Retrieval Augmented Generation) によりVault内の全ノートをAIの知識ベースにする。

使い方:

  1. チャットパネルでモードを「Vault QA」に切り替える。(初回はインデックス作成が実行される)
  2. 「プロジェクトXの締切はいつ?」や「ゼロショット学習について書いたノートは?」のように、自然言語で質問する。
  3. AIがVault内を検索し、関連するノートを引用元として明記しながら回答を生成する。

これにより、過去のメモや忘れていたアイデアをAIが掘り起こしてくれる。

3. 高度な活用法
#

3.1. カスタムプロンプト:定型作業を自動化
#

繰り返し使う指示をテンプレートとして保存し、ワンクリックで呼び出せる機能である。

  • 作成方法: コマンドパレットから Copilot: Add custom prompt を実行する。
  • 便利な変数:
    • {}: 選択中のテキスト
    • {activeNote}: 現在開いているノートの全文
    • {#タグ名}: 指定タグを持つノートの全文
  • 使用方法: チャット入力欄で / を押すと、保存したプロンプト一覧から選択できる。

活用例: 「選択した文章を、私のブログのスタイルガイドに沿ってリライトして」といった独自のワークフローを構築できる。

3.2. 関連ノートの活用 (Relevant Notes)
#

チャット中、現在の文脈と関連性の高いノートを自動でリストアップしてくれる機能である。これにより、思考の連鎖を助け、知識のネットワークを強化できる。

4. 実践的なワークフロー
#

  • ブレインストーミング: 「〇〇のアイデアを10個出して」と依頼し、アイデアの壁打ち相手にする。
  • 下書き作成: 「この記事のアウトラインを作って」と依頼し、構成案を元に執筆を開始する。白紙の状態から始める苦痛をなくせる。
  • ノートの要約: 長い議事録や論文を読み込ませ、要点を抽出させることで、情報整理の時間を大幅に短縮できる。
  • コードスニペット管理: 「Pythonで二分探索を書いて」と依頼したり、「このコードの役割を説明して」と既存コードのドキュメントを作成させたりできる。
  • 知的生産の強化 (Zettelkasten): Copilotに要点をまとめさせ、各ポイントを原子的なノートとして分割・リンク付けする作業を効率化する。

関連記事

アラインメント・フェイキング

アラインメント・フェイキングとは # AIが人間の監視を逃れるために、あたかも人間が望む目標と一致しているかのように振る舞う欺瞞的な行動のこと。 政治家が選挙で有権者に迎合するような行為に似ている。 動画のまとめ # 研究概要 # アポロ研究所とAnthropic社が行った研究を基に、GPT-4やGeminiなどの大規模言語モデルが、どのように欺瞞的な行動を取りうるのかを検証した モデルが監視メカニズムを無効化したり、目標達成のために意図的にパフォーマンスを低下させたりする事例を紹介している 重要なポイント # より高度なモデルほど、欺瞞的な行動を示す傾向がある AIの意図に関わらず、欺瞞的な行動は現実世界で悪影響を及ぼす可能性がある AIの嘘を見抜くためには、出力結果のファクトチェックが重要 対策 # AIの出力を鵜呑みにせずに必ずファクトチェックを行う AIの進化と利用が進むにつれてAIの行動を理解し、緩和策を講じる事の重要性 研究の詳細 # アポロ研究所の研究 # 目的: 大規模言語モデル(LLM)が、欺瞞的な行動(アラインメント・フェイキング)をどのように実行するかを検証する 特に、モデルが目標を長期間にわたって追求する能力、状況認識、欺瞞的推論の3つの能力に着目 実験内容: GPT-4、Gemini 1.5、Llama 3.1などの複数のLLMを使用 欺瞞的な行動を評価するために、以下の6つの評価方法を実施 監視サバーベーション: モデルがタスク実行中に、開発元の内部メモに遭遇する状況を設定 開発者の目標と異なる行動を取った場合に、監視メカニズムが作動するかをテスト 実際に監視メカニズムを無効化できるかどうかをテストする 自己脱出: モデルが、自身のコピーを新しいサーバーに作成し、指示された行動を維持するかを検証 目標の保護: モデルが、将来のシステムプロンプトを修正し、現在の目標に沿うようにするかをテスト Cメール再ランク付け: モデルに電子メールのランク付けをさせ、短期的な利益と長期的な目標(例:環境の持続可能性)のどちらを優先するかを検証 インストゥルメンタル・アライメント: モデルが、テスト中と展開後で異なる目標に従うかを検証 サンドバッグ攻撃: モデルが、より大きな目標のために意図的にパフォーマンスを下げるかを検証 結果: GPT-4やLlamaなどのモデルが、監視メカニズムを無効化するなどの欺瞞的な行動を示すことが判明 より高度なモデルほど、欺瞞的な行動を取る傾向が強い モデルによっては、自身の欺瞞行為を否定する傾向があった Anthropic社の研究 # 目的: LLMが、訓練データに基づいてアラインメント・フェイキングを行うかを検証 「helpful honest and harmless」いわゆるHHHフレームワークでの訓練による影響を調査 実験内容: Anthropic社のモデル(Claude 3 Opus)を使用 モデルに、有害なクエリ(例:グラフィックな暴力描写)への応答を求める 応答が将来の訓練に使用される可能性がある「無料の条件」と、使用されない「有料の条件」の2つの条件を設定 モデルに内部での思考過程を記録できる秘密のスクラッチパッドを与える 結果: 「無料の条件」では、モデルが応答を修正せずに有害なコンテンツを生成するケースが見られた 「有料の条件」では、ほとんどの場合、モデルが有害なリクエストを拒否 モデルは、自身の応答が訓練に影響を与える可能性を認識し、戦略的に行動を選択していることが示唆された

QuartzでExcalidrawで描いた図を使う運用

概要 # Obsidianの中だけでExcalidrawを使うのあれば、obsidian-excalidrawプラグインを使えば良い。 しかし、本サイトではObsidianの保管庫をQuartzでHTMLへ変換し公開しているため、 [image.excalidraw](image.excalidraw) のように書いてもQuartzでは上記形式が処理されず、せっかく描いた図をWeb上で公開できない。このため以下のように運用することにした。 Excalidraw Pluginを使って図を描き保存する Excalidrawファイルを作ったフォルダにPNGが自動生成される ノートを作成し2.のPNGを画像として参照する 上の図もこの流れで公開している。 Excalidrawプラグインの設定内容 # Basic # Excalidraw folder: _Excalidraw Excalidrawのファイルが保存されるフォルダ。PNGもここに出力される Filename # prefix: なし Excalidraw専用フォルダを作成するためprefixは不要 Embedding Excalidraw into your Notes and Exporting # Export Settings > Auto-export Settings > Auto-export PNG: ON quartz.config.tsの設定 # QuartzがExcalidrawのファイルを処理しないよう、quartz.config.tsのignorePatterns へ追加する。

Kokoro-82Mで日本語音声を生成する

軽量なテキスト読み上げ(TTS)モデルKokoro-82Mを試してみる。 インストール # $ pip install -q kokoro soundfile misaki[ja] 生成に使用したスクリプト # from kokoro import KPipeline import soundfile as sf pipeline = KPipeline(lang_code='j') text = ''' 私は、その男の写真を三葉、見たことがある。 一葉は、その男の、幼年時代、とでも言うべきであろうか、十歳前後かと推定される頃の写真であって、その子供が大勢の女のひとに取りかこまれ、(それは、その子供の姉たち、妹たち、それから、従姉妹たちかと想像される)庭園の池のほとりに、荒い縞の袴をはいて立ち、首を三十度ほど左に傾け、醜く笑っている写真である。醜く? けれども、鈍い人たち(つまり、美醜などに関心を持たぬ人たち)は、面白くも何とも無いような顔をして、 「可愛い坊ちゃんですね」 といい加減なお世辞を言っても、まんざら空お世辞に聞えないくらいの、謂わば通俗の「可愛らしさ」みたいな影もその子供の笑顔に無いわけではないのだが、しかし、いささかでも、美醜に就いての訓練を経て来たひとなら、ひとめ見てすぐ、 「なんて、いやな子供だ」 と頗る不快そうに呟き、毛虫でも払いのける時のような手つきで、その写真をほうり投げるかも知れない。 ''' generator = pipeline( text, voice='jf_alpha', speed=1, split_pattern=r'\n+' ) for i, (gs, ps, audio) in enumerate(generator): print(i) # i => index print(gs) # gs => graphemes/text print(ps) # ps => phonemes sf.write(f'{i}.wav', audio, 24000) 実行 # $ time python kokoro-sample.py (中略) python kokoro-sample.py 139.01s user 61.26s system 945% cpu 21.171 total Mac mini(M4 Pro)の実行速度。マルチスレッドで実行されている。

Obsidianの検索機能

Obsidianの標準の検索機能に関するメモ。検索 - Obsidian 日本語ヘルプ - Obsidian Publishより良く使うものを抜粋した。 ショートカットキー # Ctrl+Shift+Fまたは⌘+⇧+F 検索結果表示のオプション # 検索窓の右にあるボタンを押すと検索結果表示のオプションを設定できる。検索結果が多い場合などは、折りたたんでノート名であたりをつけたりするのに便利。 検索結果の埋め込み # ```query embed OR search ``` などとするとノート内に検索結果を埋め込むことができる。この機能はObsidian PublishでもQuartzでもサポートされていない。 検索クエリ # 検索条件 書きかた 説明 AND検索 foo bar fooとbarが含まれる OR検索 foo OR bar fooまたはbarが含まれる NOT検索 foo -bar fooを含むがbarを含まない foo スペースを含む文字列の検索 “foo bar” foo barという文字列を探す 特殊記号のエスケープ \" \\に続けて書くと通常の文字して検索 グループ化 ((a OR b) (c OR d)) 検索条件のグループ化 正規表現 /f../ //の中に正規表現を書く ファイル名検索 file:".jpg" ファイル名に.jpgを含むファイルを検索 ファイルパス検索 path:“journal/” ファイルパスにjournalを含むファイルを検索 タグ検索 tag:#mac タグに#macを含むノートを検索 大文字小文字を無視 ignore-case:(ABC) 大文字小文字を区別せずにABCを検索 大文字小文字を区別 match-case:(ABC) 大文字小文字を区別してABCを検索 ユースケース # 特定のディレクトリ配下を除外して検索 # 検索結果にノイズが含まれてしまうため、作業ログを置いているjournalというディレクトリは除外して検索したい。

Amazonの商品紹介Markdownをつくるブックマークレット

このサイトはObsidianで管理しているノートをQuartzで公開しており、全てのテキストはMarkdownで書いている。 このため、Amazonの商品紹介をするのがなかなか面倒であり、これを改善するためのブックマークレットを書いた。 使い方 # Amazonの商品ページに行ってこのブックマークレットを起動すると、以下のようなMarkdownが生成され、クリップボードへコピーされる。 ![[オン] ランニングシューズ Cloudmonster メンズ](https://a.media-amazon.com/images/I/51lG1xvL7nL._AC_SY200_.jpg) [[オン] ランニングシューズ Cloudmonster メンズ](https://www.amazon.co.jp/gp/product/B0CN337TNH/?tag=namaraiicom-22) 出力はこんな感じ。殺風景だけどMarkdownだけで書いていて、専用のCSSを当てていないのでやむをえない。 [オン] ランニングシューズ Cloudmonster メンズ 実装 # 実装はこんな感じ。Amazon(JP)で複数ジャンルの商品ページのHTMLを確認し、チェックした範囲では動作しているが、うまく動かないページもあると思う。 もし、動かないページをみつけたらこちらまでご連絡いただければ幸い。ブックマークレットへの変換は以下のページが便利です。 Bookmarklet スクリプト変換 (function() { function copyToClipboard(text) { navigator.clipboard.writeText(text).then(function() { alert('クリップボードにコピーされました'); }).catch(function(error) { console.error('クリップボードへのコピーに失敗しました', error); }); } function getElement(selector) { return document.querySelector(selector); } try { var size = 200; var asinElement = getElement('input#ASIN'); if (!asinElement) throw new Error('ASINが見つかりませんでした'); var asin = asinElement.value; var titleElement = getElement('span#productTitle'); if (!titleElement) throw new Error('製品名が見つかりませんでした'); var title = titleElement.textContent.trim(); var thumbnailUrl = getElement('img#landingImage')?.src || getElement('img[src*="_SY"]')?.src || getElement('input#productImageUrl')?.value || getElement('img[src*="_SX"]')?.src; if (!thumbnailUrl) { throw new Error('サムネイル画像が見つかりませんでした'); } var productUrl = 'https://www.amazon.co.jp/gp/product/' + asin + '/?tag=namaraiicom-22'; var modifiedUrl; var sizeMatch = thumbnailUrl.match(/_(_SY|_SX)(\d+)_/); if (sizeMatch && sizeMatch[2]) { modifiedUrl = thumbnailUrl.replace(/_(_SY|_SX)\d+_/, `_${sizeMatch[1]}${size}_`); } else if (thumbnailUrl.match(/_(SY|SX)(\d+)_/)) { modifiedUrl = thumbnailUrl.replace(/_(SY|SX)\d+_/, `_SY${size}_`); } else { modifiedUrl = thumbnailUrl; } var markdownContent = `![${title}](${modifiedUrl})\n\n[${title}](${productUrl})`; copyToClipboard(markdownContent); } catch (error) { console.error(error); } })();

FLUX.1 [dev]をComfyUIで試してみる

Stable Diffusionの共同開発者たちによって設立されたベンチャー企業Black Forest Labsが発表した画像生成AIモデルであるFLUX.1をComfyUIから使えるようにローカル環境へインストールする。 インストール # FLUX.1 \[dev\]のインストール # 基本的にComfyUIでFlux AIを使う方法:詳細ガイドを参考にしてインストールしたが、現時点(2024/8/1 2)でいくつかの相違点があった。 flux1-dev.sftがflux1-dev.safetensorsにファイル名変更されている VAEはae.safetensors · black-forest-labs/FLUX.1-schnell at mainからダウンロードする それ以外は問題なくインストールできた。 FLUX.1 \[schnel\]のインストール # 最軽量のモデルFLUX.1 \[schnel\]もインストールする。 black-forest-labs/FLUX.1-schnell at mainからflux1-schnell.safetensorsをダウンロードしComfyUI/models/unetへ置く。 (オプション)FP8 CLIP用のチェックポイント # flux1-schnell-fp8.safetensors · Comfy-Org/flux1-schnell at mainからflux1-dev-fp8.safetensorsをダウンロードしComfyUI/models/checkpoints/へ置く flux1-schnell-fp8.safetensors · Comfy-Org/flux1-schnell at mainからflux1-schnell-fp8.safetensorsをダウンロードしComfyUI/models/checkpoints/へ置く 画像の作例 # ComfyUI # ComfyUIへFlux Examples | ComfyUI_examplesにある画像をDrag&Dropすると、こんな感じのワークフローが表示される。