@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,308 @@
1
+ ---
2
+ createdAt: 2025-09-10
3
+ updatedAt: 2025-09-10
4
+ title: Construyendo un Asistente de Documentación Potenciado por RAG (Fragmentación, Embeddings y Búsqueda)
5
+ description: Construyendo un Asistente de Documentación Potenciado por RAG (Fragmentación, Embeddings y Búsqueda)
6
+ keywords:
7
+ - RAG
8
+ - Documentación
9
+ - Asistente
10
+ - Fragmentación
11
+ - Embeddings
12
+ - Búsqueda
13
+ slugs:
14
+ - blog
15
+ - rag-powered-documentation-assistant
16
+ ---
17
+
18
+ # Construyendo un Asistente de Documentación Potenciado por RAG (Fragmentación, Embeddings y Búsqueda)
19
+
20
+ ## Lo que obtienes
21
+
22
+ He construido un asistente de documentación potenciado por RAG y lo empaqueté en una plantilla que puedes usar de inmediato.
23
+
24
+ - Viene con una aplicación lista para usar (Next.js + API de OpenAI)
25
+ - Incluye una pipeline RAG funcional (fragmentación, embeddings, similitud coseno)
26
+ - Proporciona una interfaz completa de chatbot construida en React
27
+ - Todos los componentes de la interfaz de usuario son completamente editables con Tailwind CSS
28
+ - Registra cada consulta del usuario para ayudar a identificar documentación faltante, puntos de dolor del usuario y oportunidades de producto
29
+
30
+ 👉 [Demostración en vivo](https://intlayer.org/doc/why) 👉 [Plantilla de código](https://github.com/aymericzip/smart_doc_RAG)
31
+
32
+ ## Introducción
33
+
34
+ Si alguna vez te has perdido en la documentación, desplazándote sin fin en busca de una respuesta, sabes lo doloroso que puede ser. La documentación es útil, pero es estática y buscar en ella a menudo se siente torpe.
35
+
36
+ Ahí es donde entra **RAG (Generación Aumentada por Recuperación)**. En lugar de obligar a los usuarios a buscar entre el texto, podemos combinar **recuperación** (encontrar las partes correctas de la documentación) con **generación** (dejar que un LLM lo explique de forma natural).
37
+
38
+ En esta publicación, te guiaré a través de cómo construí un chatbot de documentación potenciado por RAG y cómo no solo ayuda a los usuarios a encontrar respuestas más rápido, sino que también ofrece a los equipos de producto una nueva forma de entender los puntos de dolor de los usuarios.
39
+
40
+ ## ¿Por qué usar RAG para la documentación?
41
+
42
+ RAG se ha convertido en un enfoque popular por una razón: es una de las formas más prácticas de hacer que los grandes modelos de lenguaje sean realmente útiles.
43
+
44
+ Para la documentación, los beneficios son claros:
45
+
46
+ - Respuestas instantáneas: los usuarios preguntan en lenguaje natural y obtienen respuestas relevantes.
47
+ - Mejor contexto: el modelo solo ve las secciones de documentación más relevantes, reduciendo las alucinaciones.
48
+ - Búsqueda que se siente humana: más como Algolia + FAQ + chatbot, todo en uno.
49
+ - Ciclo de retroalimentación: al almacenar las consultas, descubres con qué realmente tienen dificultades los usuarios.
50
+
51
+ Ese último punto es crucial. Un sistema RAG no solo responde preguntas, sino que te dice qué es lo que la gente está preguntando. Eso significa:
52
+
53
+ - Descubres información faltante en tus documentos.
54
+ - Ves solicitudes de funciones emergentes.
55
+ - Detectas patrones que incluso pueden guiar la estrategia del producto.
56
+
57
+ Así que, RAG no es solo una herramienta de soporte. También es un **motor de descubrimiento de producto**.
58
+
59
+ ## Cómo funciona la canalización RAG
60
+
61
+ ![RAG Pipeline](https://github.com/aymericzip/intlayer/blob/main/docs/assets/rag_flow.svg)
62
+
63
+ A grandes rasgos, esta es la receta que usé:
64
+
65
+ 1. **Dividir la documentación en fragmentos** Los archivos grandes de Markdown se dividen en fragmentos. Dividir permite proporcionar como contexto solo las partes relevantes de la documentación.
66
+ 2. **Generar embeddings** Cada fragmento se convierte en un vector usando la API de embeddings de OpenAI (text-embedding-3-large) o una base de datos vectorial (Chroma, Qdrant, Pinecone).
67
+ 3. **Indexación y almacenamiento** Los embeddings se almacenan en un archivo JSON simple (para mi demo), pero en producción, probablemente usarías una base de datos vectorial.
68
+ 4. **Recuperación (R en RAG)** Se incrusta la consulta del usuario, se calcula la similitud coseno y se recuperan los fragmentos que mejor coinciden.
69
+ 5. **Aumento + Generación (AG en RAG)** Esos fragmentos se inyectan en el prompt para ChatGPT, de modo que el modelo responda con el contexto real de la documentación.
70
+ 6. **Registro de consultas para retroalimentación** Cada consulta del usuario se almacena. Esto es oro para entender puntos problemáticos, documentación faltante o nuevas oportunidades.
71
+
72
+ ## Paso 1: Leer la documentación
73
+
74
+ El primer paso fue simple: necesitaba una forma de escanear una carpeta docs/ para todos los archivos .md. Usando Node.js y glob, obtuve el contenido de cada archivo Markdown en memoria.
75
+
76
+ Esto mantiene la canalización flexible: en lugar de Markdown, podrías obtener documentos de una base de datos, un CMS o incluso una API.
77
+
78
+ ## Paso 2: Dividir la Documentación en Fragmentos
79
+
80
+ ¿Por qué dividir en fragmentos? Porque los modelos de lenguaje tienen **límites de contexto**. Alimentarlos con un libro entero de documentación no funcionará.
81
+
82
+ Entonces, la idea es dividir el texto en fragmentos manejables (por ejemplo, 500 tokens cada uno) con solapamiento (por ejemplo, 100 tokens). El solapamiento asegura continuidad para que no pierdas el significado en los límites de los fragmentos.
83
+
84
+ **Ejemplo:**
85
+
86
+ - Fragmento 1 → “…la vieja biblioteca que muchos habían olvidado. Sus estanterías imponentes estaban llenas de libros…”
87
+ - Fragmento 2 → “…las estanterías estaban llenas de libros de todos los géneros imaginables, cada uno susurrando historias…”
88
+
89
+ El solapamiento asegura que ambos fragmentos contengan contexto compartido, por lo que la recuperación permanece coherente.
90
+
91
+ Este compromiso (tamaño del fragmento vs superposición) es clave para la eficiencia de RAG:
92
+
93
+ - Demasiado pequeño → obtienes ruido.
94
+ - Demasiado grande → explotas el tamaño del contexto.
95
+
96
+ ## Paso 3: Generación de Embeddings
97
+
98
+ Una vez que los documentos están fragmentados, generamos **embeddings** — vectores de alta dimensión que representan cada fragmento.
99
+
100
+ Usé el modelo text-embedding-3-large de OpenAI, pero podrías usar cualquier modelo moderno de embeddings.
101
+
102
+ **Ejemplo 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 vector es una huella matemática del texto, que permite la búsqueda por similitud.
113
+
114
+ ## Paso 4: Indexación y Almacenamiento de Embeddings
115
+
116
+ Para evitar regenerar embeddings múltiples veces, los almacené en embeddings.json.
117
+
118
+ En producción, probablemente querrás una base de datos vectorial como:
119
+
120
+ - Chroma
121
+ - Qdrant
122
+ - Pinecone
123
+ - FAISS, Weaviate, Milvus, etc.
124
+
125
+ Las bases de datos vectoriales manejan la indexación, escalabilidad y búsqueda rápida. Pero para mi prototipo, un JSON local funcionó bien.
126
+
127
+ ## Paso 5: Recuperación con Similitud del Coseno
128
+
129
+ Cuando un usuario hace una pregunta:
130
+
131
+ 1. Generar un embedding para la consulta.
132
+ 2. Compararlo con todos los embeddings de los documentos usando **similitud del coseno**.
133
+ 3. Mantener solo los N fragmentos más similares.
134
+
135
+ La similitud del coseno mide el ángulo entre dos vectores. Una coincidencia perfecta obtiene un puntaje de **1.0**.
136
+
137
+ De esta manera, el sistema encuentra los pasajes del documento más cercanos a la consulta.
138
+
139
+ ## Paso 6: Aumento + Generación
140
+
141
+ Ahora viene la magia. Tomamos los fragmentos principales y los inyectamos en el **prompt del sistema** para ChatGPT.
142
+
143
+ Eso significa que el modelo responde como si esos fragmentos fueran parte de la conversación.
144
+
145
+ El resultado: respuestas precisas y **basadas en la documentación**.
146
+
147
+ ## Paso 7: Registro de Consultas de Usuarios
148
+
149
+ Este es el superpoder oculto.
150
+
151
+ Cada pregunta realizada se almacena. Con el tiempo, construyes un conjunto de datos de:
152
+
153
+ - Preguntas más frecuentes (ideal para FAQs)
154
+ - Preguntas sin respuesta (documentación faltante o poco clara)
155
+ - Solicitudes de funciones disfrazadas de preguntas (“¿Se integra con X?”)
156
+ - Casos de uso emergentes que no habías previsto
157
+
158
+ Esto convierte a tu asistente RAG en una **herramienta continua de investigación de usuarios**.
159
+
160
+ ## ¿Cuánto Cuesta?
161
+
162
+ Una objeción común a RAG es el costo. En la práctica, es sorprendentemente barato:
163
+
164
+ - Generar embeddings para ~200 documentos toma alrededor de **5 minutos** y cuesta **1–2 euros**.
165
+ - La función de búsqueda en documentos es 100% gratuita.
166
+ - Para las consultas, usamos gpt-4o-latest sin el modo de “pensamiento”. En Intlayer, vemos alrededor de **300 consultas de chat por mes**, y la factura de la API de OpenAI rara vez supera los **10 $**.
167
+
168
+ Además de eso, puedes incluir el costo de alojamiento.
169
+
170
+ ## Detalles de Implementación
171
+
172
+ Stack:
173
+
174
+ - Monorepo: espacio de trabajo pnpm
175
+ - Paquete de documentación: Node.js / TypeScript / API de OpenAI
176
+ - Frontend: Next.js / React / Tailwind CSS
177
+ - Backend: ruta API de Node.js / API de OpenAI
178
+
179
+ El paquete `@smart-doc/docs` es un paquete TypeScript que maneja el procesamiento de la documentación. Cuando se agrega o modifica un archivo markdown, el paquete incluye un script `build` que reconstruye la lista de documentación en cada idioma, genera embeddings y los almacena en un archivo `embeddings.json`.
180
+
181
+ Para el frontend, usamos una aplicación Next.js que proporciona:
182
+
183
+ - Renderizado de Markdown a HTML
184
+ - Una barra de búsqueda para encontrar documentación relevante
185
+ - Una interfaz de chatbot para hacer preguntas sobre la documentación
186
+
187
+ Para realizar una búsqueda en la documentación, la aplicación Next.js incluye una ruta API que llama a una función del paquete `@smart-doc/docs` para recuperar fragmentos de documentación que coincidan con la consulta. Usando estos fragmentos, podemos devolver una lista de páginas de documentación relevantes para la búsqueda del usuario.
188
+
189
+ Para la funcionalidad del chatbot, seguimos el mismo proceso de búsqueda pero además inyectamos los fragmentos de documentación recuperados en el prompt enviado a ChatGPT.
190
+
191
+ Aquí hay un ejemplo de un prompt enviado a ChatGPT:
192
+
193
+ Prompt del sistema:
194
+
195
+ ```txt
196
+ Eres un asistente útil que puede responder preguntas sobre la documentación de Intlayer.
197
+
198
+ Fragmentos relacionados:
199
+
200
+ -----
201
+ docName: "getting-started"
202
+ docChunk: "1/3"
203
+ docUrl: "https://example.com/docs/es/getting-started"
204
+ ---
205
+
206
+ # Cómo empezar
207
+
208
+ ...
209
+
210
+ -----
211
+ docName: "another-doc"
212
+ docChunk: "1/5"
213
+ docUrl: "https://example.com/docs/es/another-doc"
214
+ ---
215
+
216
+ # Otro documento
217
+
218
+ ...
219
+ ```
220
+
221
+ Consulta del usuario:
222
+
223
+ ```txt
224
+ ¿Cómo empezar?
225
+ ```
226
+
227
+ Usamos SSE para transmitir la respuesta desde la ruta API.
228
+
229
+ Como se mencionó, usamos gpt-4-turbo sin modo "pensando". Las respuestas son relevantes y la latencia es baja.
230
+ Experimentamos con gpt-5, pero la latencia era demasiado alta (a veces hasta 15 segundos para una respuesta). Pero lo revisaremos en el futuro.
231
+
232
+ 👉 [Prueba la demo aquí](https://intlayer.org/doc/why) 👉 [Consulta la plantilla de código en GitHub](https://github.com/aymericzip/smart_doc_RAG)
233
+
234
+ ## Ir más allá
235
+
236
+ Este proyecto es una implementación mínima. Pero puedes ampliarlo de muchas maneras:
237
+
238
+ - Servidor MCP → la función de búsqueda en la documentación a un servidor MCP para conectar la documentación con cualquier asistente de IA
239
+
240
+ - Bases de datos vectoriales → escalar a millones de fragmentos de documentación
241
+ - LangChain / LlamaIndex → frameworks listos para usar para pipelines RAG
242
+ - Paneles de análisis → visualizar consultas de usuarios y puntos problemáticos
243
+ - Recuperación multisource → obtener no solo documentos, sino entradas de bases de datos, publicaciones de blogs, tickets, etc.
244
+ - Mejora en el prompting → reordenamiento, filtrado y búsqueda híbrida (palabra clave + semántica)
245
+
246
+ ## Limitaciones que hemos encontrado
247
+
248
+ - La segmentación y el solapamiento son empíricos. El equilibrio correcto (tamaño del fragmento, porcentaje de solapamiento, número de fragmentos recuperados) requiere iteración y pruebas.
249
+ - Los embeddings no se regeneran automáticamente cuando los documentos cambian. Nuestro sistema reinicia los embeddings para un archivo solo si el número de fragmentos difiere de lo almacenado.
250
+ - En este prototipo, los embeddings se almacenan en JSON. Esto funciona para demostraciones pero contamina Git. En producción, es mejor usar una base de datos o un almacén vectorial dedicado.
251
+
252
+ ## Por qué esto importa más allá de la documentación
253
+
254
+ La parte interesante no es solo el chatbot. Es el **bucle de retroalimentación**.
255
+
256
+ Con RAG, no solo respondes:
257
+
258
+ - Aprendes qué confunde a los usuarios.
259
+ - Descubres qué características esperan.
260
+ - Adaptas tu estrategia de producto basándote en consultas reales.
261
+
262
+ **Ejemplo:**
263
+
264
+ Imagina lanzar una nueva función y ver instantáneamente:
265
+
266
+ - El 50% de las preguntas son sobre el mismo paso de configuración poco claro
267
+ - Los usuarios piden repetidamente una integración que aún no soportas
268
+ - La gente busca términos que revelan un nuevo caso de uso
269
+
270
+ Eso es **inteligencia de producto** directamente de tus usuarios.
271
+
272
+ ## Conclusión
273
+
274
+ - En este prototipo, los embeddings se almacenan en JSON. Esto funciona para demostraciones pero contamina Git. En producción, es mejor usar una base de datos o un almacén vectorial dedicado.
275
+
276
+ ## Por qué esto importa más allá de la documentación
277
+
278
+ La parte interesante no es solo el chatbot. Es el **ciclo de retroalimentación**.
279
+
280
+ Con RAG, no solo respondes:
281
+
282
+ - Aprendes qué confunde a los usuarios.
283
+ - Descubres qué funciones esperan.
284
+ - Adaptas tu estrategia de producto basándote en consultas reales.
285
+
286
+ **Ejemplo:**
287
+
288
+ Imagina lanzar una nueva función y ver instantáneamente:
289
+
290
+ - El 50% de las preguntas son sobre el mismo paso de configuración poco claro
291
+ - Los usuarios piden repetidamente una integración que aún no soportas
292
+ - La gente busca términos que revelan un nuevo caso de uso
293
+
294
+ Eso es **inteligencia de producto** directamente de tus usuarios.
295
+
296
+ ## Conclusión
297
+
298
+ RAG es una de las formas más simples y poderosas de hacer que los LLMs sean prácticos. Al combinar **recuperación + generación**, puedes convertir documentos estáticos en un **asistente inteligente** y, al mismo tiempo, obtener un flujo continuo de información sobre el producto.
299
+
300
+ Para mí, este proyecto mostró que RAG no es solo un truco técnico. Es una forma de transformar la documentación en:
301
+
302
+ - un sistema de soporte interactivo
303
+ - un canal de retroalimentación
304
+ - una herramienta de estrategia de producto
305
+
306
+ 👉 [Prueba la demo aquí](https://intlayer.org/doc/why) 👉 [Consulta la plantilla de código en GitHub](https://github.com/aymericzip/smart_doc_RAG)
307
+
308
+ Y si también estás experimentando con RAG, me encantaría saber cómo lo estás usando.
@@ -0,0 +1,308 @@
1
+ ---
2
+ createdAt: 2025-09-10
3
+ updatedAt: 2025-09-10
4
+ title: Création d’un assistant de documentation propulsé par RAG (Segmentation, Embeddings et Recherche)
5
+ description: Création d’un assistant de documentation propulsé par RAG (Segmentation, Embeddings et Recherche)
6
+ keywords:
7
+ - RAG
8
+ - Documentation
9
+ - Assistant
10
+ - Segmentation
11
+ - Embeddings
12
+ - Recherche
13
+ slugs:
14
+ - blog
15
+ - rag-powered-documentation-assistant
16
+ ---
17
+
18
+ # Création d’un assistant de documentation propulsé par RAG (Segmentation, Embeddings et Recherche)
19
+
20
+ ## Ce que vous obtenez
21
+
22
+ J’ai créé un assistant de documentation propulsé par RAG et l’ai emballé dans un boilerplate que vous pouvez utiliser immédiatement.
23
+
24
+ - Livré avec une application prête à l’emploi (Next.js + API OpenAI)
25
+ - Comprend une pipeline RAG fonctionnelle (segmentation, embeddings, similarité cosinus)
26
+ - Fournit une interface complète de chatbot construite en React
27
+ - Tous les composants UI sont entièrement modifiables avec Tailwind CSS
28
+ - Enregistre chaque requête utilisateur pour aider à identifier les documents manquants, les points de douleur des utilisateurs et les opportunités produit
29
+
30
+ 👉 [Démo en direct](https://intlayer.org/doc/why) 👉 [Boilerplate de code](https://github.com/aymericzip/smart_doc_RAG)
31
+
32
+ ## Introduction
33
+
34
+ Si vous vous êtes déjà perdu dans une documentation, à faire défiler sans fin pour trouver une réponse, vous savez à quel point cela peut être pénible. Les docs sont utiles, mais elles sont statiques et leur recherche est souvent maladroite.
35
+
36
+ C’est là qu’intervient **RAG (Retrieval-Augmented Generation)**. Au lieu de forcer les utilisateurs à fouiller dans le texte, nous pouvons combiner la **récupération** (trouver les bonnes parties de la doc) avec la **génération** (laisser un LLM l’expliquer naturellement).
37
+
38
+ Dans cet article, je vais vous expliquer comment j’ai construit un chatbot de documentation alimenté par RAG et comment il ne se contente pas d’aider les utilisateurs à trouver des réponses plus rapidement, mais offre également aux équipes produit une nouvelle manière de comprendre les points de douleur des utilisateurs.
39
+
40
+ ## Pourquoi utiliser RAG pour la documentation ?
41
+
42
+ RAG est devenu une approche populaire pour une raison : c’est l’une des façons les plus pratiques de rendre les grands modèles de langage réellement utiles.
43
+
44
+ Pour la documentation, les avantages sont clairs :
45
+
46
+ - Réponses instantanées : les utilisateurs posent des questions en langage naturel et obtiennent des réponses pertinentes.
47
+ - Meilleur contexte : le modèle ne voit que les sections de documentation les plus pertinentes, réduisant ainsi les hallucinations.
48
+ - Recherche qui semble humaine : un mélange d’Algolia + FAQ + chatbot, tout en un.
49
+ - Boucle de rétroaction : en stockant les requêtes, vous découvrez ce avec quoi les utilisateurs ont vraiment du mal.
50
+
51
+ Ce dernier point est crucial. Un système RAG ne se contente pas de répondre aux questions, il vous indique ce que les gens demandent. Cela signifie :
52
+
53
+ - Vous découvrez des informations manquantes dans votre documentation.
54
+ - Vous voyez apparaître des demandes de fonctionnalités.
55
+ - Vous repérez des tendances qui peuvent même orienter la stratégie produit.
56
+
57
+ Ainsi, RAG n’est pas seulement un outil de support. C’est aussi un **moteur de découverte produit**.
58
+
59
+ ## Comment fonctionne le pipeline RAG
60
+
61
+ ![RAG Pipeline](https://github.com/aymericzip/intlayer/blob/main/docs/assets/rag_flow.svg)
62
+
63
+ À un niveau élevé, voici la recette que j’ai utilisée :
64
+
65
+ 1. **Découpage de la documentation** De gros fichiers Markdown sont divisés en morceaux. Le découpage permet de fournir comme contexte uniquement les parties pertinentes de la documentation.
66
+ 2. **Génération des embeddings** Chaque morceau est transformé en vecteur en utilisant l’API d’embeddings d’OpenAI (text-embedding-3-large) ou une base de données vectorielle (Chroma, Qdrant, Pinecone).
67
+ 3. **Indexation et stockage** Les embeddings sont stockés dans un simple fichier JSON (pour ma démo), mais en production, vous utiliseriez probablement une base de données vectorielle.
68
+ 4. **Récupération (R dans RAG)** Une requête utilisateur est transformée en embedding, la similarité cosinus est calculée, et les chunks les plus pertinents sont récupérés.
69
+ 5. **Augmentation + Génération (AG dans RAG)** Ces chunks sont injectés dans le prompt pour ChatGPT, afin que le modèle réponde avec le contexte réel de la documentation.
70
+ 6. **Enregistrement des requêtes pour feedback** Chaque requête utilisateur est stockée. C’est une mine d’or pour comprendre les points de douleur, les documents manquants ou les nouvelles opportunités.
71
+
72
+ ## Étape 1 : Lecture des Docs
73
+
74
+ La première étape était simple : j’avais besoin d’un moyen pour scanner un dossier docs/ à la recherche de tous les fichiers .md. En utilisant Node.js et glob, j’ai récupéré le contenu de chaque fichier Markdown en mémoire.
75
+
76
+ Cela maintient la flexibilité du pipeline : au lieu de Markdown, vous pourriez récupérer les documents depuis une base de données, un CMS, ou même une API.
77
+
78
+ ## Étape 2 : Découpage de la documentation
79
+
80
+ Pourquoi découper ? Parce que les modèles de langage ont des **limites de contexte**. Leur fournir un livre entier de documentation ne fonctionnera pas.
81
+
82
+ L’idée est donc de diviser le texte en morceaux gérables (par exemple 500 tokens chacun) avec un chevauchement (par exemple 100 tokens). Le chevauchement assure la continuité pour ne pas perdre le sens aux frontières des morceaux.
83
+
84
+ **Exemple :**
85
+
86
+ - Morceau 1 → « …la vieille bibliothèque que beaucoup avaient oubliée. Ses étagères imposantes étaient remplies de livres… »
87
+ - Morceau 2 → « …les étagères étaient remplies de livres de tous genres imaginables, chacun murmurant des histoires… »
88
+
89
+ Le chevauchement garantit que les deux morceaux contiennent un contexte partagé, ce qui rend la récupération cohérente.
90
+
91
+ Ce compromis (taille des chunks vs chevauchement) est essentiel pour l'efficacité du RAG :
92
+
93
+ - Trop petit → vous obtenez du bruit.
94
+ - Trop grand → vous explosez la taille du contexte.
95
+
96
+ ## Étape 3 : Génération des embeddings
97
+
98
+ Une fois les documents découpés en chunks, nous générons des **embeddings** — des vecteurs de haute dimension représentant chaque chunk.
99
+
100
+ J'ai utilisé le modèle text-embedding-3-large d'OpenAI, mais vous pouvez utiliser n'importe quel modèle d'embedding moderne.
101
+
102
+ **Exemple d'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 éléments
109
+ ];
110
+ ```
111
+
112
+ Chaque vecteur est une empreinte mathématique du texte, permettant la recherche de similarité.
113
+
114
+ ## Étape 4 : Indexation et stockage des embeddings
115
+
116
+ Pour éviter de régénérer les embeddings plusieurs fois, je les ai stockés dans embeddings.json.
117
+
118
+ En production, vous voudriez probablement une base de données vectorielle telle que :
119
+
120
+ - Chroma
121
+ - Qdrant
122
+ - Pinecone
123
+ - FAISS, Weaviate, Milvus, etc.
124
+
125
+ Les bases de données vectorielles gèrent l’indexation, la scalabilité et la recherche rapide. Mais pour mon prototype, un JSON local a très bien fonctionné.
126
+
127
+ ## Étape 5 : Recherche avec similarité cosinus
128
+
129
+ Lorsqu’un utilisateur pose une question :
130
+
131
+ 1. Générer un embedding pour la requête.
132
+ 2. Le comparer à tous les embeddings des documents en utilisant la **similarité cosinus**.
133
+ 3. Ne garder que les N chunks les plus similaires.
134
+
135
+ La similarité cosinus mesure l’angle entre deux vecteurs. Une correspondance parfaite obtient un score de **1.0**.
136
+
137
+ Ainsi, le système trouve les passages de documents les plus proches de la requête.
138
+
139
+ ## Étape 6 : Augmentation + Génération
140
+
141
+ Voici la magie. Nous prenons les meilleurs chunks et les injectons dans le **prompt système** pour ChatGPT.
142
+
143
+ Cela signifie que le modèle répond comme si ces extraits faisaient partie de la conversation.
144
+
145
+ Le résultat : des réponses précises, **fondées sur la documentation**.
146
+
147
+ ## Étape 7 : Enregistrement des requêtes utilisateur
148
+
149
+ C’est la superpuissance cachée.
150
+
151
+ Chaque question posée est stockée. Au fil du temps, vous constituez un ensemble de données comprenant :
152
+
153
+ - Les questions les plus fréquentes (idéal pour les FAQ)
154
+ - Les questions sans réponse (documentation manquante ou peu claire)
155
+ - Les demandes de fonctionnalités déguisées en questions (« Est-ce que cela s’intègre avec X ? »)
156
+ - Les cas d’utilisation émergents auxquels vous n’aviez pas pensé
157
+
158
+ Cela transforme votre assistant RAG en un **outil continu de recherche utilisateur**.
159
+
160
+ ## Quel est le coût ?
161
+
162
+ Une objection courante au RAG est le coût. En pratique, c’est étonnamment peu cher :
163
+
164
+ - Générer des embeddings pour environ 200 documents prend environ **5 minutes** et coûte **1 à 2 euros**.
165
+ - La fonctionnalité de recherche dans la documentation est 100 % gratuite.
166
+ - Pour les requêtes, nous utilisons gpt-4o-latest sans le mode « réflexion ». Sur Intlayer, nous observons environ **300 requêtes de chat par mois**, et la facture de l’API OpenAI dépasse rarement **10 $**.
167
+
168
+ En plus de cela, vous pouvez inclure le coût d’hébergement.
169
+
170
+ ## Détails de l’implémentation
171
+
172
+ Stack :
173
+
174
+ - Monorepo : espace de travail pnpm
175
+ - Package doc : Node.js / TypeScript / API OpenAI
176
+ - Frontend : Next.js / React / Tailwind CSS
177
+ - Backend : route API Node.js / API OpenAI
178
+
179
+ Le package `@smart-doc/docs` est un package TypeScript qui gère le traitement de la documentation. Lorsqu’un fichier markdown est ajouté ou modifié, le package inclut un script `build` qui reconstruit la liste de documentation dans chaque langue, génère des embeddings, et les stocke dans un fichier `embeddings.json`.
180
+
181
+ Pour le frontend, nous utilisons une application Next.js qui fournit :
182
+
183
+ - Rendu Markdown vers HTML
184
+ - Une barre de recherche pour trouver la documentation pertinente
185
+ - Une interface de chatbot pour poser des questions sur la documentation
186
+
187
+ Pour effectuer une recherche dans la documentation, l’application Next.js inclut une route API qui appelle une fonction du package `@smart-doc/docs` pour récupérer les segments de documentation correspondant à la requête. En utilisant ces segments, nous pouvons retourner une liste de pages de documentation pertinentes pour la recherche de l’utilisateur.
188
+
189
+ Pour la fonctionnalité de chatbot, nous suivons le même processus de recherche mais injectons en plus les segments de documentation récupérés dans le prompt envoyé à ChatGPT.
190
+
191
+ Voici un exemple de prompt envoyé à ChatGPT :
192
+
193
+ Prompt système :
194
+
195
+ ```txt
196
+ Vous êtes un assistant utile capable de répondre aux questions concernant la documentation Intlayer.
197
+
198
+ Segments liés :
199
+
200
+ -----
201
+ docName: "getting-started"
202
+ docChunk: "1/3"
203
+ docUrl: "https://example.com/docs/fr/getting-started"
204
+ ---
205
+
206
+ # Comment démarrer
207
+
208
+ ...
209
+
210
+ -----
211
+ docName: "another-doc"
212
+ docChunk: "1/5"
213
+ docUrl: "https://example.com/docs/fr/another-doc"
214
+ ---
215
+
216
+ # Un autre document
217
+
218
+ ...
219
+ ```
220
+
221
+ Requête utilisateur :
222
+
223
+ ```txt
224
+ Comment démarrer ?
225
+ ```
226
+
227
+ Nous utilisons SSE pour diffuser la réponse depuis la route API.
228
+
229
+ Comme mentionné, nous utilisons gpt-4-turbo sans mode "réflexion". Les réponses sont pertinentes et la latence est faible.
230
+ Nous avons expérimenté avec gpt-5, mais la latence était trop élevée (parfois jusqu'à 15 secondes pour une réponse). Nous y reviendrons à l'avenir.
231
+
232
+ 👉 [Essayez la démo ici](https://intlayer.org/doc/why) 👉 [Consultez le modèle de code sur GitHub](https://github.com/aymericzip/smart_doc_RAG)
233
+
234
+ ## Aller plus loin
235
+
236
+ Ce projet est une implémentation minimale. Mais vous pouvez l'étendre de nombreuses façons :
237
+
238
+ - Serveur MCP → la fonction de recherche dans la documentation vers un serveur MCP pour connecter la documentation à n'importe quel assistant IA
239
+
240
+ - Bases de données vectorielles → évoluer jusqu'à des millions de fragments de documentation
241
+ - LangChain / LlamaIndex → frameworks prêts à l'emploi pour les pipelines RAG
242
+ - Tableaux de bord analytiques → visualiser les requêtes des utilisateurs et les points de douleur
243
+ - Recherche multi-source → extraire non seulement des documents, mais aussi des entrées de base de données, articles de blog, tickets, etc.
244
+ - Amélioration des prompts → reranking, filtrage, et recherche hybride (mot-clé + sémantique)
245
+
246
+ ## Limitations rencontrées
247
+
248
+ - Le découpage en fragments et le chevauchement sont empiriques. Le bon équilibre (taille des fragments, pourcentage de chevauchement, nombre de fragments récupérés) nécessite des itérations et des tests.
249
+ - Les embeddings ne sont pas régénérés automatiquement lorsque les documents changent. Notre système réinitialise les embeddings d'un fichier uniquement si le nombre de fragments diffère de ce qui est stocké.
250
+ - Dans ce prototype, les embeddings sont stockés en JSON. Cela fonctionne pour des démonstrations mais pollue Git. En production, une base de données ou un magasin vectoriel dédié est préférable.
251
+
252
+ ## Pourquoi c’est important au-delà de la documentation
253
+
254
+ La partie intéressante n’est pas seulement le chatbot. C’est la **boucle de rétroaction**.
255
+
256
+ Avec RAG, vous ne vous contentez pas de répondre :
257
+
258
+ - Vous apprenez ce qui embrouille les utilisateurs.
259
+ - Vous découvrez quelles fonctionnalités ils attendent.
260
+ - Vous adaptez votre stratégie produit en fonction des requêtes réelles.
261
+
262
+ **Exemple :**
263
+
264
+ Imaginez lancer une nouvelle fonctionnalité et voir instantanément :
265
+
266
+ - 50 % des questions portent sur la même étape de configuration peu claire
267
+ - Les utilisateurs demandent à plusieurs reprises une intégration que vous ne supportez pas encore
268
+ - Les gens recherchent des termes qui révèlent un nouveau cas d’usage
269
+
270
+ C’est de **l’intelligence produit** directement issue de vos utilisateurs.
271
+
272
+ ## Conclusion
273
+
274
+ - Dans ce prototype, les embeddings sont stockés en JSON. Cela fonctionne pour des démonstrations mais pollue Git. En production, une base de données ou un magasin vectoriel dédié est préférable.
275
+
276
+ ## Pourquoi c’est important au-delà de la documentation
277
+
278
+ L’aspect intéressant ne se limite pas au chatbot. C’est la **boucle de rétroaction**.
279
+
280
+ Avec RAG, vous ne faites pas que répondre :
281
+
282
+ - Vous apprenez ce qui embrouille les utilisateurs.
283
+ - Vous découvrez quelles fonctionnalités ils attendent.
284
+ - Vous adaptez votre stratégie produit en fonction des requêtes réelles.
285
+
286
+ **Exemple :**
287
+
288
+ Imaginez lancer une nouvelle fonctionnalité et voir instantanément :
289
+
290
+ - 50 % des questions portent sur la même étape de configuration peu claire
291
+ - Les utilisateurs demandent à plusieurs reprises une intégration que vous ne supportez pas encore
292
+ - Les gens recherchent des termes qui révèlent un nouveau cas d’usage
293
+
294
+ C’est de **l’intelligence produit** directement issue de vos utilisateurs.
295
+
296
+ ## Conclusion
297
+
298
+ RAG est l’une des manières les plus simples et puissantes de rendre les LLM pratiques. En combinant **récupération + génération**, vous pouvez transformer des docs statiques en un **assistant intelligent** et, en même temps, obtenir un flux continu d’informations produit.
299
+
300
+ Pour moi, ce projet a montré que RAG n’est pas qu’un simple tour technique. C’est une façon de transformer la documentation en :
301
+
302
+ - un système de support interactif
303
+ - un canal de retour d’expérience
304
+ - un outil de stratégie produit
305
+
306
+ 👉 [Essayez la démo ici](https://intlayer.org/doc/why) 👉 [Consultez le modèle de code sur GitHub](https://github.com/aymericzip/smart_doc_RAG)
307
+
308
+ Et si vous expérimentez aussi avec RAG, j’aimerais beaucoup savoir comment vous l’utilisez.