Итак, я ж говорил, что в канале буду писать и про факапы в том числе, так что вот вам прекрасный пример проеба 6 часов.
Цель была простой: хотел поставить себе локальный вариант Claude Code, затестить на одной задачке как раз, которая мне нужна не для работы и рассказать об этом здесь, может еще конфигурацией поделиться.
На поверхности и реализация выглядела несложной:
- ставим Claude Code
- ставим Ollama и скачиваем qwen3.5:4b и qwen3.5:9b
- ставим mcp для подключения к Ollama
- отучиваем Claude ходить в интернет - добавляем в конфиги Claude Code localhost, где живет Ollama, благодаря mcp-серверу
- скачиваем и ставим глобально пачку базовых mcp-серверов (для obsidian, для чтения/записи файловой системы, для серфа в интернете)
- добавляем эти mcp-сервера в конфигу для Claude Code
- профит.
В реальности все стало ломаться буквально с третьего шага:
1️⃣ чтобы Claude перестал просить авторизацию, сначала я создал файл с параметрами в корне claude, но он их проигнорировал, так что это решилось быстро - через environmentVariables, достаточно заменить путь к Antropic на localhost, на котором живет Ollama (по факту Claude думает, что обращается к Opus, а идет к нам локально в LLM)
2️⃣ со скачиванием LLM никаких проблем не возникло, разве что первый запуск всегда небыстрый, даже небольших моделей
3️⃣ в этот момент я подумал, что хорошо бы добавить еще и подключение к облачному DeepSeek (дешево ведь), и нашел, как сделать удобный переключатель, но для этого пришлось удалить mcp-сервер ollama и написать отдельный скрипт для прокси, который будет перенаправлять вызовы либо на одну из 2-х локальных моделей, либо в облачный DeepSeek.
4️⃣ безо всяких других инструментов на этом этапе все завелось прекрасно, но, когда я начал подключать mcp-сервера для работы с файлами и Obsidian - все пошло по пизде...
5️⃣ сначала я не мог добавить в глобальные параметры мои mcp-сервера (он их просто не видел), затем, когда я их добавил в корневой папке claude в параметры инициализации - он их хотя бы нашел и поднял
6️⃣ потом выяснилось, что формат, в котором принимает запрос Ollama, отличается от того формата, который выплевывает из себя Claude (да-да, об этом вам с рилсах не скажут, пидоры). Самый простой пример на картинке, но он явно не единственный.
7️⃣ окей, я явно в прокси исправил эту ошибку и по идее запросы стали уходить, но ответы не распознавались. Как выяснилось - по той же самой причине несовпадения форматов. К тому же расхождения форматов даже усугубились: параметр thinking, reasoning effort, tools - все это надо дорабатывать в моем прокси, чтобы просто совместить Ollama с Claude Code.
Да, тут можно было бы вернуться к обычному mcp-серверу Ollama, он то наверняка из коробки умеет все это обрабатывать, но мне хотелось самому переключать-выбирать модели локально, либо выбирать облачный DeepSeek, а это только ручками.
В итоге все вроде бы заработало, но с сильным хрустом и это касается только чтения информации с диска и с Obsidian - это я еще не дошел до того, чтобы там что-либо редактировать с помощью Claude.
И вот я подумал, что стоит эту конфигурацию отложить нафиг и сел думать над другим вариантом.
Так что сегодня вместо этого попробую сделать аналогичный процесс с помощью Hermes, а не Claude Code - плюс в том, что на apple m2pro он будет значительно быстрее, поскольку поддерживает MLX.
В любом случае - я пока что экспериментирую и пытаюсь найти удобный для себя вариант, не замыкаясь на готовые облачные решения (а то мало ли что).
@nobrstories #LLM
Цель была простой: хотел поставить себе локальный вариант Claude Code, затестить на одной задачке как раз, которая мне нужна не для работы и рассказать об этом здесь, может еще конфигурацией поделиться.
На поверхности и реализация выглядела несложной:
- ставим Claude Code
- ставим Ollama и скачиваем qwen3.5:4b и qwen3.5:9b
- ставим mcp для подключения к Ollama
- отучиваем Claude ходить в интернет - добавляем в конфиги Claude Code localhost, где живет Ollama, благодаря mcp-серверу
- скачиваем и ставим глобально пачку базовых mcp-серверов (для obsidian, для чтения/записи файловой системы, для серфа в интернете)
- добавляем эти mcp-сервера в конфигу для Claude Code
- профит.
В реальности все стало ломаться буквально с третьего шага:
1️⃣ чтобы Claude перестал просить авторизацию, сначала я создал файл с параметрами в корне claude, но он их проигнорировал, так что это решилось быстро - через environmentVariables, достаточно заменить путь к Antropic на localhost, на котором живет Ollama (по факту Claude думает, что обращается к Opus, а идет к нам локально в LLM)
2️⃣ со скачиванием LLM никаких проблем не возникло, разве что первый запуск всегда небыстрый, даже небольших моделей
3️⃣ в этот момент я подумал, что хорошо бы добавить еще и подключение к облачному DeepSeek (дешево ведь), и нашел, как сделать удобный переключатель, но для этого пришлось удалить mcp-сервер ollama и написать отдельный скрипт для прокси, который будет перенаправлять вызовы либо на одну из 2-х локальных моделей, либо в облачный DeepSeek.
4️⃣ безо всяких других инструментов на этом этапе все завелось прекрасно, но, когда я начал подключать mcp-сервера для работы с файлами и Obsidian - все пошло по пизде...
5️⃣ сначала я не мог добавить в глобальные параметры мои mcp-сервера (он их просто не видел), затем, когда я их добавил в корневой папке claude в параметры инициализации - он их хотя бы нашел и поднял
6️⃣ потом выяснилось, что формат, в котором принимает запрос Ollama, отличается от того формата, который выплевывает из себя Claude (да-да, об этом вам с рилсах не скажут, пидоры). Самый простой пример на картинке, но он явно не единственный.
7️⃣ окей, я явно в прокси исправил эту ошибку и по идее запросы стали уходить, но ответы не распознавались. Как выяснилось - по той же самой причине несовпадения форматов. К тому же расхождения форматов даже усугубились: параметр thinking, reasoning effort, tools - все это надо дорабатывать в моем прокси, чтобы просто совместить Ollama с Claude Code.
Да, тут можно было бы вернуться к обычному mcp-серверу Ollama, он то наверняка из коробки умеет все это обрабатывать, но мне хотелось самому переключать-выбирать модели локально, либо выбирать облачный DeepSeek, а это только ручками.
В итоге все вроде бы заработало, но с сильным хрустом и это касается только чтения информации с диска и с Obsidian - это я еще не дошел до того, чтобы там что-либо редактировать с помощью Claude.
И вот я подумал, что стоит эту конфигурацию отложить нафиг и сел думать над другим вариантом.
Так что сегодня вместо этого попробую сделать аналогичный процесс с помощью Hermes, а не Claude Code - плюс в том, что на apple m2pro он будет значительно быстрее, поскольку поддерживает MLX.
В любом случае - я пока что экспериментирую и пытаюсь найти удобный для себя вариант, не замыкаясь на готовые облачные решения (а то мало ли что).
@nobrstories #LLM