@intlayer/docs 5.8.1-canary.0 → 6.0.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/blog/ar/rag_powered_documentation_assistant.md +282 -0
  2. package/blog/de/rag_powered_documentation_assistant.md +282 -0
  3. package/blog/en/rag_powered_documentation_assistant.md +289 -0
  4. package/blog/en-GB/rag_powered_documentation_assistant.md +284 -0
  5. package/blog/es/rag_powered_documentation_assistant.md +308 -0
  6. package/blog/fr/rag_powered_documentation_assistant.md +308 -0
  7. package/blog/hi/rag_powered_documentation_assistant.md +284 -0
  8. package/blog/it/rag_powered_documentation_assistant.md +284 -0
  9. package/blog/ja/rag_powered_documentation_assistant.md +284 -0
  10. package/blog/ko/rag_powered_documentation_assistant.md +283 -0
  11. package/blog/pt/rag_powered_documentation_assistant.md +284 -0
  12. package/blog/ru/rag_powered_documentation_assistant.md +284 -0
  13. package/blog/tr/index.md +69 -0
  14. package/blog/tr/internationalization_and_SEO.md +273 -0
  15. package/blog/tr/intlayer_with_i18next.md +162 -0
  16. package/blog/tr/intlayer_with_next-i18next.md +367 -0
  17. package/blog/tr/intlayer_with_next-intl.md +392 -0
  18. package/blog/tr/intlayer_with_react-i18next.md +346 -0
  19. package/blog/tr/intlayer_with_react-intl.md +345 -0
  20. package/blog/tr/list_i18n_technologies/CMS/drupal.md +143 -0
  21. package/blog/tr/list_i18n_technologies/CMS/wix.md +167 -0
  22. package/blog/tr/list_i18n_technologies/CMS/wordpress.md +188 -0
  23. package/blog/tr/list_i18n_technologies/frameworks/angular.md +125 -0
  24. package/blog/tr/list_i18n_technologies/frameworks/flutter.md +150 -0
  25. package/blog/tr/list_i18n_technologies/frameworks/react-native.md +217 -0
  26. package/blog/tr/list_i18n_technologies/frameworks/react.md +155 -0
  27. package/blog/tr/list_i18n_technologies/frameworks/svelte.md +129 -0
  28. package/blog/tr/list_i18n_technologies/frameworks/vue.md +130 -0
  29. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +170 -0
  30. package/blog/tr/rag_powered_documentation_assistant.md +284 -0
  31. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +162 -0
  32. package/blog/tr/vue-i18n_vs_intlayer.md +276 -0
  33. package/blog/tr/what_is_internationalization.md +166 -0
  34. package/blog/zh/rag_powered_documentation_assistant.md +284 -0
  35. package/dist/cjs/generated/blog.entry.cjs +212 -0
  36. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  37. package/dist/cjs/generated/docs.entry.cjs +660 -132
  38. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  39. package/dist/cjs/generated/frequentQuestions.entry.cjs +84 -0
  40. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  41. package/dist/cjs/generated/legal.entry.cjs +6 -0
  42. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  43. package/dist/esm/generated/blog.entry.mjs +212 -0
  44. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  45. package/dist/esm/generated/docs.entry.mjs +660 -132
  46. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  47. package/dist/esm/generated/frequentQuestions.entry.mjs +84 -0
  48. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  49. package/dist/esm/generated/legal.entry.mjs +6 -0
  50. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  51. package/dist/types/generated/blog.entry.d.ts +1 -0
  52. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  53. package/dist/types/generated/docs.entry.d.ts +5 -2
  54. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  55. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  56. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  57. package/docs/ar/autoFill.md +41 -40
  58. package/docs/ar/configuration.md +202 -199
  59. package/docs/ar/dictionary/content_file.md +1059 -0
  60. package/docs/ar/intlayer_CMS.md +4 -4
  61. package/docs/ar/intlayer_with_nestjs.md +271 -0
  62. package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
  63. package/docs/ar/intlayer_with_react_router_v7.md +533 -0
  64. package/docs/ar/intlayer_with_tanstack.md +465 -299
  65. package/docs/ar/intlayer_with_vite+preact.md +7 -7
  66. package/docs/ar/intlayer_with_vite+react.md +7 -7
  67. package/docs/ar/intlayer_with_vite+vue.md +9 -9
  68. package/docs/ar/packages/vite-intlayer/index.md +3 -3
  69. package/docs/ar/readme.md +261 -0
  70. package/docs/ar/testing.md +199 -0
  71. package/docs/de/autoFill.md +42 -19
  72. package/docs/de/configuration.md +155 -147
  73. package/docs/de/dictionary/content_file.md +1059 -0
  74. package/docs/de/intlayer_CMS.md +4 -5
  75. package/docs/de/intlayer_with_nestjs.md +270 -0
  76. package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
  77. package/docs/de/intlayer_with_react_router_v7.md +537 -0
  78. package/docs/de/intlayer_with_tanstack.md +469 -302
  79. package/docs/de/intlayer_with_vite+preact.md +7 -7
  80. package/docs/de/intlayer_with_vite+react.md +7 -7
  81. package/docs/de/intlayer_with_vite+vue.md +9 -9
  82. package/docs/de/packages/vite-intlayer/index.md +3 -3
  83. package/docs/de/readme.md +261 -0
  84. package/docs/de/testing.md +200 -0
  85. package/docs/en/CI_CD.md +4 -6
  86. package/docs/en/autoFill.md +25 -5
  87. package/docs/en/configuration.md +45 -54
  88. package/docs/en/dictionary/content_file.md +1054 -0
  89. package/docs/en/intlayer_CMS.md +8 -7
  90. package/docs/en/intlayer_cli.md +112 -5
  91. package/docs/en/intlayer_with_nestjs.md +268 -0
  92. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  93. package/docs/en/intlayer_with_react_router_v7.md +531 -0
  94. package/docs/en/intlayer_with_tanstack.md +463 -294
  95. package/docs/en/intlayer_with_vite+preact.md +8 -8
  96. package/docs/en/intlayer_with_vite+react.md +8 -8
  97. package/docs/en/intlayer_with_vite+vue.md +8 -8
  98. package/docs/en/packages/intlayer/getLocalizedUrl.md +102 -25
  99. package/docs/en/packages/vite-intlayer/index.md +3 -3
  100. package/docs/en/readme.md +261 -0
  101. package/docs/en/testing.md +200 -0
  102. package/docs/en-GB/autoFill.md +29 -6
  103. package/docs/en-GB/configuration.md +79 -71
  104. package/docs/en-GB/dictionary/content_file.md +1084 -0
  105. package/docs/en-GB/intlayer_CMS.md +4 -5
  106. package/docs/en-GB/intlayer_with_nestjs.md +268 -0
  107. package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
  108. package/docs/en-GB/intlayer_with_react_router_v7.md +533 -0
  109. package/docs/en-GB/intlayer_with_tanstack.md +466 -299
  110. package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
  111. package/docs/en-GB/intlayer_with_vite+react.md +7 -7
  112. package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
  113. package/docs/en-GB/packages/vite-intlayer/index.md +3 -3
  114. package/docs/en-GB/readme.md +261 -0
  115. package/docs/en-GB/testing.md +200 -0
  116. package/docs/es/autoFill.md +45 -23
  117. package/docs/es/configuration.md +171 -167
  118. package/docs/es/dictionary/content_file.md +1088 -0
  119. package/docs/es/intlayer_CMS.md +4 -5
  120. package/docs/es/intlayer_with_nestjs.md +268 -0
  121. package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
  122. package/docs/es/intlayer_with_react_router_v7.md +533 -0
  123. package/docs/es/intlayer_with_tanstack.md +469 -280
  124. package/docs/es/intlayer_with_vite+preact.md +7 -7
  125. package/docs/es/intlayer_with_vite+react.md +7 -7
  126. package/docs/es/intlayer_with_vite+vue.md +9 -9
  127. package/docs/es/packages/vite-intlayer/index.md +3 -3
  128. package/docs/es/readme.md +261 -0
  129. package/docs/es/testing.md +200 -0
  130. package/docs/fr/autoFill.md +47 -24
  131. package/docs/fr/configuration.md +213 -198
  132. package/docs/fr/dictionary/content_file.md +1054 -0
  133. package/docs/fr/intlayer_CMS.md +4 -5
  134. package/docs/fr/intlayer_with_nestjs.md +268 -0
  135. package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
  136. package/docs/fr/intlayer_with_react_router_v7.md +549 -0
  137. package/docs/fr/intlayer_with_tanstack.md +465 -279
  138. package/docs/fr/intlayer_with_vite+preact.md +7 -7
  139. package/docs/fr/intlayer_with_vite+react.md +7 -7
  140. package/docs/fr/intlayer_with_vite+vue.md +9 -9
  141. package/docs/fr/packages/vite-intlayer/index.md +3 -3
  142. package/docs/fr/readme.md +261 -0
  143. package/docs/fr/testing.md +200 -0
  144. package/docs/hi/autoFill.md +47 -25
  145. package/docs/hi/configuration.md +194 -189
  146. package/docs/hi/dictionary/content_file.md +1056 -0
  147. package/docs/hi/intlayer_CMS.md +4 -5
  148. package/docs/hi/intlayer_with_nestjs.md +269 -0
  149. package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
  150. package/docs/hi/intlayer_with_react_router_v7.md +533 -0
  151. package/docs/hi/intlayer_with_tanstack.md +467 -282
  152. package/docs/hi/intlayer_with_vite+preact.md +7 -7
  153. package/docs/hi/intlayer_with_vite+react.md +7 -7
  154. package/docs/hi/intlayer_with_vite+vue.md +9 -9
  155. package/docs/hi/packages/vite-intlayer/index.md +3 -3
  156. package/docs/hi/readme.md +261 -0
  157. package/docs/hi/testing.md +200 -0
  158. package/docs/it/autoFill.md +46 -24
  159. package/docs/it/configuration.md +169 -161
  160. package/docs/it/dictionary/content_file.md +1061 -0
  161. package/docs/it/intlayer_CMS.md +4 -5
  162. package/docs/it/intlayer_with_nestjs.md +268 -0
  163. package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
  164. package/docs/it/intlayer_with_react_router_v7.md +535 -0
  165. package/docs/it/intlayer_with_tanstack.md +467 -301
  166. package/docs/it/intlayer_with_vite+preact.md +7 -7
  167. package/docs/it/intlayer_with_vite+react.md +7 -7
  168. package/docs/it/intlayer_with_vite+vue.md +9 -9
  169. package/docs/it/packages/vite-intlayer/index.md +3 -3
  170. package/docs/it/readme.md +261 -0
  171. package/docs/it/testing.md +200 -0
  172. package/docs/ja/autoFill.md +45 -23
  173. package/docs/ja/configuration.md +243 -204
  174. package/docs/ja/dictionary/content_file.md +1064 -0
  175. package/docs/ja/intlayer_CMS.md +4 -5
  176. package/docs/ja/intlayer_with_nestjs.md +268 -0
  177. package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
  178. package/docs/ja/intlayer_with_react_router_v7.md +534 -0
  179. package/docs/ja/intlayer_with_tanstack.md +467 -303
  180. package/docs/ja/intlayer_with_vite+preact.md +7 -7
  181. package/docs/ja/intlayer_with_vite+react.md +7 -7
  182. package/docs/ja/intlayer_with_vite+vue.md +9 -9
  183. package/docs/ja/packages/vite-intlayer/index.md +3 -3
  184. package/docs/ja/readme.md +263 -0
  185. package/docs/ja/testing.md +200 -0
  186. package/docs/ko/autoFill.md +39 -16
  187. package/docs/ko/configuration.md +217 -197
  188. package/docs/ko/dictionary/content_file.md +1060 -0
  189. package/docs/ko/intlayer_CMS.md +4 -5
  190. package/docs/ko/intlayer_with_nestjs.md +268 -0
  191. package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
  192. package/docs/ko/intlayer_with_react_router_v7.md +540 -0
  193. package/docs/ko/intlayer_with_tanstack.md +466 -302
  194. package/docs/ko/intlayer_with_vite+preact.md +7 -7
  195. package/docs/ko/intlayer_with_vite+react.md +7 -7
  196. package/docs/ko/intlayer_with_vite+vue.md +9 -9
  197. package/docs/ko/packages/vite-intlayer/index.md +3 -3
  198. package/docs/ko/readme.md +261 -0
  199. package/docs/ko/testing.md +200 -0
  200. package/docs/pt/autoFill.md +39 -15
  201. package/docs/pt/configuration.md +165 -147
  202. package/docs/pt/dictionary/content_file.md +1062 -0
  203. package/docs/pt/intlayer_CMS.md +4 -5
  204. package/docs/pt/intlayer_with_nestjs.md +271 -0
  205. package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
  206. package/docs/pt/intlayer_with_react_router_v7.md +535 -0
  207. package/docs/pt/intlayer_with_tanstack.md +469 -300
  208. package/docs/pt/intlayer_with_vite+preact.md +7 -7
  209. package/docs/pt/intlayer_with_vite+react.md +7 -7
  210. package/docs/pt/intlayer_with_vite+vue.md +9 -9
  211. package/docs/pt/packages/vite-intlayer/index.md +3 -3
  212. package/docs/pt/readme.md +261 -0
  213. package/docs/pt/testing.md +200 -0
  214. package/docs/ru/autoFill.md +52 -30
  215. package/docs/ru/configuration.md +164 -117
  216. package/docs/ru/dictionary/content_file.md +1064 -0
  217. package/docs/ru/intlayer_CMS.md +4 -4
  218. package/docs/ru/intlayer_with_nestjs.md +270 -0
  219. package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
  220. package/docs/ru/intlayer_with_react_router_v7.md +534 -0
  221. package/docs/ru/intlayer_with_tanstack.md +470 -305
  222. package/docs/ru/intlayer_with_vite+preact.md +7 -7
  223. package/docs/ru/intlayer_with_vite+react.md +7 -7
  224. package/docs/ru/intlayer_with_vite+vue.md +9 -9
  225. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  226. package/docs/ru/readme.md +261 -0
  227. package/docs/ru/testing.md +202 -0
  228. package/docs/tr/CI_CD.md +198 -0
  229. package/docs/tr/autoFill.md +201 -0
  230. package/docs/tr/configuration.md +585 -0
  231. package/docs/tr/dictionary/condition.md +243 -0
  232. package/docs/tr/dictionary/content_file.md +1055 -0
  233. package/docs/tr/dictionary/enumeration.md +251 -0
  234. package/docs/tr/dictionary/file.md +228 -0
  235. package/docs/tr/dictionary/function_fetching.md +218 -0
  236. package/docs/tr/dictionary/gender.md +279 -0
  237. package/docs/tr/dictionary/insertion.md +191 -0
  238. package/docs/tr/dictionary/markdown.md +385 -0
  239. package/docs/tr/dictionary/nesting.md +279 -0
  240. package/docs/tr/dictionary/translation.md +315 -0
  241. package/docs/tr/formatters.md +618 -0
  242. package/docs/tr/how_works_intlayer.md +254 -0
  243. package/docs/tr/index.md +168 -0
  244. package/docs/tr/interest_of_intlayer.md +288 -0
  245. package/docs/tr/intlayer_CMS.md +347 -0
  246. package/docs/tr/intlayer_cli.md +570 -0
  247. package/docs/tr/intlayer_visual_editor.md +269 -0
  248. package/docs/tr/intlayer_with_angular.md +694 -0
  249. package/docs/tr/intlayer_with_create_react_app.md +1218 -0
  250. package/docs/tr/intlayer_with_express.md +415 -0
  251. package/docs/tr/intlayer_with_lynx+react.md +511 -0
  252. package/docs/tr/intlayer_with_nestjs.md +268 -0
  253. package/docs/tr/intlayer_with_nextjs_14.md +1029 -0
  254. package/docs/tr/intlayer_with_nextjs_15.md +1506 -0
  255. package/docs/tr/intlayer_with_nextjs_page_router.md +1484 -0
  256. package/docs/tr/intlayer_with_nuxt.md +773 -0
  257. package/docs/tr/intlayer_with_react_native+expo.md +660 -0
  258. package/docs/tr/intlayer_with_react_router_v7.md +531 -0
  259. package/docs/tr/intlayer_with_tanstack.md +452 -0
  260. package/docs/tr/intlayer_with_vite+preact.md +1673 -0
  261. package/docs/tr/intlayer_with_vite+react.md +1632 -0
  262. package/docs/tr/intlayer_with_vite+solid.md +288 -0
  263. package/docs/tr/intlayer_with_vite+svelte.md +288 -0
  264. package/docs/tr/intlayer_with_vite+vue.md +1042 -0
  265. package/docs/tr/introduction.md +209 -0
  266. package/docs/tr/locale_mapper.md +244 -0
  267. package/docs/tr/mcp_server.md +207 -0
  268. package/docs/tr/packages/@intlayer/api/index.md +58 -0
  269. package/docs/tr/packages/@intlayer/chokidar/index.md +57 -0
  270. package/docs/tr/packages/@intlayer/cli/index.md +47 -0
  271. package/docs/tr/packages/@intlayer/config/index.md +142 -0
  272. package/docs/tr/packages/@intlayer/core/index.md +51 -0
  273. package/docs/tr/packages/@intlayer/design-system/index.md +47 -0
  274. package/docs/tr/packages/@intlayer/dictionary-entry/index.md +53 -0
  275. package/docs/tr/packages/@intlayer/editor/index.md +47 -0
  276. package/docs/tr/packages/@intlayer/editor-react/index.md +47 -0
  277. package/docs/tr/packages/@intlayer/webpack/index.md +61 -0
  278. package/docs/tr/packages/angular-intlayer/index.md +59 -0
  279. package/docs/tr/packages/express-intlayer/index.md +258 -0
  280. package/docs/tr/packages/express-intlayer/t.md +459 -0
  281. package/docs/tr/packages/intlayer/getConfiguration.md +151 -0
  282. package/docs/tr/packages/intlayer/getEnumeration.md +165 -0
  283. package/docs/tr/packages/intlayer/getHTMLTextDir.md +127 -0
  284. package/docs/tr/packages/intlayer/getLocaleLang.md +87 -0
  285. package/docs/tr/packages/intlayer/getLocaleName.md +124 -0
  286. package/docs/tr/packages/intlayer/getLocalizedUrl.md +324 -0
  287. package/docs/tr/packages/intlayer/getMultilingualUrls.md +225 -0
  288. package/docs/tr/packages/intlayer/getPathWithoutLocale.md +81 -0
  289. package/docs/tr/packages/intlayer/getTranslation.md +196 -0
  290. package/docs/tr/packages/intlayer/getTranslationContent.md +195 -0
  291. package/docs/tr/packages/intlayer/index.md +505 -0
  292. package/docs/tr/packages/intlayer-cli/index.md +71 -0
  293. package/docs/tr/packages/intlayer-editor/index.md +139 -0
  294. package/docs/tr/packages/lynx-intlayer/index.md +85 -0
  295. package/docs/tr/packages/next-intlayer/index.md +154 -0
  296. package/docs/tr/packages/next-intlayer/t.md +354 -0
  297. package/docs/tr/packages/next-intlayer/useDictionary.md +270 -0
  298. package/docs/tr/packages/next-intlayer/useIntlayer.md +265 -0
  299. package/docs/tr/packages/next-intlayer/useLocale.md +133 -0
  300. package/docs/tr/packages/nuxt-intlayer/index.md +59 -0
  301. package/docs/tr/packages/preact-intlayer/index.md +55 -0
  302. package/docs/tr/packages/react-intlayer/index.md +148 -0
  303. package/docs/tr/packages/react-intlayer/t.md +304 -0
  304. package/docs/tr/packages/react-intlayer/useDictionary.md +554 -0
  305. package/docs/tr/packages/react-intlayer/useI18n.md +478 -0
  306. package/docs/tr/packages/react-intlayer/useIntlayer.md +253 -0
  307. package/docs/tr/packages/react-intlayer/useLocale.md +212 -0
  308. package/docs/tr/packages/react-native-intlayer/index.md +85 -0
  309. package/docs/tr/packages/react-scripts-intlayer/index.md +82 -0
  310. package/docs/tr/packages/solid-intlayer/index.md +56 -0
  311. package/docs/tr/packages/svelte-intlayer/index.md +55 -0
  312. package/docs/tr/packages/vite-intlayer/index.md +82 -0
  313. package/docs/tr/packages/vue-intlayer/index.md +59 -0
  314. package/docs/tr/per_locale_file.md +321 -0
  315. package/docs/tr/readme.md +261 -0
  316. package/docs/tr/roadmap.md +338 -0
  317. package/docs/tr/testing.md +200 -0
  318. package/docs/tr/vs_code_extension.md +154 -0
  319. package/docs/zh/autoFill.md +40 -18
  320. package/docs/zh/configuration.md +245 -226
  321. package/docs/zh/dictionary/content_file.md +1064 -0
  322. package/docs/zh/intlayer_CMS.md +4 -5
  323. package/docs/zh/intlayer_with_nestjs.md +268 -0
  324. package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
  325. package/docs/zh/intlayer_with_react_router_v7.md +535 -0
  326. package/docs/zh/intlayer_with_tanstack.md +468 -278
  327. package/docs/zh/intlayer_with_vite+preact.md +7 -7
  328. package/docs/zh/intlayer_with_vite+react.md +7 -7
  329. package/docs/zh/intlayer_with_vite+vue.md +7 -7
  330. package/docs/zh/packages/vite-intlayer/index.md +3 -3
  331. package/docs/zh/readme.md +261 -0
  332. package/docs/zh/testing.md +198 -0
  333. package/frequent_questions/tr/SSR_Next_no_[locale].md +105 -0
  334. package/frequent_questions/tr/array_as_content_declaration.md +72 -0
  335. package/frequent_questions/tr/build_dictionaries.md +59 -0
  336. package/frequent_questions/tr/build_error_CI_CD.md +75 -0
  337. package/frequent_questions/tr/customized_locale_list.md +65 -0
  338. package/frequent_questions/tr/domain_routing.md +114 -0
  339. package/frequent_questions/tr/esbuild_error.md +30 -0
  340. package/frequent_questions/tr/get_locale_cookie.md +142 -0
  341. package/frequent_questions/tr/intlayer_command_undefined.md +156 -0
  342. package/frequent_questions/tr/locale_incorect_in_url.md +74 -0
  343. package/frequent_questions/tr/static_rendering.md +45 -0
  344. package/frequent_questions/tr/translated_path_url.md +56 -0
  345. package/frequent_questions/tr/unknown_command.md +98 -0
  346. package/legal/tr/privacy_notice.md +83 -0
  347. package/legal/tr/terms_of_service.md +55 -0
  348. package/package.json +13 -13
  349. package/src/generated/blog.entry.ts +212 -0
  350. package/src/generated/docs.entry.ts +663 -135
  351. package/src/generated/frequentQuestions.entry.ts +85 -1
  352. package/src/generated/legal.entry.ts +7 -1
  353. package/docs/ar/dictionary/content_extention_customization.md +0 -100
  354. package/docs/ar/dictionary/get_started.md +0 -527
  355. package/docs/de/dictionary/content_extention_customization.md +0 -100
  356. package/docs/de/dictionary/get_started.md +0 -531
  357. package/docs/en/dictionary/content_extention_customization.md +0 -102
  358. package/docs/en/dictionary/get_started.md +0 -529
  359. package/docs/en-GB/dictionary/content_extention_customization.md +0 -100
  360. package/docs/en-GB/dictionary/get_started.md +0 -591
  361. package/docs/es/dictionary/content_extention_customization.md +0 -100
  362. package/docs/es/dictionary/get_started.md +0 -527
  363. package/docs/fr/dictionary/content_extention_customization.md +0 -100
  364. package/docs/fr/dictionary/get_started.md +0 -527
  365. package/docs/hi/dictionary/content_extention_customization.md +0 -100
  366. package/docs/hi/dictionary/get_started.md +0 -527
  367. package/docs/it/dictionary/content_extention_customization.md +0 -113
  368. package/docs/it/dictionary/get_started.md +0 -573
  369. package/docs/ja/dictionary/content_extention_customization.md +0 -113
  370. package/docs/ja/dictionary/get_started.md +0 -576
  371. package/docs/ko/dictionary/content_extention_customization.md +0 -100
  372. package/docs/ko/dictionary/get_started.md +0 -530
  373. package/docs/pt/dictionary/content_extention_customization.md +0 -100
  374. package/docs/pt/dictionary/get_started.md +0 -532
  375. package/docs/ru/dictionary/content_extention_customization.md +0 -100
  376. package/docs/ru/dictionary/get_started.md +0 -575
  377. package/docs/zh/dictionary/content_extention_customization.md +0 -117
  378. package/docs/zh/dictionary/get_started.md +0 -533
