Машинный перевод с локальным контекстом в Obsidian Copilot. gemini.. gemini. llm.. gemini. llm. obsidian.. gemini. llm. obsidian. obsidian плагины.. gemini. llm. obsidian. obsidian плагины. ollama.. gemini. llm. obsidian. obsidian плагины. ollama. qwen.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг. нейросети.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг. нейросети. перевод.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг. нейросети. перевод. редактура и ИИ.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг. нейросети. перевод. редактура и ИИ. редактура текстов.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг. нейросети. перевод. редактура и ИИ. редактура текстов. Текстовые редакторы и IDE.. gemini. llm. obsidian. obsidian плагины. ollama. qwen. Блог компании ТестОпс. Будущее здесь. Контент и копирайтинг. нейросети. перевод. редактура и ИИ. редактура текстов. Текстовые редакторы и IDE. Читальный зал.

Мне по работе часто приходится заниматься переводом, и чтобы упростить себе жизнь, я решил настроить себе помощника, который был бы знаком с контекстом моей работы. Ниже делюсь результатами своих экспериментов.

Переводчик в своей работе ориентируется не просто на какой-то язык, а на терминологию и стилистику определённого сообщества. Мой основной рабочий процесс выстроен в Obsidian (подробнее об этом я писал вместе с Игнатием Сатирским), и я подумал, что база знаний, которая накопилась на этой платформе, может послужить «отражением» терминологии и стилистики, на которые мог бы опираться помощник. Я стал искать плагин, который давал бы интеграцию с нейросетью, и из всех возможных вариантов наиболее зрелым мне показался Obsidian Copilot — о нём и пойдёт речь.

Я не рассчитываю, что нейросеть сможет произвести чистовой текст, который сразу можно было бы сдавать как выполненную работу. Но я надеюсь, что получится облегчить мне труд при редактировании. Посмотрим, оправдает ли инструмент мои надежды.

Хранилище с использованными плагинами и результатами экспериментов доступно здесь.

Настройка

Инфраструктура получилась несложная. Я попробовал две нейросети с бесплатным API, одну локальную и одну удалённую:

Машинный перевод с локальным контекстом в Obsidian Copilot - 1

Начал с настройки самого Copilot.

Obsidian Copilot

Для эксперимента я создал новое хранилище:

Машинный перевод с локальным контекстом в Obsidian Copilot - 2

Затем перешёл в настройки:

Машинный перевод с локальным контекстом в Obsidian Copilot - 3

Дальше щёлкнул:

Сторонние плагины > Плагины сообщества

В появившемся окне плагинов вбил в поисковой строке «Copilot»:

Машинный перевод с локальным контекстом в Obsidian Copilot - 4

Щёлкнул по плагину, а затем нажал Установить > Включить.

Теперь дело за нейросетью.

Gemini

Вначале я подключил стороннюю нейросеть от Gemini. Этот сервис предоставляет доступ и ограниченное количество бесплатных токенов для API модели — ровно то, что нужно для эксперимента.

Вначале мне понадобился аккаунт на https://aistudio.google.com/; с ним я создал ключ API:

Машинный перевод с локальным контекстом в Obsidian Copilot - 5

В AI Studio был проект по умолчанию, и первый созданный ключ был в этом проекте, но у Copilot не получилось к нему подключиться. Когда я создал новый проект и ключ в нём, всё заработало.

Ключ провайдера в Copilot

Дальше я добавил только что созданный ключ Gemini в Copilot.

В настройках Obsidian в разделе Сторонние плагины я выбрал Copilot, чтобы открыть настройки плагина. На вкладке Basic (настройки в плагине англоязычные) выбрал General > API Keys > Set Keys:

Машинный перевод с локальным контекстом в Obsidian Copilot - 6

И вставил ключ Gemini:

Машинный перевод с локальным контекстом в Obsidian Copilot - 7

Добавление нужной модели

Дальше нужно было добавить модель. На вкладке настроек плагина я открыл Model, затем щёлкнул Add Model (если выбранная модель есть среди моделей по умолчанию, этого делать не нужно). Открылось окно:

Машинный перевод с локальным контекстом в Obsidian Copilot - 8

Здесь я сделал следующее:

  • Ввёл имя модели в Model Name.

  • Ввёл имя поставщика в Provider (остальные поля в моём случае заполнять не нужно).

  • Проверил, доступна ли модель, кнопкой Test.

  • Щёлкнул AddModel.

После этого модель появилась в списке доступных на вкладке Model.

Последний шаг: на вкладке Basic в General > Default Chat Model я выбрал только что добавленную модель.

