tools.mdx 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. ---
  2. title: Инструменты
  3. description: Управляйте инструментами, которые может использовать LLM.
  4. ---
  5. Инструменты позволяют LLM выполнять действия в вашей кодовой базе. opencode поставляется с набором встроенных инструментов, но вы можете расширить его с помощью [пользовательских инструментов](/docs/custom-tools) или [MCP-серверов](/docs/mcp-servers).
  6. По умолчанию все инструменты **включены** и не требуют разрешения для запуска. Вы можете контролировать поведение инструмента через [permissions](/docs/permissions).
  7. ---
  8. ## Настройка
  9. Используйте поле `permission` для управления поведением инструмента. Вы можете разрешить, запретить или потребовать одобрения для каждого инструмента.
  10. ```json title="opencode.json"
  11. {
  12. "$schema": "https://opencode.ai/config.json",
  13. "permission": {
  14. "edit": "deny",
  15. "bash": "ask",
  16. "webfetch": "allow"
  17. }
  18. }
  19. ```
  20. Вы также можете использовать подстановочные знаки для одновременного управления несколькими инструментами. Например, чтобы потребовать одобрения всех инструментов с сервера MCP:
  21. ```json title="opencode.json"
  22. {
  23. "$schema": "https://opencode.ai/config.json",
  24. "permission": {
  25. "mymcp_*": "ask"
  26. }
  27. }
  28. ```
  29. [Подробнее](/docs/permissions) о настройке разрешений.
  30. ---
  31. ## Встроенный
  32. Вот все встроенные инструменты, доступные в opencode.
  33. ---
  34. ### bash
  35. Выполняйте shell-команды в среде вашего проекта.
  36. ```json title="opencode.json" {4}
  37. {
  38. "$schema": "https://opencode.ai/config.json",
  39. "permission": {
  40. "bash": "allow"
  41. }
  42. }
  43. ```
  44. Этот инструмент позволяет LLM запускать команды терминала, такие как `npm install`, `git status` или любую другую shell-команду.
  45. ---
  46. ### edit
  47. Измените существующие файлы, используя точную замену строк.
  48. ```json title="opencode.json" {4}
  49. {
  50. "$schema": "https://opencode.ai/config.json",
  51. "permission": {
  52. "edit": "allow"
  53. }
  54. }
  55. ```
  56. Этот инструмент выполняет точное редактирование файлов, заменяя точные совпадения текста. Это основной способ изменения кода в LLM.
  57. ---
  58. ### write
  59. Создавайте новые файлы или перезаписывайте существующие.
  60. ```json title="opencode.json" {4}
  61. {
  62. "$schema": "https://opencode.ai/config.json",
  63. "permission": {
  64. "edit": "allow"
  65. }
  66. }
  67. ```
  68. Используйте это, чтобы позволить LLM создавать новые файлы. Он перезапишет существующие файлы, если они уже существуют.
  69. :::note
  70. Инструмент `write` контролируется разрешением `edit`, которое распространяется на все модификации файлов (`edit`, `write`, `patch`, `multiedit`).
  71. :::
  72. ---
  73. ### read
  74. Прочитайте содержимое файла из вашей кодовой базы.
  75. ```json title="opencode.json" {4}
  76. {
  77. "$schema": "https://opencode.ai/config.json",
  78. "permission": {
  79. "read": "allow"
  80. }
  81. }
  82. ```
  83. Этот инструмент читает файлы и возвращает их содержимое. Он поддерживает чтение определенных диапазонов строк для больших файлов.
  84. ---
  85. ### grep
  86. Поиск содержимого файла с помощью регулярных выражений.
  87. ```json title="opencode.json" {4}
  88. {
  89. "$schema": "https://opencode.ai/config.json",
  90. "permission": {
  91. "grep": "allow"
  92. }
  93. }
  94. ```
  95. Быстрый поиск контента по вашей кодовой базе. Поддерживает полный синтаксис регулярных выражений и фильтрацию шаблонов файлов.
  96. ---
  97. ### glob
  98. Найдите файлы по шаблону.
  99. ```json title="opencode.json" {4}
  100. {
  101. "$schema": "https://opencode.ai/config.json",
  102. "permission": {
  103. "glob": "allow"
  104. }
  105. }
  106. ```
  107. Ищите файлы, используя шаблоны glob, например `**/*.js` или `src/**/*.ts`. Возвращает соответствующие пути к файлам, отсортированные по времени изменения.
  108. ---
  109. ### lsp (экспериментальный)
  110. Взаимодействуйте с настроенными серверами LSP, чтобы получить функции анализа кода, такие как определения, ссылки, информация о наведении и иерархия вызовов.
  111. :::note
  112. Этот инструмент доступен только при `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (или `OPENCODE_EXPERIMENTAL=true`).
  113. :::
  114. ```json title="opencode.json" {4}
  115. {
  116. "$schema": "https://opencode.ai/config.json",
  117. "permission": {
  118. "lsp": "allow"
  119. }
  120. }
  121. ```
  122. Поддерживаемые операции включают `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` и `outgoingCalls`.
  123. Чтобы настроить серверы LSP, доступные для вашего проекта, см. [LSP Servers](/docs/lsp).
  124. ---
  125. ### patch
  126. Применяйте патчи к файлам.
  127. ```json title="opencode.json" {4}
  128. {
  129. "$schema": "https://opencode.ai/config.json",
  130. "permission": {
  131. "edit": "allow"
  132. }
  133. }
  134. ```
  135. Этот инструмент применяет файлы исправлений к вашей кодовой базе. Полезно для применения различий и патчей из различных источников.
  136. :::note
  137. Инструмент `patch` контролируется разрешением `edit`, которое распространяется на все модификации файлов (`edit`, `write`, `patch`, `multiedit`).
  138. :::
  139. ---
  140. ### skill
  141. Загрузите [skill](/docs/skills) (файл `SKILL.md`) и верните его содержимое в диалог.
  142. ```json title="opencode.json" {4}
  143. {
  144. "$schema": "https://opencode.ai/config.json",
  145. "permission": {
  146. "skill": "allow"
  147. }
  148. }
  149. ```
  150. ---
  151. ### todowrite
  152. Управляйте списками дел во время сеансов кодирования.
  153. ```json title="opencode.json" {4}
  154. {
  155. "$schema": "https://opencode.ai/config.json",
  156. "permission": {
  157. "todowrite": "allow"
  158. }
  159. }
  160. ```
  161. Создает и обновляет списки задач для отслеживания прогресса во время сложных операций. LLM использует это для организации многоэтапных задач.
  162. :::note
  163. По умолчанию этот инструмент отключен для субагентов, но вы можете включить его вручную. [Подробнее](/docs/agents/#permissions)
  164. :::
  165. ---
  166. ### webfetch
  167. Получить веб-контент.
  168. ```json title="opencode.json" {4}
  169. {
  170. "$schema": "https://opencode.ai/config.json",
  171. "permission": {
  172. "webfetch": "allow"
  173. }
  174. }
  175. ```
  176. Позволяет LLM получать и читать веб-страницы. Полезно для поиска документации или исследования онлайн-ресурсов.
  177. ---
  178. ### websearch
  179. Найдите информацию в Интернете.
  180. :::note
  181. Этот инструмент доступен только при использовании поставщика opencode или когда для переменной среды `OPENCODE_ENABLE_EXA` установлено любое истинное значение (например, `true` или `1`).
  182. Чтобы включить при запуске opencode:
  183. ```bash
  184. OPENCODE_ENABLE_EXA=1 opencode
  185. ```
  186. :::
  187. ```json title="opencode.json" {4}
  188. {
  189. "$schema": "https://opencode.ai/config.json",
  190. "permission": {
  191. "websearch": "allow"
  192. }
  193. }
  194. ```
  195. Выполняет поиск в Интернете с помощью Exa AI для поиска соответствующей информации в Интернете. Полезно для исследования тем, поиска текущих событий или сбора информации, выходящей за рамки данных обучения.
  196. Ключ API не требуется — инструмент подключается напрямую к сервису MCP, размещенному на Exa AI, без аутентификации.
  197. :::tip
  198. Используйте `websearch`, когда вам нужно найти информацию (обнаружение), и `webfetch`, когда вам нужно получить контент с определенного URL-адреса (извлечение).
  199. :::
  200. ---
  201. ### question
  202. Задавайте вопросы пользователю во время выполнения.
  203. ```json title="opencode.json" {4}
  204. {
  205. "$schema": "https://opencode.ai/config.json",
  206. "permission": {
  207. "question": "allow"
  208. }
  209. }
  210. ```
  211. Этот инструмент позволяет LLM задавать вопросы пользователю во время выполнения задачи. Это полезно для:
  212. - Сбор предпочтений или требований пользователей
  213. - Уточнение двусмысленных инструкций
  214. - Получение решений по вариантам реализации
  215. - Предлагая выбор, в каком направлении двигаться
  216. Каждый вопрос включает заголовок, текст вопроса и список вариантов. Пользователи могут выбрать один из предложенных вариантов или ввести собственный ответ. Если вопросов несколько, пользователи могут перемещаться между ними, прежде чем отправлять все ответы.
  217. ---
  218. ## Пользовательские инструменты
  219. Пользовательские инструменты позволяют вам определять собственные функции, которые может вызывать LLM. Они определены в вашем файле конфигурации и могут выполнять произвольный код.
  220. [Подробнее](/docs/custom-tools) о создании собственных инструментов.
  221. ---
  222. ## MCP-серверы
  223. Серверы MCP (Model Context Protocol) позволяют интегрировать внешние инструменты и сервисы. Сюда входит доступ к базе данных, интеграция API и сторонние сервисы.
  224. [Подробнее](/docs/mcp-servers) о настройке серверов MCP.
  225. ---
  226. ## Внутреннее устройство
  227. Внутренне такие инструменты, как `grep` и `glob`, используют [ripgrep](https://github.com/BurntSushi/ripgrep). По умолчанию ripgrep учитывает шаблоны `.gitignore`, что означает, что файлы и каталоги, перечисленные в вашем `.gitignore`, будут исключены из поиска и списков.
  228. ---
  229. ### Игнорировать шаблоны
  230. Чтобы включить файлы, которые обычно игнорируются, создайте файл `.ignore` в корне вашего проекта. Этот файл может явно разрешать определенные пути.
  231. ```text title=".ignore"
  232. !node_modules/
  233. !dist/
  234. !build/
  235. ```
  236. Например, этот файл `.ignore` позволяет ripgrep выполнять поиск в каталогах `node_modules/`, `dist/` и `build/`, даже если они указаны в `.gitignore`.