Комментарии 12
зачем? Обсидиан сам по себе строит карты и прочее - подключаете mcp и радуетесь жизни
Вопрос по факту,но все же мне есть,что сказать.Граф-вью и Canvas показывают связи, которые уже есть, но не находят того, чего не хватает: сироты, дубли тем под разными тегами, какие заметки стоило бы связать, про что собственно я и писал в статье.Это анализ содержания, а не визуализация структуры.
Про MCP,это рабочая альтернатива,но для меня было пару нюансов. Разница в трёх вещах: плагин может работать полностью локально через Ollama (ничего не уходит в облако), даёт специализированный пайплайн вместо чата (инкрементальный индекс, кластеризация, отчёт в Canvas), и ставится в два клика без настройки сервера. MCP мощнее и гибче, но это другой уровень входа,и не всегда среднестатистическому пользователю Obsidian хочется с этим возиться.
Хотя соглашусь,что для кого-то MCP закроет задачу полностью и даже лучше.
Делаю аи приложение для работы с доками на локальных моделях, почти все перечисленные грабли собрал и решения примерно такие же)
Могу добавить, что локальные модели ещё могут не только циклы выдавать, но писать ответ в секцию reasoning и наоборот. С max tokens свои приколы. Запрошенный max tokens должен покрывать основной ответ и thinking токены, число которых неизвестно. А все это вместе input tokens + max tokens должно укладываться в контекстное окно модели. А если нет - либо получаем ошибку от провайдера, либо обрезку ответа
Честно,пока глубокого опыта с локалками нет, работал в основном через OpenRouter, так что на reasoning/max_tokens в полный рост не наступал. Но как раз собираюсь поиграться с локальными моделями, так что ваша заметка про thinking-токены очень в тему, заберу на будущее. А поделитесь, как вы сами с этими reasoning-токенами справляетесь? Интересен рабочий подход из первых рук.
Придумал только детектить косячные ответы и делать ретрай. Косячные ответ это пустой или обрезанный по max tokens, там вроде в поле stop reason будет length, циклы (детектил встроенной в vllm функцией, на openrouter такого нет, придется самому делать). Детекциию протечек управляющих токенов нужно делать под модель, у них разные токены, у кого-то think, у кого-то thought, у кого то протекает Тул колл | tool | - что то вроде этого.
С опенроутер ещё нужно быть осторожным. Во первых, он не до конца openai compatible - нужно по документации уточнять что он принимает и как обрабатывает. Ризонинг там вроде включается через extra body. Во-вторых, он перенаправляет запросы сторонним провайдерам. А их поведение не гарантированно. Запрашиваешь ризонинг, может прислать без ризонинга
Если делаешь агента, который в цикле вызывает тулы, то везде дефолтное поведение - есть тул колл, цикл продолжается, нет тул колла - цикл завершается. Локальная модель может написать в content : вызову тул... И не вызвать его в секции тул кола. Цикл закрывается. Никак особо не решается, ответ модели формально кокорректный.
Спасибо за статью, очень в тему пришлась. У меня похожая ситуация — Obsidian Vault на несколько тысяч заметок (архив переписки с ChatGPT за пару лет, плюс рабочие документы), и я как раз сейчас руками собираю похожий пайплайн: embeddings + кластеризация + Qdrant для семантического поиска через локального агента.
у меня локальная модель (Qwen3.6-35B) тоже норовит обернуть ответ в markdown с преамбулой вместо чистой структуры, и наивный JSON.parse валился постоянно. Возьму вашу функцию извлечения JSON один в один, она явно прошла через те же грабли что и я.
Не все понял, ибо далеко не программист, но главное чтобы работало)
Рад, что функция пригодилась,она и правда выстрадана, LLM врёт про чистый JSON с завидным постоянством. Любопытно, что мы пошли разными путями: у вас классический RAG-стек ,а я кластеризацию отдаю прямо LLM в reduce-фазе, без отдельного векторного хранилища. Мой путь дешевле в инфраструктуре, но хуже масштабируется на действительно больших объёмах и не даёт семантического поиска как побочки. На ваших тысячах заметок embeddings-подход, наверное, выиграет. Расскажете потом, как Qdrant себя поведёт,любопытно было бы тоже в этом покопаться
Очень актуальная разработка, спс. Я себе поставлю - доработаю. В ближайшее время. Мне прямо этого функционала и не хватало. У меня pipeline стоит Агенты практически все в заметки пишут. Но реального графа не было. Поиск по факту не работал. Если есть интерес могу своими MCP obsidian поделится или совместно что-то сделать.
У меня вообще свое решение по этому поводу: https://github.com/AI-Guiders/agent-notes-mcp
В купе с https://github.com/AI-Guiders/kb-public
Делалось тоже с прицелом на локальные LLM, но у меня они дико медленно работают
Проблема огромных данных там решена через трехуровневую архитектуру памяти и роутинг Создано с учётом того, что пользуются этим агенты, поэтому они там first class citizens :) Возможно, будет интересно Я все хочу статью на хабр написать про свой стек, но никак не соберусь

Как заставить LLM проанализировать хранилище из тысяч заметок, которое не влезает в контекст