AIパーソナル・ラーニング
と実践的なガイダンス

オブシディアンノートにおける言語モデルの効果的な使用

今日、Hacker NewsでChatGPTと統合するObsidianの新しいプラグインについての記事を読んだ。このようなツールは市場にたくさんあり、人々がObsidianに様々な方法で適用しているのを見て嬉しく思っています。一部のコメントでは、このツールは自分で行う作業の代わりになると感じているようですが、私はこのツールは実際に斬新で素晴らしい機能を提供してくれると思います。

 

注釈付きダイアログ

 


おそらく、最も直接的で最も重要なことは、ノートの内容と対話をすることだろう。質問をして洞察を得るのだ。このモデルを直接ノートに向けることができれば、すべてがうまくいく。しかし、ほとんどのモデルは一度にすべてを処理することはできない。

質問があるとき、すべてのノートが関連するわけではありません。Obsidianは検索機能を提供していますが、それは正確な単語やフレーズを検索するだけで、私たちが検索する必要があるのは概念です。そこで埋め込みインデックスの登場です。インデックスの作成は非常に簡単です。

 

インデクサーの構築

 

Obsidianプラグインを作成するとき、起動時に特定のアクションを実行し、Obsidianでコマンドを実行したり、ノートを開いたり、他のアクティビティを実行したときに他のアクションを実行するように設定することができます。そのため、プラグインにあなたのノートをすぐに理解させ、インデックスを再度生成する必要がないように進捗を保存させる必要があります。ノートのインデックスを作成するコードサンプルを見てみましょう。ここでは、[ラマ指数], [ラングチェーンも素晴らしい選択だ。

import { VectorStoreIndex, serviceContextFromDefaults, storageContextFromDefaults, MarkdownReader } from "llamaindex" ;

const service_context = serviceContextFromDefaults({ chunkSize: 256 })
const storage_context = await storageContextFromDefaults({ persistDir: "./storage" });

const mdpath = process.argv[2];
const mdreader = new MarkdownReader();
const thedoc = await mdreader.loadData(mdpath)

まず、インメモリ・データウェアハウスを初期化する必要がある。これはLlama Indexに付属しているストレージ機能だが、Chroma DBもよく使われる選択肢だ。2行目のコードは、インデックス内のすべてを永続化したいことを示している。Llama IndexはMarkdownを理解するので、コンテンツを正しく読み込んでインデックスを作成することができます。また、PDFやテキストファイル、Notionドキュメントなどもサポートしています。単語を保存するだけでなく、その意味やテキスト内の他の単語との関係も理解します。

await VectorStoreIndex.fromDocuments(thedoc, { storageContext: storage_context, serviceContext: service_context });

Langchainは、少し遅いですが、ローカルでこれを行う代替手段も提供しています。また、クラウド上の超高速セルフホストインスタンスでこれらのサービスを使用し、インデックス作成が完了したらインスタンスをシャットダウンすることもできます。

 

検索ノート

 

Obsidianはすべてのファイルをリストすることができるので、このプロセスを何度も実行することができます。データを永続化しているので、操作は1回で済みます。では、どのように質問するのでしょうか?ノートの関連する部分に行き、それをモデルに渡し、その情報を使って答えを得るコードが必要です。

const storage_context = await storageContextFromDefaults({ persistDir: "./storage" });
const index = await VectorStoreIndex.init({ storageContext: storage_context });
const ret = index.asRetriever();
ret.similarityTopK = 5
const prompt = process.argv[2];
const response = await ret.retrieve(prompt);
const systemPrompt = `次のテキストを使用して、プロンプトに対する答えを考えてください:${response.map(r => r.node.toJSON().text).join(" - ")}`.

このコードでは、処理された内容を使ってインデックスを初期化している。Retriever.retrieve`の行は、ヒントを使用して、関連するすべてのノートのスニペットを検索し、テキストを返します。ここでは、最初の5つのベストマッチを使用するように設定している。つまり、ノートから5つのテキストスニペットを取得することになる。この生データを使って、質問をしたときにモデルがどのように答えるべきかをガイドするシステムプロンプトを生成することができる。

コンスト オラマ = new Ollama().
ollama.setModel("ollama2");
ollama.setSystemPrompt(systemPrompt);
const genout = await ollama.generate(prompt);

次に、モデルを使い始めた。数日前に[ ]で作ったモデルを使った。npmをライブラリに追加した。モデルをラマ2コマンド `ollama pull llama2` で私のマシンにダウンロードされた。いろいろなモデルを試してみて、自分に最適な答えを見つけてほしい。

迅速な答えを得るためには、小さなモデルを選ぶべきである。しかし同時に、すべてのテキスト断片を保持するのに十分な大きさの入力コンテキストサイズを持つモデルも選ぶべきである。私は256トークンのテキスト断片を5つまで設定しました。システムのプロンプトには、私たちのテキスト断片が含まれています。質問をすると、数秒以内に答えが返ってきます。

素晴らしい!これでObsidianプラグインが適切に答えを表示できるようになりました。

 

他に何ができる?

 

また、テキストの内容をシンプルにしたり、テキストにマッチする最適なキーワードを見つけてメタデータに追加したりすることで、ノートをよりうまくリンクさせることもできます。役に立つ質問と回答を10個作って、[ ]に送ってみた。アンキ]これらの異なる目的を達成するために、さまざまなモデルやプロンプトを試してみるのもよいでしょう。タスクの必要性に基づいて、合図やモデルの重みを変えることはとても簡単です。

この投稿が、Obsidianや他のメモツール用の次の素晴らしいプラグインを開発するためのヒントになれば幸いです。をご覧ください。ollama.com]ご覧の通り、最新のネイティブAIツールを使うのは簡単なので、あなたの創造性を見せてほしい。

AIイージー・ラーニング

AIを始めるための素人ガイド

AIツールの活用方法を、低コスト・ゼロベースから学ぶことができます。AIはオフィスソフトと同様、誰にとっても必須のスキルです。 AIをマスターすれば、就職活動で有利になり、今後の仕事や勉強の労力も半減します。

詳細を見る
無断転載を禁じます:チーフAIシェアリングサークル " オブシディアンノートにおける言語モデルの効果的な使用

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語