An old robot working as a librarian, retrieving books in an ancient, dusty library - by Dalle3

Ever since my Ph.D. days, I’ve made it a habit to delve into prior literature before making any assertive claims. My digital-garden serves as my personal library, housing notes frombooks andarticles I’ve read, and even the occasionalpodcast. The real magic, however, lies in tying these notes together, creating an intricate web of knowledge - a concept beautifully articulated by Sönke Ahrens in his book How to take smart notes.

While penning a note, I always keep one eye on my past musings. My workflow might be far from flawless, but it works for me. Even though it’s generally advised to jot down notes in your own words, I find myself frequently highlighting key points – particularly when reading on my Kindle at night or using Readwise Reader on the go.

My workflow allows me to gather all these highlights and automatically transform them into markdown notes. These are then directly sent to my Obsidian vault – my first port of call when researching a new topic. This vault serves as a well-curated knowledge base that continually expands as I explore new subjects of interest.

Previously, I would navigate through this treasure trove using Obsidian’s built-in search and finder tools – usually sufficient for specific queries. However, for those times when my mind craves a more exploratory search, Omnisearch proves invaluable.

Despite having advanced tools like Omnisearch at my disposal, there are instances when I can’t locate what I’m searching for. That’s when my new ally, a Retrieval Augmented Generation (RAG) system built atop my Obsidian vault, comes into play. This Language Model can retrieve all my personal and literature notes, generate answers to my queries, and even cite sources. It’s like having a conversation with my second brain in plain English!

The idea of integrating a RAG into my notes has intrigued me since I began researching RAGs at work. However, I didn’t want the hassle of maintaining another system for personal use or relying on an external provider like OpenAI. Thankfully, the flourishing Obsidian community offers numerous open-source plugins built with Language Models as a backend – one such plugin being Copilot.

Copilot enables interaction with your notes using external providers like Anthropic or OpenAI, or even Language Models running on your local machine. In my case, I interact with local Language Models using Ollama – an incredibly convenient tool that eliminates the need to manage dependencies, especially on Apple Silicon devices.

With Ollama, accessing open-source models is as simple as executing a command in the terminal – ollama run llama3. The chosen model is then readily accessible via Copilot.

To use Ollama as the backend, you must initiate a dedicated Ollama server for Obsidian to ensure that the Language Model doesn’t accept requests from other services.

OLLAMA_ORIGINS=app://obsidian.md* ollama serve

While I’d appreciate more options to interact with the RAG via UI, I can always modify the plugin code since it’s written using LangChain. Copilot performs admirably in retrieving sources and generating responses; however, its effectiveness hinges on the quality of the retrieval mechanism. Incorporating hybrid search (keyword search plus embeddings) might enhance Copilot’s Vault QA capabilities. Nonetheless, if you’re an Obsidian user seeking to elevate your note-taking game, Copilot is definitely worth a shot.