@@ -0,0 +1,284 @@
1
+ ---
2
+ createdAt: 2025-09-10
3
+ updatedAt: 2025-09-10
4
+ title: Construindo um Assistente de Documentação com RAG (Fragmentação, Embeddings e Busca)
5
+ description: Construindo um Assistente de Documentação com RAG (Fragmentação, Embeddings e Busca)
6
+ keywords:
7
+ - RAG
8
+ - Documentação
9
+ - Assistente
10
+ - Fragmentação
11
+ - Embeddings
12
+ - Busca
13
+ slugs:
14
+ - blog
15
+ - rag-powered-documentation-assistant
16
+ ---
17
+
18
+ # Construindo um Assistente de Documentação com RAG (Fragmentação, Embeddings e Busca)
19
+
20
+ ## O que você recebe
21
+
22
+ Eu construí um assistente de documentação com RAG e o empacotei em um boilerplate que você pode usar imediatamente.
23
+
24
+ - Vem com uma aplicação pronta para uso (Next.js + OpenAI API)
25
+ - Inclui um pipeline RAG funcional (fragmentação, embeddings, similaridade cosseno)
26
+ - Fornece uma interface completa de chatbot construída em React
27
+ - Todos os componentes da interface são totalmente editáveis com Tailwind CSS
28
+ - Registra todas as consultas dos usuários para ajudar a identificar documentação faltante, pontos problemáticos dos usuários e oportunidades de produto
29
+
30
+ 👉 [Demo ao vivo](https://intlayer.org/doc/why) 👉 [Boilerplate do código](https://github.com/aymericzip/smart_doc_RAG)
31
+
32
+ ## Introdução
33
+
34
+ Se você já se perdeu na documentação, rolando infinitamente em busca de uma resposta, sabe o quão frustrante isso pode ser. Documentações são úteis, mas são estáticas e a busca nelas muitas vezes parece desajeitada.
35
+
36
+ É aí que entra o **RAG (Geração Aumentada por Recuperação)**. Em vez de forçar os usuários a vasculhar o texto, podemos combinar **recuperação** (encontrar as partes certas da documentação) com **geração** (permitir que um LLM explique de forma natural).
37
+
38
+ Neste post, vou mostrar como construí um chatbot de documentação alimentado por RAG e como ele não apenas ajuda os usuários a encontrar respostas mais rapidamente, mas também oferece às equipes de produto uma nova forma de entender os pontos problemáticos dos usuários.
39
+
40
+ ## Por que usar RAG para documentação?
41
+
42
+ RAG tornou-se uma abordagem popular por um motivo: é uma das maneiras mais práticas de tornar os grandes modelos de linguagem realmente úteis.
43
+
44
+ Para documentação, os benefícios são claros:
45
+
46
+ - Respostas instantâneas: os usuários perguntam em linguagem natural e recebem respostas relevantes.
47
+ - Melhor contexto: o modelo vê apenas as seções mais relevantes da documentação, reduzindo alucinações.
48
+ - Busca que parece humana: mais como Algolia + FAQ + chatbot, tudo em um.
49
+ - Ciclo de feedback: ao armazenar consultas, você descobre com o que os usuários realmente têm dificuldades.
50
+
51
+ Esse último ponto é crucial. Um sistema RAG não apenas responde perguntas, ele mostra o que as pessoas estão perguntando. Isso significa:
52
+
53
+ - Você descobre informações faltantes na sua documentação.
54
+ - Você vê surgirem pedidos de funcionalidades.
55
+ - Você identifica padrões que podem até orientar a estratégia do produto.
56
+
57
+ Portanto, RAG não é apenas uma ferramenta de suporte. É também um **motor de descoberta de produto**.
58
+
59
+ ## Como funciona o pipeline RAG
60
+
61
+ ![RAG Pipeline](https://github.com/aymericzip/intlayer/blob/main/docs/assets/rag_flow.svg)
62
+
63
+ Em um nível geral, aqui está a receita que usei:
64
+
65
+ 1. **Dividir a documentação em partes** Grandes arquivos Markdown são divididos em partes. Dividir permite fornecer como contexto apenas as partes relevantes da documentação.
66
+ 2. **Gerar embeddings** Cada parte é transformada em um vetor usando a API de embedding da OpenAI (text-embedding-3-large) ou um banco de dados vetorial (Chroma, Qdrant, Pinecone).
67
+ 3. **Indexação e armazenamento** Os embeddings são armazenados em um arquivo JSON simples (para minha demonstração), mas em produção, provavelmente você usaria um banco de dados vetorial.
68
+ 4. **Recuperação (R em RAG)** A consulta do usuário é transformada em embedding, a similaridade cosseno é calculada, e os chunks mais relevantes são recuperados.
69
+ 5. **Aumento + Geração (AG em RAG)** Esses chunks são injetados no prompt para o ChatGPT, para que o modelo responda com o contexto real da documentação.
70
+ 6. **Registro de consultas para feedback** Cada consulta do usuário é armazenada. Isso é ouro para entender pontos problemáticos, documentação faltante ou novas oportunidades.
71
+
72
+ ## Passo 1: Lendo a Documentação
73
+
74
+ O primeiro passo foi simples: eu precisava de uma forma de escanear uma pasta docs/ para todos os arquivos .md. Usando Node.js e glob, eu busquei o conteúdo de cada arquivo Markdown para a memória.
75
+
76
+ Isso mantém o pipeline flexível: em vez de Markdown, você poderia buscar documentos de um banco de dados, um CMS ou até mesmo uma API.
77
+
78
+ ## Passo 2: Dividindo a Documentação em Partes
79
+
80
+ Por que dividir em partes? Porque os modelos de linguagem têm **limites de contexto**. Alimentá-los com um livro inteiro de documentação não funciona.
81
+
82
+ Então, a ideia é quebrar o texto em partes gerenciáveis (por exemplo, 500 tokens cada) com sobreposição (por exemplo, 100 tokens). A sobreposição garante continuidade para que você não perca o significado nas fronteiras das partes.
83
+
84
+ **Exemplo:**
85
+
86
+ - Parte 1 → “…a velha biblioteca que muitos haviam esquecido. Suas prateleiras imponentes estavam cheias de livros…”
87
+ - Parte 2 → “…as prateleiras estavam cheias de livros de todos os gêneros imagináveis, cada um sussurrando histórias…”
88
+
89
+ A sobreposição garante que ambas as partes contenham contexto compartilhado, para que a recuperação permaneça coerente.
90
+
91
+ Esse equilíbrio (tamanho do chunk vs sobreposição) é fundamental para a eficiência do RAG:
92
+
93
+ - Muito pequeno → você obtém ruído.
94
+ - Muito grande → você estoura o tamanho do contexto.
95
+
96
+ ## Passo 3: Gerando Embeddings
97
+
98
+ Uma vez que os documentos são divididos em chunks, geramos **embeddings** — vetores de alta dimensão que representam cada chunk.
99
+
100
+ Usei o modelo text-embedding-3-large da OpenAI, mas você pode usar qualquer modelo moderno de embedding.
101
+
102
+ **Exemplo de embedding:**
103
+
104
+ ```js
105
+ [
106
+ -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712,
107
+ -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323,
108
+ //...+1533 elementos
109
+ ];
110
+ ```
111
+
112
+ Cada vetor é uma impressão digital matemática do texto, permitindo a busca por similaridade.
113
+
114
+ ## Passo 4: Indexando e Armazenando Embeddings
115
+
116
+ Para evitar regenerar embeddings várias vezes, eu os armazenei em embeddings.json.
117
+
118
+ Em produção, você provavelmente vai querer um banco de dados vetorial como:
119
+
120
+ - Chroma
121
+ - Qdrant
122
+ - Pinecone
123
+ - FAISS, Weaviate, Milvus, etc.
124
+
125
+ Bancos de dados vetoriais lidam com indexação, escalabilidade e busca rápida. Mas para meu protótipo, um JSON local funcionou bem.
126
+
127
+ ## Passo 5: Recuperação com Similaridade Cosseno
128
+
129
+ Quando um usuário faz uma pergunta:
130
+
131
+ 1. Gere um embedding para a consulta.
132
+ 2. Compare-o com todos os embeddings dos documentos usando **similaridade cosseno**.
133
+ 3. Mantenha apenas os N chunks mais similares.
134
+
135
+ A similaridade cosseno mede o ângulo entre dois vetores. Uma correspondência perfeita tem pontuação **1.0**.
136
+
137
+ Dessa forma, o sistema encontra as passagens do documento mais próximas da consulta.
138
+
139
+ ## Passo 6: Aumento + Geração
140
+
141
+ Agora vem a mágica. Pegamos os chunks principais e os injetamos no **prompt do sistema** para o ChatGPT.
142
+
143
+ Isso significa que o modelo responde como se esses trechos fizessem parte da conversa.
144
+
145
+ O resultado: respostas precisas e **baseadas na documentação**.
146
+
147
+ ## Passo 7: Registro das Consultas dos Usuários
148
+
149
+ Este é o superpoder oculto.
150
+
151
+ Cada pergunta feita é armazenada. Com o tempo, você constrói um conjunto de dados de:
152
+
153
+ - Perguntas mais frequentes (ótimo para FAQs)
154
+ - Perguntas sem resposta (documentação ausente ou pouco clara)
155
+ - Solicitações de funcionalidades disfarçadas de perguntas (“Integra com X?”)
156
+ - Casos de uso emergentes que você não havia planejado
157
+
158
+ Isso transforma seu assistente RAG em uma **ferramenta contínua de pesquisa com usuários**.
159
+
160
+ ## Quanto Custa?
161
+
162
+ Uma objeção comum ao RAG é o custo. Na prática, é surpreendentemente barato:
163
+
164
+ - Gerar embeddings para cerca de 200 documentos leva cerca de **5 minutos** e custa **1–2 euros**.
165
+ - O recurso de busca na documentação é 100% gratuito.
166
+ - Para consultas, usamos o gpt-4o-latest sem o modo “thinking”. No Intlayer, vemos cerca de **300 consultas de chat por mês**, e a fatura da API OpenAI raramente ultrapassa **10 dólares**.
167
+
168
+ Além disso, você pode incluir o custo de hospedagem.
169
+
170
+ ## Detalhes da Implementação
171
+
172
+ Stack:
173
+
174
+ - Monorepo: workspace pnpm
175
+ - Pacote de documentação: Node.js / TypeScript / API OpenAI
176
+ - Frontend: Next.js / React / Tailwind CSS
177
+ - Backend: rota API Node.js / API OpenAI
178
+
179
+ O pacote `@smart-doc/docs` é um pacote TypeScript que lida com o processamento da documentação. Quando um arquivo markdown é adicionado ou modificado, o pacote inclui um script `build` que reconstrói a lista de documentação em cada idioma, gera embeddings e os armazena em um arquivo `embeddings.json`.
180
+
181
+ Para o frontend, usamos uma aplicação Next.js que fornece:
182
+
183
+ - Renderização de Markdown para HTML
184
+ - Uma barra de pesquisa para encontrar documentação relevante
185
+ - Uma interface de chatbot para fazer perguntas sobre a documentação
186
+
187
+ Para realizar uma busca na documentação, a aplicação Next.js inclui uma rota de API que chama uma função do pacote `@smart-doc/docs` para recuperar fragmentos de documentação que correspondem à consulta. Usando esses fragmentos, podemos retornar uma lista de páginas de documentação relevantes para a busca do usuário.
188
+
189
+ Para a funcionalidade do chatbot, seguimos o mesmo processo de busca, mas além disso, injetamos os fragmentos de documentação recuperados no prompt enviado ao ChatGPT.
190
+
191
+ Aqui está um exemplo de um prompt enviado ao ChatGPT:
192
+
193
+ Prompt do sistema:
194
+
195
+ ```txt
196
+ Você é um assistente prestativo que pode responder perguntas sobre a documentação do Intlayer.
197
+
198
+ Fragmentos relacionados:
199
+
200
+ -----
201
+ docName: "getting-started"
202
+ docChunk: "1/3"
203
+ docUrl: "https://example.com/docs/pt/getting-started"
204
+ ---
205
+
206
+ # Como começar
207
+
208
+ ...
209
+
210
+ -----
211
+ docName: "another-doc"
212
+ docChunk: "1/5"
213
+ docUrl: "https://example.com/docs/pt/another-doc"
214
+ ---
215
+
216
+ # Outro documento
217
+
218
+ ...
219
+ ```
220
+
221
+ Consulta do usuário :
222
+
223
+ ```txt
224
+ Como começar?
225
+ ```
226
+
227
+ Usamos SSE para transmitir a resposta da rota da API.
228
+
229
+ Como mencionado, usamos gpt-4-turbo sem o modo "thinking". As respostas são relevantes e a latência é baixa.
230
+ Experimentamos com o gpt-5, mas a latência era muito alta (às vezes até 15 segundos para uma resposta). Mas revisaremos isso no futuro.
231
+
232
+ 👉 [Experimente a demonstração aqui](https://intlayer.org/doc/why) 👉 [Confira o modelo de código no GitHub](https://github.com/aymericzip/smart_doc_RAG)
233
+
234
+ ## Indo Além
235
+
236
+ Este projeto é uma implementação mínima. Mas você pode estendê-lo de várias maneiras:
237
+
238
+ - Servidor MCP → a função de pesquisa de documentação para um servidor MCP para conectar a documentação a qualquer assistente de IA
239
+
240
+ - Bancos de Dados Vetoriais → escalar para milhões de pedaços de documentação
241
+ - LangChain / LlamaIndex → frameworks prontos para pipelines RAG
242
+ - Painéis de análise → visualizar consultas dos usuários e pontos problemáticos
243
+ - Recuperação multi-fonte → buscar não apenas documentos, mas entradas de banco de dados, posts de blog, tickets, etc.
244
+ - Melhoria no prompting → reclassificação, filtragem e busca híbrida (palavra-chave + semântica)
245
+
246
+ ## Limitações que Encontramos
247
+
248
+ - A segmentação e sobreposição são empíricas. O equilíbrio correto (tamanho do pedaço, porcentagem de sobreposição, número de pedaços recuperados) requer iteração e testes.
249
+ - Embeddings não são regenerados automaticamente quando os documentos mudam. Nosso sistema redefine os embeddings para um arquivo somente se o número de pedaços for diferente do que está armazenado.
250
+ - Neste protótipo, os embeddings são armazenados em JSON. Isso funciona para demonstrações, mas polui o Git. Em produção, um banco de dados ou um armazenamento vetorial dedicado é melhor.
251
+
252
+ ## Por Que Isso Importa Além da Documentação
253
+
254
+ A parte interessante não é apenas o chatbot. É o **ciclo de feedback**.
255
+
256
+ Com RAG, você não apenas responde:
257
+
258
+ - Você aprende o que confunde os usuários.
259
+ - Você descobre quais recursos eles esperam.
260
+ - Você adapta sua estratégia de produto com base em consultas reais.
261
+
262
+ **Exemplo:**
263
+
264
+ Imagine lançar um novo recurso e ver instantaneamente:
265
+
266
+ - 50% das perguntas são sobre o mesmo passo de configuração pouco claro
267
+ - Usuários pedem repetidamente por uma integração que você ainda não suporta
268
+ - Pessoas buscam termos que revelam um novo caso de uso
269
+
270
+ Isso é **inteligência de produto** diretamente dos seus usuários.
271
+
272
+ ## Conclusão
273
+
274
+ RAG é uma das formas mais simples e poderosas de tornar os LLMs práticos. Ao combinar **recuperação + geração**, você pode transformar documentos estáticos em um **assistente inteligente** e, ao mesmo tempo, obter um fluxo contínuo de insights sobre o produto.
275
+
276
+ Para mim, este projeto mostrou que RAG não é apenas um truque técnico. É uma forma de transformar a documentação em:
277
+
278
+ - um sistema de suporte interativo
279
+ - um canal de feedback
280
+ - uma ferramenta de estratégia de produto
281
+
282
+ 👉 [Experimente a demonstração aqui](https://intlayer.org/doc/why) 👉 [Confira o modelo de código no GitHub](https://github.com/aymericzip/smart_doc_RAG)
283
+
284
+ E se você também estiver experimentando com RAG, adoraria saber como está usando.
@@ -0,0 +1,284 @@
1
+ ---
2
+ createdAt: 2025-09-10
3
+ updatedAt: 2025-09-10
4
+ title: Создание помощника по документации на базе RAG (разбиение на части, эмбеддинги и поиск)
5
+ description: Создание помощника по документации на базе RAG (разбиение на части, эмбеддинги и поиск)
6
+ keywords:
7
+ - RAG
8
+ - Документация
9
+ - Помощник
10
+ - Разбиение на части
11
+ - Эмбеддинги
12
+ - Поиск
13
+ slugs:
14
+ - blog
15
+ - rag-powered-documentation-assistant
16
+ ---
17
+
18
+ # Создание помощника по документации на базе RAG (разбиение на части, эмбеддинги и поиск)
19
+
20
+ ## Что вы получите
21
+
22
+ Я создал помощника по документации на базе RAG и упаковал его в шаблон, который вы можете использовать сразу.
23
+
24
+ - В комплекте готовое к использованию приложение (Next.js + OpenAI API)
25
+ - Включает рабочий RAG-пайплайн (разбиение на части, эмбеддинги, косинусное сходство)
26
+ - Предоставляет полный интерфейс чат-бота, построенный на React
27
+ - Все компоненты пользовательского интерфейса полностью редактируются с помощью Tailwind CSS
28
+ - Логирует каждый запрос пользователя, чтобы помочь выявить отсутствующую документацию, болевые точки пользователей и возможности для продукта
29
+
30
+ 👉 [Демо в реальном времени](https://intlayer.org/doc/why) 👉 [Шаблон кода](https://github.com/aymericzip/smart_doc_RAG)
31
+
32
+ ## Введение
33
+
34
+ Если вы когда-либо терялись в документации, бесконечно прокручивая в поисках одного ответа, вы знаете, как это может быть мучительно. Документация полезна, но она статична, и поиск по ней часто кажется неудобным.
35
+
36
+ Вот тут и приходит на помощь **RAG (Retrieval-Augmented Generation)**. Вместо того чтобы заставлять пользователей рыться в тексте, мы можем объединить **извлечение** (нахождение нужных частей документа) с **генерацией** (позволяя большой языковой модели объяснять это естественным языком).
37
+
38
+ В этом посте я расскажу, как я создал чатбот для документации на базе RAG и как он не только помогает пользователям быстрее находить ответы, но и предоставляет командам продукта новый способ понимания болевых точек пользователей.
39
+
40
+ ## Почему стоит использовать RAG для документации?
41
+
42
+ RAG стал популярным подходом не случайно: это один из самых практичных способов сделать большие языковые модели действительно полезными.
43
+
44
+ Для документации преимущества очевидны:
45
+
46
+ - Мгновенные ответы: пользователи задают вопросы на естественном языке и получают релевантные ответы.
47
+ - Лучший контекст: модель видит только самые релевантные разделы документации, что снижает количество ошибок (галлюцинаций).
48
+ - Поиск, который ощущается как человеческий: что-то вроде сочетания Algolia + FAQ + чатбота в одном.
49
+ - Обратная связь: сохраняя запросы, вы выявляете, с чем пользователи действительно испытывают трудности.
50
+
51
+ Этот последний пункт очень важен. Система RAG не просто отвечает на вопросы, она показывает, что именно спрашивают люди. Это значит:
52
+
53
+ - Вы обнаруживаете недостающую информацию в вашей документации.
54
+ - Вы видите появляющиеся запросы на новые функции.
55
+ - Вы замечаете закономерности, которые могут даже направлять стратегию продукта.
56
+
57
+ Таким образом, RAG — это не просто инструмент поддержки. Это также **движок для обнаружения продукта**.
58
+
59
+ ## Как работает конвейер RAG
60
+
61
+ ![RAG Pipeline](https://github.com/aymericzip/intlayer/blob/main/docs/assets/rag_flow.svg)
62
+
63
+ В общих чертах, вот рецепт, который я использовал:
64
+
65
+ 1. **Разбиение документации на части** Большие Markdown-файлы разбиваются на части. Разбиение позволяет предоставлять в качестве контекста только релевантные части документации.
66
+ 2. **Генерация эмбеддингов** Каждая часть преобразуется в вектор с помощью API эмбеддингов OpenAI (text-embedding-3-large) или векторной базы данных (Chroma, Qdrant, Pinecone).
67
+ 3. **Индексация и хранение** Встраивания сохраняются в простом JSON-файле (для моего демо), но в продакшене вы, скорее всего, будете использовать векторную базу данных.
68
+ 4. **Извлечение (R в RAG)** Запрос пользователя преобразуется в вектор, вычисляется косинусное сходство, и извлекаются наиболее подходящие фрагменты.
69
+ 5. **Дополнение и генерация (AG в RAG)** Эти фрагменты вставляются в подсказку для ChatGPT, чтобы модель отвечала с учетом реального контекста документации.
70
+ 6. **Логирование запросов для обратной связи** Каждый пользовательский запрос сохраняется. Это бесценно для понимания болевых точек, отсутствующей документации или новых возможностей.
71
+
72
+ ## Шаг 1: Чтение документации
73
+
74
+ Первый шаг был простым: мне нужно было просканировать папку docs/ на наличие всех файлов с расширением .md. Используя Node.js и glob, я загрузил содержимое каждого Markdown-файла в память.
75
+
76
+ Это сохраняет гибкость конвейера: вместо Markdown вы можете получать документы из базы данных, CMS или даже API.
77
+
78
+ ## Шаг 2: Разбиение документации на части
79
+
80
+ Зачем разбивать? Потому что у языковых моделей есть **ограничения по контексту**. Передавать им целую книгу документации не получится.
81
+
82
+ Идея в том, чтобы разбить текст на управляемые части (например, по 500 токенов каждая) с перекрытием (например, 100 токенов). Перекрытие обеспечивает непрерывность, чтобы вы не теряли смысл на границах частей.
83
+
84
+ **Пример:**
85
+
86
+ - Часть 1 → «…старая библиотека, которую многие забыли. Ее высокие полки были заполнены книгами…»
87
+ - Часть 2 → «…полки были заполнены книгами из всех мыслимых жанров, каждая шептала свои истории…»
88
+
89
+ Перекрытие гарантирует, что обе части содержат общий контекст, поэтому извлечение остается последовательным.
90
+
91
+ Этот компромисс (размер чанка против перекрытия) является ключевым для эффективности RAG:
92
+
93
+ - Слишком маленький → появляется шум.
94
+ - Слишком большой → увеличивается размер контекста.
95
+
96
+ ## Шаг 3: Генерация эмбеддингов
97
+
98
+ После разбиения документов на чанки мы генерируем **эмбеддинги** — векторы высокой размерности, представляющие каждый чанк.
99
+
100
+ Я использовал модель OpenAI text-embedding-3-large, но вы можете использовать любую современную модель эмбеддингов.
101
+
102
+ **Пример эмбеддинга:**
103
+
104
+ ```js
105
+ [
106
+ -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712,
107
+ -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323,
108
+ //...+1533 элементов
109
+ ];
110
+ ```
111
+
112
+ Каждый вектор — это математический отпечаток текста, позволяющий выполнять поиск по сходству.
113
+
114
+ ## Шаг 4: Индексация и хранение эмбеддингов
115
+
116
+ Чтобы избежать многократной генерации эмбеддингов, я сохранил их в файле embeddings.json.
117
+
118
+ В продакшене вам, скорее всего, понадобится векторная база данных, такая как:
119
+
120
+ - Chroma
121
+ - Qdrant
122
+ - Pinecone
123
+ - FAISS, Weaviate, Milvus и др.
124
+
125
+ Векторные базы данных обеспечивают индексацию, масштабируемость и быстрый поиск. Но для моего прототипа локальный JSON отлично подошёл.
126
+
127
+ ## Шаг 5: Поиск с помощью косинусного сходства
128
+
129
+ Когда пользователь задаёт вопрос:
130
+
131
+ 1. Генерируется эмбеддинг для запроса.
132
+ 2. Сравнивается с эмбеддингами всех документов с использованием **косинусного сходства**.
133
+ 3. Оставляются только топ N наиболее похожих чанков.
134
+
135
+ Косинусное сходство измеряет угол между двумя векторами. Идеальное совпадение оценивается в **1.0**.
136
+
137
+ Таким образом система находит наиболее близкие к запросу фрагменты документа.
138
+
139
+ ## Шаг 6: Расширение + Генерация
140
+
141
+ Теперь начинается магия. Мы берём топ чанков и вставляем их в **системный промпт** для ChatGPT.
142
+
143
+ Это означает, что модель отвечает так, как будто эти фрагменты были частью разговора.
144
+
145
+ Результат: точные, **основанные на документации ответы**.
146
+
147
+ ## Шаг 7: Логирование запросов пользователей
148
+
149
+ Это скрытая суперсила.
150
+
151
+ Каждый заданный вопрос сохраняется. Со временем вы создаёте набор данных из:
152
+
153
+ - Наиболее частых вопросов (отлично подходит для FAQ)
154
+ - Невыясненных вопросов (документация отсутствует или неясна)
155
+ - Запросов на функции, замаскированных под вопросы («Интегрируется ли с X?»)
156
+ - Новых сценариев использования, которые вы не планировали
157
+
158
+ Это превращает вашего RAG-ассистента в **инструмент непрерывного исследования пользователей**.
159
+
160
+ ## Сколько это стоит?
161
+
162
+ Одно из распространённых возражений против RAG — стоимость. На практике это удивительно дешево:
163
+
164
+ - Генерация эмбеддингов для ~200 документов занимает около **5 минут** и стоит **1–2 евро**.
165
+ - Функция поиска по документации абсолютно бесплатна.
166
+ - Для запросов мы используем gpt-4o-latest без режима «размышления». В Intlayer мы наблюдаем около **300 запросов в чатах в месяц**, и счет за OpenAI API редко превышает **10 долларов**.
167
+
168
+ Кроме того, вы можете включить стоимость хостинга.
169
+
170
+ ## Детали реализации
171
+
172
+ Стек:
173
+
174
+ - Монорепозиторий: pnpm workspace
175
+ - Пакет документации: Node.js / TypeScript / OpenAI API
176
+ - Фронтенд: Next.js / React / Tailwind CSS
177
+ - Бэкенд: Node.js API route / OpenAI API
178
+
179
+ Пакет `@smart-doc/docs` — это пакет на TypeScript, который обрабатывает документацию. Когда добавляется или изменяется markdown-файл, пакет включает скрипт `build`, который перестраивает список документации на каждом языке, генерирует embeddings и сохраняет их в файл `embeddings.json`.
180
+
181
+ Для фронтенда мы используем приложение Next.js, которое предоставляет:
182
+
183
+ - Преобразование Markdown в HTML
184
+ - Поисковая строка для поиска релевантной документации
185
+ - Интерфейс чат-бота для задавания вопросов по документации
186
+
187
+ Для выполнения поиска по документации приложение Next.js включает API-маршрут, который вызывает функцию из пакета `@smart-doc/docs` для получения фрагментов документации, соответствующих запросу. Используя эти фрагменты, мы можем вернуть список страниц документации, релевантных поиску пользователя.
188
+
189
+ Для функционала чат-бота мы используем тот же процесс поиска, но дополнительно внедряем полученные фрагменты документации в подсказку, отправляемую в ChatGPT.
190
+
191
+ Вот пример подсказки, отправляемой в ChatGPT:
192
+
193
+ Системная подсказка:
194
+
195
+ ```txt
196
+ Вы — полезный помощник, который может отвечать на вопросы по документации Intlayer.
197
+
198
+ Связанные фрагменты:
199
+
200
+ -----
201
+ docName: "getting-started"
202
+ docChunk: "1/3"
203
+ docUrl: "https://example.com/docs/ru/getting-started"
204
+ ---
205
+
206
+ # Как начать
207
+
208
+ ...
209
+
210
+ -----
211
+ docName: "another-doc"
212
+ docChunk: "1/5"
213
+ docUrl: "https://example.com/docs/ru/another-doc"
214
+ ---
215
+
216
+ # Другой документ
217
+
218
+ ...
219
+ ```
220
+
221
+ Запрос пользователя :
222
+
223
+ ```txt
224
+ Как начать?
225
+ ```
226
+
227
+ Мы используем SSE для потоковой передачи ответа с API маршрута.
228
+
229
+ Как упоминалось, мы используем gpt-4-turbo без режима "размышления". Ответы релевантны, а задержка низкая.
230
+ Мы экспериментировали с gpt-5, но задержка была слишком высокой (иногда до 15 секунд на ответ). Однако мы вернемся к этому в будущем.
231
+
232
+ 👉 [Попробуйте демо здесь](https://intlayer.org/doc/why) 👉 [Посмотрите шаблон кода на GitHub](https://github.com/aymericzip/smart_doc_RAG)
233
+
234
+ ## Дальнейшие шаги
235
+
236
+ Этот проект является минимальной реализацией. Но вы можете расширить его во многих направлениях:
237
+
238
+ - MCP сервер → функция поиска по документации на MCP сервер для подключения документации к любому AI-ассистенту
239
+
240
+ - Векторные базы данных → масштабирование до миллионов фрагментов документации
241
+ - LangChain / LlamaIndex → готовые фреймворки для RAG-пайплайнов
242
+ - Аналитические панели → визуализация запросов пользователей и проблемных точек
243
+ - Многоисточниковый поиск → извлечение не только документов, но и записей из баз данных, блогов, тикетов и т.д.
244
+ - Улучшенный prompting → повторная ранжировка, фильтрация и гибридный поиск (ключевые слова + семантика)
245
+
246
+ ## Ограничения, с которыми мы столкнулись
247
+
248
+ - Разбиение на фрагменты и перекрытие эмпиричны. Правильный баланс (размер фрагмента, процент перекрытия, количество извлекаемых фрагментов) требует итераций и тестирования.
249
+ - Встраивания (embeddings) не регенерируются автоматически при изменении документации. Наша система сбрасывает встраивания для файла только если количество фрагментов отличается от сохранённого.
250
+ - В этом прототипе эмбеддинги хранятся в формате JSON. Это подходит для демонстраций, но засоряет Git. В продакшене лучше использовать базу данных или специализированное хранилище векторов.
251
+
252
+ ## Почему это важно не только для документации
253
+
254
+ Интересная часть — это не просто чат-бот. Это **обратная связь**.
255
+
256
+ С RAG вы не просто отвечаете:
257
+
258
+ - Вы узнаёте, что сбивает пользователей с толку.
259
+ - Вы обнаруживаете, какие функции они ожидают.
260
+ - Вы адаптируете стратегию продукта на основе реальных запросов.
261
+
262
+ **Пример:**
263
+
264
+ Представьте, что вы запускаете новую функцию и сразу видите:
265
+
266
+ - 50% вопросов касаются одного и того же непонятного шага настройки
267
+ - Пользователи постоянно просят интеграцию, которую вы ещё не поддерживаете
268
+ - Люди ищут термины, которые выявляют новый сценарий использования
269
+
270
+ Это **продуктовая аналитика** прямо от ваших пользователей.
271
+
272
+ ## Заключение
273
+
274
+ RAG — один из самых простых и мощных способов сделать LLM практичными. Объединив **извлечение + генерацию**, вы можете превратить статичную документацию в **умного помощника** и одновременно получить непрерывный поток инсайтов о продукте.
275
+
276
+ Для меня этот проект показал, что RAG — это не просто технический трюк. Это способ преобразовать документацию в:
277
+
278
+ - интерактивную систему поддержки
279
+ - канал обратной связи
280
+ - инструмент для продуктовой стратегии
281
+
282
+ 👉 [Попробуйте демо здесь](https://intlayer.org/doc/why) 👉 [Посмотрите шаблон кода на GitHub](https://github.com/aymericzip/smart_doc_RAG)
283
+
284
+ Если вы тоже экспериментируете с RAG, мне было бы интересно узнать, как вы его используете.
@@ -0,0 +1,69 @@
1
+ ---
2
+ createdAt: 2025-09-07
3
+ updatedAt: 2025-09-07
4
+ title: Blog
5
+ description: Intlayer, uluslararasılaştırma ve diğer konularla ilgili tüm konuları keşfedin
6
+ keywords:
7
+ - Intlayer
8
+ - Internationalization
9
+ - Blog
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ slugs:
14
+ - blog
15
+ - search
16
+ ---
17
+
18
+ # JavaScript'te Uluslararasılaştırmayı Kucaklamak: Küresel Erişimi ve SEO'yu Geliştirme
19
+
20
+ JavaScript uygulamaları için **uluslararasılaştırma (i18n)** ile ilgili her şeye adanmış blogumuza hoş geldiniz! Burada, geliştiricilerin dijital ürünlerini dünya çapında genişletmelerine yardımcı olacak en iyi uygulamaları, stratejileri ve araçları keşfediyoruz.
21
+
22
+ ---
23
+
24
+ ## Neden Uluslararasılaştırma (i18n) Önemli
25
+
26
+ Günümüzün birbirine bağlı dünyasında, kullanıcılar sorunsuz, yerelleştirilmiş deneyimler bekliyor. **Uluslararasılaştırma (i18n)**, web uygulamanızın farklı dillere ve kültürel nüanslara uyum sağlamasını sağlar. Başlangıçtan itibaren i18n uygulamalarını dahil ederek, aşağıdaki gibi birçok fayda elde edersiniz:
27
+
28
+ 1. **Geliştirilmiş Kullanıcı Deneyimi:** Kullanıcılar, ana dillerindeki içerikle etkileşim kurmak daha rahat hisseder.
29
+ 2. **Daha Geniş Pazar Erişimi:** Birden fazla dil sunmak, yeni bölgelere ulaşmanıza ve kullanıcı tabanınızı büyütmenize yardımcı olur.
30
+ 3. **İyileştirilmiş Erişilebilirlik:** İyi yapılandırılmış i18n, genellikle erişilebilirlik standartlarıyla uyumlu olur ve uygulamanızı daha kapsayıcı hale getirir.
31
+ 4. **Daha İyi SEO Performansı:** Yerelleştirilmiş içerik, bölgeye özgü arama sonuçlarında görünürlüğünüzü artırabilir.
32
+
33
+ ---
34
+
35
+ ## Açık Kaynak Uluslararasılaştırma Çözümleri
36
+
37
+ Uluslararasılaştırılmış bir uygulama oluşturmak karmaşık olmak zorunda değil. Açık kaynak topluluğu, yerelleştirmeyi daha kolay hale getiren birçok güçlü, iyi desteklenen araç ve kütüphane sağlar. React, Vue ve Angular gibi modern JavaScript çerçeveleriyle kolay entegrasyon sağlayan **react-intl**, **i18next** ve **FormatJS** gibi popüler çözümler, esnek API'ler sunar.
38
+
39
+ ### Açık Kaynak Çözümlerinin Ana Faydaları
40
+
41
+ - **Esneklik:** Topluluk odaklı kütüphaneler hızla evrilir ve ihtiyaçlar ortaya çıktıkça güncellemeler ve yeni özellikler sunar.
42
+ - **Maliyet Tasarrufu:** Lisans ücretleri yok, uygulamanızı test etmeyi veya ölçeklendirmeyi daha basit hale getirir.
43
+ - **Topluluk Desteği:** Büyük topluluklar genellikle daha fazla öğretici, dokümantasyon ve hazır eklentiler anlamına gelir.
44
+
45
+ ---
46
+
47
+ ## Duyurular ve Gelecek
48
+
49
+ Gelecekteki öğreticiler, en iyi uygulamalar ve JavaScript uygulamalarınızı küresel kitleler için optimize etme üzerine **vaka çalışmaları** hakkında heyecanlıyız. İşte bir ön izleme:
50
+
51
+ - **Gelişmiş Yerelleştirme İpuçları:** Çoğullaştırma, tarih/saat biçimlendirme ve dinamik içerik ustalaşma.
52
+ - **Performans Optimizasyonları:** Birden fazla yerel desteklenirken paket boyutlarını minimize etme.
53
+ - **Topluluktan Vaka Çalışmaları:** Başarılı i18n uygulamalarının gerçek dünya örneklerini sergileme.
54
+
55
+ Bu güncellemeler ve daha fazlası için bizi takip edin!
56
+
57
+ ---
58
+
59
+ ## Blogumuza Katkıda Bulunun!
60
+
61
+ Topluluk odaklı bilgi paylaşımına inanıyoruz. Uluslararasılaştırma, **SEO** veya başka ilgili bir konu hakkında harika bir blog yazısı fikriniz varsa, sizden duymak isteriz. Önerilen blog yazınızı GitHub deposumuza ekleyerek bir Pull Request gönderebilirsiniz:
62
+
63
+ [**Yazınızı buraya gönderin**](https://github.com/aymericzip/intlayer/blob/main/docs/blog)
64
+
65
+ Katkılarınız bu platformu zenginleştirir ve dünya çapındaki geliştiricilere güç verir.
66
+
67
+ ---
68
+
69
+ **Okuduğunuz için teşekkür ederiz ve i18n topluluğumuza hoş geldiniz!** JavaScript uygulamalarınızı uluslararası başarıya taşımak için daha fazla içgörü, ipucu ve en iyi uygulama için bizi takip edin.