Ollama

Я хотел так же оценить, насколько для моих целей подходит нейросеть, локально развёрнутая с Ollama.

Скачал и установил Ollama, затем выбрал модель. Для моего железа и моих целей я решил попробовать Qwen3, и ввёл в консоли:

ollama pull qwen3:30b

Затем запустил модель, чтобы ей могли пользоваться другие приложения:

ollama serve

Чтобы проверить, что модель запущена и ожидает запросы, я открыл в браузере адрес http://localhost:11434: там появилось сообщение “Ollama is running”.

Наконец, чтобы связать Copilot с локальной моделью, я повторил шаги из Добавление нужной модели.

Перевод с помощником

Инфраструктура готова — можно проверять работу помощника.

Фича, которая заинтересовала меня с самого начала — возможность добавлять заметки из хранилища в чат с нейросетью. Если обернуть имя заметки в две квадратные скобки (как обычные ссылки в Obsidian), оно станет ссылкой:

Машинный перевод с локальным контекстом в Obsidian Copilot - 9

Заметку также можно добавить кнопкой @ Add Context:

Машинный перевод с локальным контекстом в Obsidian Copilot - 10

Точно так же можно добавить папку, обернув её имя в фигурные скобки, например:

{корпус текстов об Allure Report}

Пользуясь этими фичами, я попробовал перевести свой англоязычный гайд по Allure Report: https://allurereport.org/docs/guides/junit5-parametrization/

В качестве образцов я дал нейросети несколько своих русскоязычных текстов по тому же инструменту. Получились такие промпты:

  • “Переведи текст в источник на русский язык, опираясь на стилистику и терминологию, принятую в IT-сообществе.”

  • “Ориентируясь на стилистику, терминологию и формат в Работа с нестабильными тестами в Allure 3 , переведи источник на русский язык.”

  • “Ориентируясь на стилистику и терминологию в {корпус текстов об Allure Report}, переведи источник на русский язык.”

У этого подхода тут же обнаружились минусы.

Во-первых, контекста может быть слишком много. Я почти сразу перескочил за размер контекстного окна, когда отправил модели запрос с целой папкой текстов. Чтобы работать с большим корпусом текстов, нужен RAG — в том же Copilot эту технологию использует специальный режим «Vault QA»; есть и другие эксперименты с RAG в Obsidian: тут и тут. Отложив этот вопрос на будущее, я пока просто сократил корпус «образцовых» текстов.

Во-вторых, добавление эталонных текстов, кажется, не слишком повлияло на перевод. Вначале я был оптимистичен: Gemini, «подкормленный» моими текстами, давал более органичный перевод, а не подстрочник:

Оригинал

Простой промпт

Промпт с контекстом

When writing automated tests, we often use parameterization, which means running the same test with different inputs.

При написании автоматизированных тестов мы часто используем параметризацию, что означает запуск одного и того же теста с различными входными данными.

При написании автоматизированных тестов часто используется параметризация — запуск одного и того же теста с различными входными данными.

The first solution that comes to mind is just creating a loop inside the test. Something like this:

Первое решение, которое приходит на ум, — это просто создать цикл внутри теста. Что-то вроде этого:

Первое, что приходит на ум, — это просто создать цикл внутри теста. Например, так:

Но потом, когда я повторил эти эксперименты на Gemini и Gwen, оказалось, что иногда выходит наоборот: с контекстом получается подстрочник, без него — более органичный. Кажется, дополнительные тексты здесь не помогли.

Ещё один вывод, который я сделал на этом этапе: работать с Gemini гораздо удобнее. Локальная нейросеть выполняет перевод за 10 минут, а если с несколькими текстами — может «думать» все полчаса. Gemini же справляется примерно за минуту.

Наконец, положительное впечатление: в целом качество перевода было неплохим, переводчик с таким текстом может работать редактором, а не переписывать его начисто.

Я решил попробовать другой подход: вместо размытой просьбы имитировать стиль — конкретные инструкции по стилю.

Руководство по стилю

Раз чат с нейросетью у меня под рукой, я решил попросить Gemini написать руководство по стилю:

«Ты — редактор текстов. Проанализируй стиль заметок в {корпус текстов об Allure Report}, и напиши краткое руководство по стилю».

Из этого руководства я взял раздел по языку и тону (остальное для перевода не актуально), слегка подправил, вышло следующее:

