tools.mdx 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. ---
  2. title: เครื่องมือ
  3. description: จัดการเครื่องมือที่ LLM สามารถใช้ได้
  4. ---
  5. เครื่องมืออนุญาตให้ LLM ดำเนินการในโค้ดเบสของคุณ OpenCode มาพร้อมกับชุดเครื่องมือในตัว แต่คุณสามารถขยายได้ด้วย [เครื่องมือที่กำหนดเอง](/docs/custom-tools) หรือ [MCP เซิร์ฟเวอร์](/docs/mcp-servers)
  6. ตามค่าเริ่มต้น เครื่องมือทั้งหมด **เปิดใช้งาน** และไม่จำเป็นต้องมีสิทธิ์ในการทำงาน คุณสามารถควบคุมการทำงานของเครื่องมือผ่าน [สิทธิ์](/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 รันคำสั่ง terminal เช่น `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. ค้นหาเนื้อหาอย่างรวดเร็วทั่วทั้งโค้ดเบสของคุณ รองรับไวยากรณ์ regex เต็มรูปแบบและการกรองรูปแบบไฟล์
  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. ### list
  110. แสดงรายการไฟล์และไดเร็กทอรีในพาธที่กำหนด
  111. ```json title="opencode.json" {4}
  112. {
  113. "$schema": "https://opencode.ai/config.json",
  114. "permission": {
  115. "list": "allow"
  116. }
  117. }
  118. ```
  119. เครื่องมือนี้แสดงรายการเนื้อหาไดเร็กทอรี ยอมรับรูปแบบ glob เพื่อกรองผลลัพธ์
  120. ---
  121. ### lsp (ขั้นทดลอง)
  122. โต้ตอบกับเซิร์ฟเวอร์ LSP ที่กำหนดค่าของคุณเพื่อรับฟีเจอร์อัจฉริยะด้านโค้ด เช่น คำจำกัดความ การอ้างอิง ข้อมูลโฮเวอร์ และลำดับชั้นการโทร
  123. :::note
  124. เครื่องมือนี้ใช้ได้เฉพาะเมื่อ `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (หรือ `OPENCODE_EXPERIMENTAL=true`)
  125. :::
  126. ```json title="opencode.json" {4}
  127. {
  128. "$schema": "https://opencode.ai/config.json",
  129. "permission": {
  130. "lsp": "allow"
  131. }
  132. }
  133. ```
  134. การดำเนินการที่รองรับ ได้แก่ `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` และ `outgoingCalls`
  135. หากต้องการกำหนดค่าเซิร์ฟเวอร์ LSP ที่พร้อมใช้งานสำหรับโครงการของคุณ โปรดดู [LSP เซิร์ฟเวอร์](/docs/lsp)
  136. ---
  137. ### patch
  138. ใช้แพทช์กับไฟล์
  139. ```json title="opencode.json" {4}
  140. {
  141. "$schema": "https://opencode.ai/config.json",
  142. "permission": {
  143. "edit": "allow"
  144. }
  145. }
  146. ```
  147. เครื่องมือนี้ใช้ไฟล์แพทช์กับโค้ดเบสของคุณ มีประโยชน์สำหรับการใช้ความแตกต่างและแพตช์จากแหล่งต่างๆ
  148. :::note
  149. เครื่องมือ `patch` ถูกควบคุมโดยสิทธิ์ `edit` ซึ่งครอบคลุมการแก้ไขไฟล์ทั้งหมด (`edit`, `write`, `patch`, `multiedit`)
  150. :::
  151. ---
  152. ### skill
  153. โหลด [ทักษะ](/docs/skills) (ไฟล์ `SKILL.md`) และส่งคืนเนื้อหาในการสนทนา
  154. ```json title="opencode.json" {4}
  155. {
  156. "$schema": "https://opencode.ai/config.json",
  157. "permission": {
  158. "skill": "allow"
  159. }
  160. }
  161. ```
  162. ---
  163. ### todowrite
  164. จัดการรายการสิ่งที่ต้องทำระหว่างเซสชันการเขียนโค้ด
  165. ```json title="opencode.json" {4}
  166. {
  167. "$schema": "https://opencode.ai/config.json",
  168. "permission": {
  169. "todowrite": "allow"
  170. }
  171. }
  172. ```
  173. สร้างและอัปเดตรายการงานเพื่อติดตามความคืบหน้าระหว่างการดำเนินการที่ซับซ้อน LLM ใช้สิ่งนี้เพื่อจัดระเบียบงานที่มีหลายขั้นตอน
  174. :::note
  175. เครื่องมือนี้ปิดใช้งานสำหรับตัวแทนย่อยตามค่าเริ่มต้น แต่คุณสามารถเปิดใช้งานได้ด้วยตนเอง [เรียนรู้เพิ่มเติม](/docs/agents/#สิทธิ์)
  176. :::
  177. ---
  178. ### webfetch
  179. ดึงเนื้อหาเว็บ
  180. ```json title="opencode.json" {4}
  181. {
  182. "$schema": "https://opencode.ai/config.json",
  183. "permission": {
  184. "webfetch": "allow"
  185. }
  186. }
  187. ```
  188. อนุญาตให้ LLM ดึงข้อมูลและอ่านหน้าเว็บ มีประโยชน์สำหรับการค้นหาเอกสารหรือค้นคว้าแหล่งข้อมูลออนไลน์
  189. ---
  190. ### websearch
  191. ค้นหาข้อมูลในเว็บ
  192. :::note
  193. เครื่องมือนี้ใช้ได้เฉพาะเมื่อใช้ผู้ให้บริการ OpenCode หรือเมื่อตัวแปรสภาพแวดล้อม `OPENCODE_ENABLE_EXA` ถูกตั้งค่าเป็นค่าความจริง (เช่น `true` หรือ `1`)
  194. หากต้องการเปิดใช้งานเมื่อเปิดตัว OpenCode:
  195. ```bash
  196. OPENCODE_ENABLE_EXA=1 opencode
  197. ```
  198. :::
  199. ```json title="opencode.json" {4}
  200. {
  201. "$schema": "https://opencode.ai/config.json",
  202. "permission": {
  203. "websearch": "allow"
  204. }
  205. }
  206. ```
  207. ทำการค้นหาเว็บโดยใช้ Exa AI เพื่อค้นหาข้อมูลที่เกี่ยวข้องทางออนไลน์ มีประโยชน์สำหรับการค้นคว้าหัวข้อ ค้นหาเหตุการณ์ปัจจุบัน หรือการรวบรวมข้อมูลนอกเหนือจากการตัดข้อมูลการฝึกอบรม
  208. ไม่จำเป็นต้องใช้คีย์ API เครื่องมือนี้เชื่อมต่อโดยตรงกับบริการ MCP ที่โฮสต์ของ Exa AI โดยไม่มีการตรวจสอบสิทธิ์
  209. :::tip
  210. ใช้ `websearch` เมื่อคุณต้องการค้นหาข้อมูล (การค้นพบ) และใช้ `webfetch` เมื่อคุณต้องการดึงเนื้อหาจาก URL เฉพาะ (การดึงข้อมูล)
  211. :::
  212. ---
  213. ### question
  214. ถามคำถามผู้ใช้ระหว่างการดำเนินการ
  215. ```json title="opencode.json" {4}
  216. {
  217. "$schema": "https://opencode.ai/config.json",
  218. "permission": {
  219. "question": "allow"
  220. }
  221. }
  222. ```
  223. เครื่องมือนี้อนุญาตให้ LLM ถามคำถามผู้ใช้ระหว่างทำงาน มันมีประโยชน์สำหรับ:
  224. - การรวบรวมความชอบหรือความต้องการของผู้ใช้
  225. - ชี้แจงคำแนะนำที่ไม่ชัดเจน
  226. - การตัดสินใจเกี่ยวกับทางเลือกในการดำเนินการ
  227. - เสนอทางเลือกว่าจะไปในทิศทางใด
  228. คำถามแต่ละข้อประกอบด้วยส่วนหัว ข้อความคำถาม และรายการตัวเลือก ผู้ใช้สามารถเลือกจากตัวเลือกที่มีให้หรือพิมพ์คำตอบที่กำหนดเองได้ เมื่อมีคำถามหลายข้อ ผู้ใช้สามารถสลับไปมาระหว่างคำถามเหล่านั้นก่อนที่จะส่งคำตอบทั้งหมด
  229. ---
  230. ## เครื่องมือที่กำหนดเอง
  231. เครื่องมือแบบกำหนดเองช่วยให้คุณสามารถกำหนดฟังก์ชันของคุณเองที่ LLM สามารถเรียกได้ สิ่งเหล่านี้ถูกกำหนดไว้ในไฟล์ปรับแต่งของคุณและสามารถรันโค้ดได้ตามใจชอบ
  232. [เรียนรู้เพิ่มเติม](/docs/custom-tools) เกี่ยวกับการสร้างเครื่องมือที่กำหนดเอง
  233. ---
  234. ## MCP เซิร์ฟเวอร์
  235. เซิร์ฟเวอร์ MCP (Model Context Protocol) ช่วยให้คุณสามารถรวมเครื่องมือและบริการภายนอกได้ ซึ่งรวมถึงการเข้าถึงฐานข้อมูล การบูรณาการ API และบริการของบุคคลที่สาม
  236. [เรียนรู้เพิ่มเติม](/docs/mcp-servers) เกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ MCP
  237. ---
  238. ## ภายใน
  239. ภายใน เครื่องมือต่างๆ เช่น `grep`, `glob` และ `list` ใช้ [ripgrep](https://github.com/BurntSushi/ripgrep) ภายใต้ประทุน ตามค่าเริ่มต้น ripgrep เคารพรูปแบบ `.gitignore` ซึ่งหมายความว่าไฟล์และไดเร็กทอรีที่อยู่ใน `.gitignore` ของคุณจะถูกแยกออกจากการค้นหาและรายการ
  240. ---
  241. ### ละเว้นรูปแบบ
  242. หากต้องการรวมไฟล์ที่ปกติจะถูกละเว้น ให้สร้างไฟล์ `.ignore` ในรูทโปรเจ็กต์ของคุณ ไฟล์นี้สามารถอนุญาตเส้นทางบางอย่างได้อย่างชัดเจน
  243. ```text title=".ignore"
  244. !node_modules/
  245. !dist/
  246. !build/
  247. ```
  248. ตัวอย่างเช่น ไฟล์ `.ignore` นี้อนุญาตให้ ripgrep ค้นหาภายในไดเร็กทอรี `node_modules/`, `dist/` และ `build/` แม้ว่าไดเร็กทอรีเหล่านั้นจะแสดงอยู่ใน `.gitignore` ก็ตาม