Язык: Русский.

  • Тон:

    • Информативный, технический, практический и обучающий.

    • Избегайте излишней формальности, но сохраняйте профессионализм.

    • Прямое, активное обращение к читателю, например, «вы теперь можете просто посмотреть», «попробуем запустить», или «Давайте разберёмся»

    • Проблемно-ориентированный подход: сначала описывается проблема или вопрос (например, «Why does this happen?» / «Почему это происходит?»), затем предлагается решение или объяснение

    • Объяснительный и направляющий: используются фразы типа «Как вы видите…» или «Теперь, если мы перезапустим…» для комментирования результатов и демонстрации.

    • Стремитесь объяснять сложные технические концепции максимально понятно, ориентируясь на аудиторию разработчиков и тестировщиков.

  • Словарный запас:

    • Используйте устоявшуюся IT-терминологию (например, «параметризация», «интеграция», «фреймворк», «пайплайн», «декораторы», «адаптеры»).

    • Избегайте жаргона, который может быть непонятен широкой аудитории.

  • Краткость и ясность:

    • Предложения должны быть четкими и по существу.

    • Избегайте избыточных слов и сложных грамматических конструкций.

Для первого раза неплохо. Но я добавил ещё несколько пунктов, которые всегда актуальны, и которые легко проверить:

  • Орфография:

    • Используйте букву «ё» там, где этого требует орфография.

  • Синтаксис:

    • Используйте кавычки-ёлочки («»).

    • Используйте длинное тире (—).

Дальше я сделал промпт с этим руководством:

«Ты — профессиональный переводчик. Переведи текст в источник на русский язык, руководствуясь инструкциями в Руководство по стилю».

И вот здесь уже есть конкретная польза: без руководства нейросеть использует букву «ё» по настроению, с ним — всегда.

Сохранённые промпты

В Copilot есть ещё одна полезная возможность: промпты можно сохранять для быстрого использования. Для этого нужно открыть в настройках вкладку Command и щёлкнуть + Add Cmd, чтобы открылось окно:

Машинный перевод с локальным контекстом в Obsidian Copilot - 11

В нём я ввёл следующий промпт:

{activeNote}
{[[Руководство по стилю]]}
Ты — профессиональный переводчик в паре английский-русский. Переведи, пожалуйста, текст из первого файла, следуя руководству по стилю во втором файле. Старайся избегать подстрочного перевода. 

Здесь {activeNote} – открытая в данный момент заметка, {[[Стиль]]} – ссылка на документ.

Теперь этот промпт можно вызвать, щёлкнув правой кнопкой мыши в заметке, которую мы хотим перевести. В выпадающем меню нужно выбрать Copilot > Перевод с английского (здесь будет имя нашего промпта):

Машинный перевод с локальным контекстом в Obsidian Copilot - 12

Кроме того, эту команду можно быстро вызвать в чате, введя «/»: система предложит на выбор список имеющихся команд. Или через «палитру команд»:

Машинный перевод с локальным контекстом в Obsidian Copilot - 13

А любую команду из палитры можно добавить в качестве кнопки на интерфейс с помощью плагина «Commander»:

Машинный перевод с локальным контекстом в Obsidian Copilot - 14

Я сразу понял, что мне будет удобно держать под рукой библиотеку команд не только для перевода, например:

{activeNote}
Ты — профессиональный редактор. Проверь, пожалуйста, текст в заметке на соответствие нормам, указанным в {[[Руководство по стилю]]}. Выведи исправленный текст.

Кажется, рабочий процесс сложился. У Obsidian Copilot есть много возможностей, о которых я не упомянул — тот же чат с хранилищем с помощью RAG; но для начала мне хватит уже описанных фич.

Сухой остаток

Какие получились результаты? Не совсем те, на которые я рассчитывал, но интересные.

У меня появился ИИ-помощник в чате, интегрированном в рабочее пространство. Ему легко предоставить доступ ко всем документам, с которыми я работаю. Заставить его имитировать язык текстов в хранилище не получилось — для этого нужны другие инструменты. А вот хранить наиболее часто используемые инструкции в виде вспомогательных инструментов и промптов оказалось очень полезно.

В этом эксперименте я использовал бесплатные модели — локальные и удалённые. С платной моделью, очевидно, качество перевода будет выше. Если заплатить за токены кому-нибудь из флагманов, процесс подключения их модели такой же, какой описан здесь.

Конечно, эксперименты на этом не закончатся. Я буду интегрировать Copilot с другими плагинами и инструментами, чтобы сделать рабочую экосистему более удобной, и, если эта тема интересна сообществу, буду продолжать делиться результатами здесь.

Автор: mikhail-lankin

Источник

Rambler's Top100