@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,282 @@
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 (التوليد المعزز بالاسترجاع)**. بدلاً من إجبار المستخدمين على التنقيب في النصوص، يمكننا دمج **الاسترجاع** (إيجاد الأجزاء الصحيحة من الوثيقة) مع **التوليد** (السماح لنموذج اللغة الكبير بشرحها بشكل طبيعي).
37
+
38
+ في هذا المنشور، سأرشدك خلال كيفية بناء روبوت دردشة للوثائق مدعوم بتقنية RAG، وكيف أنه لا يساعد المستخدمين فقط في العثور على الإجابات بشكل أسرع، بل يمنح فرق المنتج أيضًا طريقة جديدة لفهم نقاط الألم لدى المستخدمين.
39
+
40
+ ## لماذا نستخدم RAG للوثائق؟
41
+
42
+ أصبحت تقنية RAG نهجًا شائعًا لسبب وجيه: فهي واحدة من أكثر الطرق العملية لجعل نماذج اللغة الكبيرة مفيدة بالفعل.
43
+
44
+ بالنسبة للوثائق، الفوائد واضحة:
45
+
46
+ - إجابات فورية: يطرح المستخدمون أسئلتهم بلغة طبيعية ويحصلون على ردود ذات صلة.
47
+ - سياق أفضل: يرى النموذج فقط أقسام الوثائق الأكثر صلة، مما يقلل من الهلوسة.
48
+ - بحث بشعور بشري: أشبه بـ Algolia + الأسئلة الشائعة + روبوت الدردشة، مدمجة في واحد.
49
+ - حلقة تغذية راجعة: من خلال تخزين الاستفسارات، تكشف ما يعاني منه المستخدمون حقًا.
50
+
51
+ هذه النقطة الأخيرة حاسمة. نظام RAG لا يجيب فقط على الأسئلة، بل يخبرك بما يسأله الناس. هذا يعني:
52
+
53
+ - تكتشف المعلومات المفقودة في وثائقك.
54
+ - ترى طلبات الميزات تظهر.
55
+ - تلاحظ أنماطًا يمكن أن توجه حتى استراتيجية المنتج.
56
+
57
+ لذا، RAG ليس مجرد أداة دعم. إنه أيضًا **محرك اكتشاف المنتج**.
58
+
59
+ ## كيف يعمل خط أنابيب RAG
60
+
61
+ على مستوى عالٍ، هذه هي الوصفة التي استخدمتها:
62
+
63
+ 1. **تقسيم الوثائق** يتم تقسيم ملفات Markdown الكبيرة إلى أجزاء. يسمح التقسيم بتوفير كجزء من السياق فقط الأجزاء ذات الصلة من الوثائق.
64
+ 2. **توليد التضمينات** يتم تحويل كل جزء إلى متجه باستخدام واجهة برمجة تطبيقات التضمين من OpenAI (text-embedding-3-large) أو قاعدة بيانات متجهات (Chroma، Qdrant، Pinecone).
65
+ 3. **الفهرسة والتخزين** يتم تخزين التضمينات في ملف JSON بسيط (لعرضي التوضيحي)، ولكن في الإنتاج، من المحتمل أن تستخدم قاعدة بيانات متجهات.
66
+ 4. **الاسترجاع (R في RAG)** يتم تضمين استعلام المستخدم، ويتم حساب تشابه جيب التمام، ويتم استرجاع الأجزاء الأعلى تطابقًا.
67
+ 5. **التعزيز + التوليد (AG في RAG)** يتم حقن تلك الأجزاء في الموجه لـ ChatGPT، بحيث يجيب النموذج بسياق الوثائق الفعلي.
68
+ 6. **تسجيل الاستعلامات للتغذية الراجعة** يتم تخزين كل استعلام مستخدم. هذا أمر ثمين لفهم نقاط الألم، الوثائق المفقودة، أو الفرص الجديدة.
69
+
70
+ ## الخطوة 1: قراءة الوثائق
71
+
72
+ كانت الخطوة الأولى بسيطة: كنت بحاجة إلى طريقة لمسح مجلد docs/ لجميع ملفات .md. باستخدام Node.js و glob، قمت بجلب محتوى كل ملف Markdown إلى الذاكرة.
73
+
74
+ هذا يحافظ على مرونة خط المعالجة: بدلاً من Markdown، يمكنك جلب الوثائق من قاعدة بيانات، أو نظام إدارة محتوى، أو حتى من API.
75
+
76
+ ## الخطوة 2: تقسيم الوثائق إلى أجزاء
77
+
78
+ لماذا التقسيم؟ لأن نماذج اللغة لها **حدود سياقية**. تغذيتهم بكتاب كامل من الوثائق لن تنجح.
79
+
80
+ لذا الفكرة هي تقسيم النص إلى أجزاء قابلة للإدارة (مثلًا 500 رمز لكل جزء) مع تداخل (مثلًا 100 رمز). يضمن التداخل الاستمرارية حتى لا تفقد المعنى عند حدود الأجزاء.
81
+
82
+ **مثال:**
83
+
84
+ - الجزء 1 → "...المكتبة القديمة التي نسيها الكثيرون. كانت رفوفها الشاهقة مليئة بالكتب..."
85
+ - الجزء 2 → "...كانت الرفوف مليئة بالكتب من كل نوع يمكن تخيله، كل منها يهمس بقصص..."
86
+
87
+ يضمن التداخل أن يحتوي كلا الجزأين على سياق مشترك، بحيث يظل الاسترجاع متماسكًا.
88
+
89
+ هذا التوازن (حجم الجزء مقابل التداخل) هو المفتاح لكفاءة RAG:
90
+
91
+ - صغير جدًا → تحصل على ضوضاء.
92
+ - كبير جدًا → يتضخم حجم السياق.
93
+
94
+ ## الخطوة 3: توليد التضمينات
95
+
96
+ بمجرد تقسيم الوثائق إلى أجزاء، نقوم بتوليد **التضمينات** — وهي متجهات عالية الأبعاد تمثل كل جزء.
97
+
98
+ استخدمت نموذج OpenAI المسمى text-embedding-3-large، لكن يمكنك استخدام أي نموذج تضمين حديث.
99
+
100
+ **مثال على تضمين:**
101
+
102
+ ```js
103
+ [
104
+ -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712,
105
+ -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323,
106
+ //...+1533 elements
107
+ ];
108
+ ```
109
+
110
+ كل متجه هو بصمة رياضية للنص، مما يتيح البحث عن التشابه.
111
+
112
+ ## الخطوة 4: فهرسة وتخزين التضمينات
113
+
114
+ لتجنب إعادة توليد التضمينات عدة مرات، خزنتها في ملف embeddings.json.
115
+
116
+ في بيئة الإنتاج، من المحتمل أن ترغب في استخدام قاعدة بيانات متجهات مثل:
117
+
118
+ - Chroma
119
+ - Qdrant
120
+ - Pinecone
121
+ - FAISS، Weaviate، Milvus، إلخ.
122
+
123
+ تتعامل قواعد بيانات المتجهات مع الفهرسة، وقابلية التوسع، والبحث السريع. لكن بالنسبة للنموذج الأولي الخاص بي، كان ملف JSON محلي كافياً.
124
+
125
+ ## الخطوة 5: الاسترجاع باستخدام تشابه جيب التمام (Cosine Similarity)
126
+
127
+ عندما يطرح المستخدم سؤالاً:
128
+
129
+ 1. توليد تضمين (embedding) للاستعلام.
130
+ 2. مقارنته مع جميع تضمينات الوثائق باستخدام **تشابه جيب التمام**.
131
+ 3. الاحتفاظ فقط بأفضل N قطع نصية متشابهة.
132
+
133
+ يقيس تشابه جيب التمام الزاوية بين متجهين. التطابق الكامل يحصل على درجة **1.0**.
134
+
135
+ بهذه الطريقة، يجد النظام أقرب مقاطع من الوثائق للاستعلام.
136
+
137
+ ## الخطوة 6: التعزيز + التوليد
138
+
139
+ هنا تأتي السحر. نأخذ أفضل القطع النصية وندمجها في **موجه النظام** الخاص بـ ChatGPT.
140
+
141
+ هذا يعني أن النموذج يجيب كما لو أن تلك القطع النصية كانت جزءًا من المحادثة.
142
+
143
+ النتيجة: ردود دقيقة ومرتكزة على الوثائق.
144
+
145
+ ## الخطوة 7: تسجيل استعلامات المستخدم
146
+
147
+ هذه هي القوة الخفية.
148
+
149
+ يتم تخزين كل سؤال يُطرح. مع مرور الوقت، تبني مجموعة بيانات من:
150
+
151
+ - أكثر الأسئلة تكرارًا (مفيد جدًا لصفحات الأسئلة الشائعة)
152
+ - الأسئلة التي لم يتم الإجابة عليها (الوثائق مفقودة أو غير واضحة)
153
+ - طلبات الميزات التي تتنكر في شكل أسئلة ("هل يتكامل مع X؟")
154
+ - حالات استخدام ناشئة لم تكن مخططًا لها
155
+
156
+ هذا يحول مساعد RAG الخاص بك إلى **أداة بحث مستخدم مستمرة**.
157
+
158
+ ## ما هي التكلفة؟
159
+
160
+ أحد الاعتراضات الشائعة على RAG هو التكلفة. في الواقع، هي رخيصة بشكل مدهش:
161
+
162
+ - توليد التضمينات لحوالي 200 وثيقة يستغرق حوالي **5 دقائق** ويكلف **1–2 يورو**.
163
+ - ميزة البحث في الوثائق مجانية 100٪.
164
+ - بالنسبة للاستعلامات، نستخدم gpt-4o-latest بدون وضع "التفكير". في Intlayer، نرى حوالي **300 استعلام دردشة شهريًا**، وفاتورة OpenAI API نادرًا ما تتجاوز **10 دولارات**.
165
+
166
+ بالإضافة إلى ذلك، يمكنك تضمين تكلفة الاستضافة.
167
+
168
+ ## تفاصيل التنفيذ
169
+
170
+ التقنيات المستخدمة:
171
+
172
+ - Monorepo: مساحة عمل pnpm
173
+ - حزمة الوثائق: Node.js / TypeScript / OpenAI API
174
+ - الواجهة الأمامية: Next.js / React / Tailwind CSS
175
+ - الواجهة الخلفية: مسار API في Node.js / OpenAI API
176
+
177
+ حزمة `@smart-doc/docs` هي حزمة TypeScript تتعامل مع معالجة الوثائق. عند إضافة أو تعديل ملف ماركداون، تتضمن الحزمة سكريبت `build` يعيد بناء قائمة الوثائق بكل لغة، وينشئ التضمينات، ويخزنها في ملف `embeddings.json`.
178
+
179
+ بالنسبة للواجهة الأمامية، نستخدم تطبيق Next.js الذي يوفر:
180
+
181
+ - تحويل ماركداون إلى HTML
182
+ - شريط بحث للعثور على الوثائق ذات الصلة
183
+ - واجهة دردشة لطرح الأسئلة حول الوثائق
184
+
185
+ لإجراء بحث في الوثائق، يتضمن تطبيق Next.js مسار API يستدعي دالة في حزمة `@smart-doc/docs` لاسترجاع أجزاء الوثائق التي تطابق الاستعلام. باستخدام هذه الأجزاء، يمكننا إرجاع قائمة بصفحات الوثائق ذات الصلة ببحث المستخدم.
186
+
187
+ بالنسبة لوظيفة الدردشة الآلية، نتبع نفس عملية البحث ولكن نحقن أيضًا أجزاء الوثائق المسترجعة في الموجه المرسل إلى ChatGPT.
188
+
189
+ إليك مثال على موجه يُرسل إلى ChatGPT:
190
+
191
+ موجه النظام:
192
+
193
+ ```txt
194
+ أنت مساعد مفيد يمكنه الإجابة على الأسئلة حول وثائق Intlayer.
195
+
196
+ الأجزاء ذات الصلة:
197
+
198
+ -----
199
+ docName: "getting-started"
200
+ docChunk: "1/3"
201
+ docUrl: "https://example.com/docs/ar/getting-started"
202
+ ---
203
+
204
+ # كيفية البدء
205
+
206
+ ...
207
+
208
+ -----
209
+ docName: "another-doc"
210
+ docChunk: "1/5"
211
+ docUrl: "https://example.com/docs/ar/another-doc"
212
+ ---
213
+
214
+ # مستند آخر
215
+
216
+ ...
217
+ ```
218
+
219
+ استعلام المستخدم:
220
+
221
+ ```txt
222
+ كيف أبدأ؟
223
+ ```
224
+
225
+ نستخدم SSE لبث الاستجابة من مسار API.
226
+
227
+ كما ذُكر، نستخدم gpt-4-turbo بدون وضع "التفكير". الردود ذات صلة، والزمن المستغرق منخفض.
228
+ قمنا بتجربة gpt-5، لكن زمن الاستجابة كان مرتفعًا جدًا (أحيانًا يصل إلى 15 ثانية للرد). لكننا سنعيد النظر في ذلك في المستقبل.
229
+
230
+ 👉 [جرّب العرض التوضيحي هنا](https://intlayer.org/doc/why) 👉 [تحقق من قالب الكود على GitHub](https://github.com/aymericzip/smart_doc_RAG)
231
+
232
+ ## التوسع أكثر
233
+
234
+ هذا المشروع هو تنفيذ بسيط. لكن يمكنك توسيعه بطرق عديدة:
235
+
236
+ - خادم MCP → وظيفة البحث في الوثائق إلى خادم MCP لربط الوثائق بأي مساعد ذكاء اصطناعي
237
+
238
+ - قواعد بيانات المتجهات → التوسع إلى ملايين أجزاء الوثائق
239
+ - LangChain / LlamaIndex → أُطُر جاهزة لأنابيب RAG
240
+ - لوحات تحليلات → تصور استفسارات المستخدمين ونقاط الألم
241
+ - استرجاع متعدد المصادر → سحب ليس فقط الوثائق، بل أيضًا إدخالات قواعد البيانات، منشورات المدونات، التذاكر، إلخ.
242
+ - تحسين التوجيه → إعادة الترتيب، التصفية، والبحث الهجين (الكلمة المفتاحية + الدلالي)
243
+
244
+ ## القيود التي واجهناها
245
+
246
+ - التقسيم والتداخل تجريبيان. التوازن الصحيح (حجم الجزء، نسبة التداخل، عدد الأجزاء المسترجعة) يتطلب التكرار والاختبار.
247
+ - لا يتم إعادة توليد التضمينات تلقائيًا عند تغيير الوثائق. يقوم نظامنا بإعادة تعيين التضمينات لملف فقط إذا اختلف عدد الأجزاء عن المخزن.
248
+ - في هذا النموذج الأولي، يتم تخزين التضمينات في JSON. هذا يعمل للعروض التوضيحية ولكنه يلوث Git. في الإنتاج، من الأفضل استخدام قاعدة بيانات أو مخزن متجهات مخصص.
249
+
250
+ ## لماذا هذا مهم يتجاوز الوثائق
251
+
252
+ الجزء المثير للاهتمام ليس فقط الدردشة الآلية. إنه **حلقة التغذية الراجعة**.
253
+
254
+ مع RAG، أنت لا تجيب فقط:
255
+
256
+ - تتعلم ما يربك المستخدمين.
257
+ - تكتشف الميزات التي يتوقعونها.
258
+ - تعدل استراتيجية منتجك بناءً على الاستفسارات الحقيقية.
259
+
260
+ **مثال:**
261
+
262
+ تخيل إطلاق ميزة جديدة ورؤية على الفور:
263
+
264
+ - 50% من الأسئلة تدور حول نفس خطوة الإعداد غير الواضحة
265
+ - يطلب المستخدمون مرارًا وتكرارًا تكاملًا لا تدعمه بعد
266
+ - يبحث الناس عن مصطلحات تكشف عن حالة استخدام جديدة
267
+
268
+ هذا هو **ذكاء المنتج** مباشرة من مستخدميك.
269
+
270
+ ## الخلاصة
271
+
272
+ RAG هي واحدة من أبسط وأقوى الطرق لجعل نماذج اللغة الكبيرة (LLMs) عملية. من خلال الجمع بين **الاستخراج + التوليد**، يمكنك تحويل الوثائق الثابتة إلى **مساعد ذكي** وفي نفس الوقت الحصول على تدفق مستمر من رؤى المنتج.
273
+
274
+ بالنسبة لي، أظهر هذا المشروع أن RAG ليست مجرد خدعة تقنية. إنها طريقة لتحويل الوثائق إلى:
275
+
276
+ - نظام دعم تفاعلي
277
+ - قناة تغذية راجعة
278
+ - أداة لاستراتيجية المنتج
279
+
280
+ 👉 [جرب العرض التوضيحي هنا](https://intlayer.org/doc/ar/why) 👉 [تحقق من قالب الكود على GitHub](https://github.com/aymericzip/smart_doc_RAG)
281
+
282
+ وإذا كنت تجرب RAG أيضًا، أود أن أسمع كيف تستخدمها.
@@ -0,0 +1,282 @@
1
+ ---
2
+ createdAt: 2025-09-10
3
+ updatedAt: 2025-09-10
4
+ title: Aufbau eines RAG-basierten Dokumentationsassistenten (Chunking, Embeddings und Suche)
5
+ description: Aufbau eines RAG-basierten Dokumentationsassistenten (Chunking, Embeddings und Suche)
6
+ keywords:
7
+ - RAG
8
+ - Dokumentation
9
+ - Assistent
10
+ - Chunking
11
+ - Embeddings
12
+ - Suche
13
+ slugs:
14
+ - blog
15
+ - rag-powered-documentation-assistant
16
+ ---
17
+
18
+ # Aufbau eines RAG-basierten Dokumentationsassistenten (Chunking, Embeddings und Suche)
19
+
20
+ ## Was Sie erhalten
21
+
22
+ Ich habe einen RAG-basierten Dokumentationsassistenten entwickelt und als Boilerplate verpackt, die Sie sofort verwenden können.
23
+
24
+ - Wird mit einer einsatzbereiten Anwendung geliefert (Next.js + OpenAI API)
25
+ - Beinhaltet eine funktionierende RAG-Pipeline (Chunking, Embeddings, Kosinus-Ähnlichkeit)
26
+ - Bietet eine vollständige Chatbot-Benutzeroberfläche, die in React erstellt wurde
27
+ - Alle UI-Komponenten sind vollständig mit Tailwind CSS bearbeitbar
28
+ - Protokolliert jede Benutzeranfrage, um fehlende Dokumentationen, Benutzerprobleme und Produktchancen zu identifizieren
29
+
30
+ 👉 [Live-Demo](https://intlayer.org/doc/why) 👉 [Code-Boilerplate](https://github.com/aymericzip/smart_doc_RAG)
31
+
32
+ ## Einführung
33
+
34
+ Wenn Sie jemals in der Dokumentation verloren waren und endlos nach einer Antwort gesucht haben, wissen Sie, wie mühsam das sein kann. Dokumentationen sind nützlich, aber sie sind statisch, und die Suche fühlt sich oft umständlich an.
35
+
36
+ Hier kommt **RAG (Retrieval-Augmented Generation)** ins Spiel. Anstatt Benutzer dazu zu zwingen, sich durch den Text zu wühlen, können wir **Retrieval** (das Finden der richtigen Teile der Dokumentation) mit **Generation** (ein LLM erklärt es natürlich) kombinieren.
37
+
38
+ In diesem Beitrag zeige ich Ihnen, wie ich einen RAG-gestützten Dokumentations-Chatbot entwickelt habe und wie dieser nicht nur den Nutzern hilft, schneller Antworten zu finden, sondern auch Produktteams eine neue Möglichkeit bietet, Benutzerprobleme zu verstehen.
39
+
40
+ ## Warum RAG für Dokumentationen verwenden?
41
+
42
+ RAG ist aus gutem Grund zu einem beliebten Ansatz geworden: Es ist eine der praktischsten Methoden, um große Sprachmodelle tatsächlich nützlich zu machen.
43
+
44
+ Für Dokumentationen sind die Vorteile klar:
45
+
46
+ - Sofortige Antworten: Benutzer stellen Fragen in natürlicher Sprache und erhalten relevante Antworten.
47
+ - Besserer Kontext: Das Modell sieht nur die relevantesten Dokumentationsabschnitte, was Halluzinationen reduziert.
48
+ - Suche, die sich menschlich anfühlt: eher wie Algolia + FAQ + Chatbot in einem.
49
+ - Feedback-Schleife: Durch das Speichern von Anfragen erkennen Sie, womit Benutzer wirklich Schwierigkeiten haben.
50
+
51
+ Dieser letzte Punkt ist entscheidend. Ein RAG-System beantwortet nicht nur Fragen, sondern zeigt Ihnen auch, was die Leute wirklich fragen. Das bedeutet:
52
+
53
+ - Sie entdecken fehlende Informationen in Ihren Dokumentationen.
54
+ - Sie sehen, wie Feature-Anfragen entstehen.
55
+ - Sie erkennen Muster, die sogar die Produktstrategie leiten können.
56
+
57
+ RAG ist also nicht nur ein Support-Tool. Es ist auch eine **Produktentdeckungsmaschine**.
58
+
59
+ ## Wie die RAG-Pipeline funktioniert
60
+
61
+ Auf hoher Ebene sieht das Rezept, das ich verwendet habe, so aus:
62
+
63
+ 1. **Aufteilen der Dokumentation** Große Markdown-Dateien werden in Abschnitte (Chunks) aufgeteilt. Das Aufteilen ermöglicht es, nur die relevanten Teile der Dokumentation als Kontext bereitzustellen.
64
+ 2. **Erzeugen von Embeddings** Jeder Abschnitt wird mit der OpenAI-Embedding-API (text-embedding-3-large) oder einer Vektordatenbank (Chroma, Qdrant, Pinecone) in einen Vektor umgewandelt.
65
+ 3. **Indexierung & Speicherung** Embeddings werden in einer einfachen JSON-Datei gespeichert (für meine Demo), aber in der Produktion würden Sie wahrscheinlich eine Vektor-Datenbank verwenden.
66
+ 4. **Abruf (R in RAG)** Eine Benutzeranfrage wird eingebettet, die Kosinusähnlichkeit wird berechnet, und die am besten passenden Chunks werden abgerufen.
67
+ 5. **Erweiterung + Generierung (AG in RAG)** Diese Chunks werden in die Eingabeaufforderung für ChatGPT eingefügt, sodass das Modell mit tatsächlichem Dokumentationskontext antwortet.
68
+ 6. **Protokollierung von Anfragen für Feedback** Jede Benutzeranfrage wird gespeichert. Das ist Gold wert, um Schmerzpunkte, fehlende Dokumentationen oder neue Chancen zu verstehen.
69
+
70
+ ## Schritt 1: Die Dokumentation lesen
71
+
72
+ Der erste Schritt war einfach: Ich brauchte eine Möglichkeit, einen docs/-Ordner nach allen .md-Dateien zu durchsuchen. Mit Node.js und glob habe ich den Inhalt jeder Markdown-Datei in den Speicher geladen.
73
+
74
+ Dies hält die Pipeline flexibel: Anstatt Markdown könnten Sie die Dokumentation auch aus einer Datenbank, einem CMS oder sogar einer API abrufen.
75
+
76
+ ## Schritt 2: Aufteilen der Dokumentation
77
+
78
+ Warum aufteilen? Weil Sprachmodelle **Kontextgrenzen** haben. Ein ganzes Buch voller Dokumentation auf einmal zu füttern, funktioniert nicht.
79
+
80
+ Die Idee ist also, den Text in handhabbare Abschnitte (z. B. jeweils 500 Tokens) mit Überlappungen (z. B. 100 Tokens) zu zerlegen. Die Überlappung sorgt für Kontinuität, damit am Abschnittsrand keine Bedeutung verloren geht.
81
+
82
+ **Beispiel:**
83
+
84
+ - Abschnitt 1 → „…die alte Bibliothek, die viele vergessen hatten. Ihre hohen Regale waren mit Büchern gefüllt…“
85
+ - Abschnitt 2 → „…Regale waren mit Büchern aus allen erdenklichen Genres gefüllt, die alle Geschichten flüsterten…“
86
+
87
+ Die Überlappung stellt sicher, dass beide Abschnitte gemeinsamen Kontext enthalten, sodass die Suche kohärent bleibt.
88
+
89
+ Dieser Kompromiss (Chunk-Größe vs. Überlappung) ist entscheidend für die Effizienz von RAG:
90
+
91
+ - Zu klein → es entsteht Rauschen.
92
+ - Zu groß → der Kontext wird zu umfangreich.
93
+
94
+ ## Schritt 3: Erzeugen von Embeddings
95
+
96
+ Sobald die Dokumente in Chunks aufgeteilt sind, erzeugen wir **Embeddings** — hochdimensionale Vektoren, die jeden Chunk repräsentieren.
97
+
98
+ Ich habe das OpenAI-Modell text-embedding-3-large verwendet, aber Sie können jedes moderne Embedding-Modell nutzen.
99
+
100
+ **Beispiel für ein Embedding:**
101
+
102
+ ```js
103
+ [
104
+ -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712,
105
+ -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323,
106
+ //...+1533 Elemente
107
+ ];
108
+ ```
109
+
110
+ Jeder Vektor ist ein mathematischer Fingerabdruck des Textes und ermöglicht die Ähnlichkeitssuche.
111
+
112
+ ## Schritt 4: Indexieren & Speichern der Embeddings
113
+
114
+ Um zu vermeiden, dass Embeddings mehrfach neu generiert werden, habe ich sie in embeddings.json gespeichert.
115
+
116
+ In der Produktion möchten Sie wahrscheinlich eine Vektordatenbank wie folgende verwenden:
117
+
118
+ - Chroma
119
+ - Qdrant
120
+ - Pinecone
121
+ - FAISS, Weaviate, Milvus, etc.
122
+
123
+ Vektor-DBs übernehmen Indexierung, Skalierbarkeit und schnelle Suche. Für meinen Prototyp hat jedoch eine lokale JSON-Datei gut funktioniert.
124
+
125
+ ## Schritt 5: Abruf mit Kosinus-Ähnlichkeit
126
+
127
+ Wenn ein Benutzer eine Frage stellt:
128
+
129
+ 1. Erzeugen Sie ein Embedding für die Anfrage.
130
+ 2. Vergleichen Sie es mit allen Dokument-Embeddings mittels **Kosinus-Ähnlichkeit**.
131
+ 3. Behalten Sie nur die N ähnlichsten Chunks.
132
+
133
+ Die Kosinus-Ähnlichkeit misst den Winkel zwischen zwei Vektoren. Eine perfekte Übereinstimmung erzielt **1,0**.
134
+
135
+ So findet das System die dem Query am nächsten liegenden Dokumentabschnitte.
136
+
137
+ ## Schritt 6: Erweiterung + Generierung
138
+
139
+ Jetzt kommt die Magie. Wir nehmen die besten Chunks und injizieren sie in den **System-Prompt** für ChatGPT.
140
+
141
+ Das bedeutet, dass das Modell so antwortet, als wären diese Abschnitte Teil des Gesprächs.
142
+
143
+ Das Ergebnis: präzise, **dokumentenbasierte Antworten**.
144
+
145
+ ## Schritt 7: Protokollierung der Benutzeranfragen
146
+
147
+ Das ist die versteckte Superkraft.
148
+
149
+ Jede gestellte Frage wird gespeichert. Im Laufe der Zeit entsteht so ein Datensatz mit:
150
+
151
+ - Häufigsten Fragen (ideal für FAQs)
152
+ - Unbeantworteten Fragen (Dokumentation fehlt oder ist unklar)
153
+ - Funktionsanfragen, die als Fragen getarnt sind („Integriert es sich mit X?“)
154
+ - Aufkommenden Anwendungsfällen, die Sie nicht geplant hatten
155
+
156
+ Das verwandelt Ihren RAG-Assistenten in ein **kontinuierliches Nutzerforschungstool**.
157
+
158
+ ## Was kostet das?
159
+
160
+ Ein häufiger Einwand gegen RAG sind die Kosten. In der Praxis ist es überraschend günstig:
161
+
162
+ - Die Erstellung von Embeddings für ca. 200 Dokumente dauert etwa **5 Minuten** und kostet **1–2 Euro**.
163
+ - Die Suchfunktion in den Dokumenten ist zu 100 % kostenlos.
164
+ - Für Anfragen verwenden wir gpt-4o-latest ohne den „Thinking“-Modus. Bei Intlayer sehen wir etwa **300 Chat-Anfragen pro Monat**, und die OpenAI-API-Rechnung übersteigt selten **10 $**.
165
+
166
+ Darüber hinaus können Sie die Hosting-Kosten einrechnen.
167
+
168
+ ## Implementierungsdetails
169
+
170
+ Stack:
171
+
172
+ - Monorepo: pnpm Workspace
173
+ - Doc-Paket: Node.js / TypeScript / OpenAI API
174
+ - Frontend: Next.js / React / Tailwind CSS
175
+ - Backend: Node.js API-Route / OpenAI API
176
+
177
+ Das `@smart-doc/docs`-Paket ist ein TypeScript-Paket, das die Dokumentationsverarbeitung übernimmt. Wenn eine Markdown-Datei hinzugefügt oder geändert wird, enthält das Paket ein `build`-Skript, das die Dokumentationsliste in jeder Sprache neu erstellt, Embeddings generiert und diese in einer `embeddings.json`-Datei speichert.
178
+
179
+ Für das Frontend verwenden wir eine Next.js-Anwendung, die bietet:
180
+
181
+ - Markdown-zu-HTML-Rendering
182
+ - Eine Suchleiste, um relevante Dokumentation zu finden
183
+ - Eine Chatbot-Oberfläche, um Fragen zur Dokumentation zu stellen
184
+
185
+ Um eine Dokumentationssuche durchzuführen, enthält die Next.js-Anwendung eine API-Route, die eine Funktion im `@smart-doc/docs`-Paket aufruft, um Dokumentationsabschnitte abzurufen, die zur Anfrage passen. Mithilfe dieser Abschnitte können wir eine Liste von Dokumentationsseiten zurückgeben, die für die Suche des Benutzers relevant sind.
186
+
187
+ Für die Chatbot-Funktionalität folgen wir demselben Suchprozess, injizieren jedoch zusätzlich die abgerufenen Dokumentationsabschnitte in den Prompt, der an ChatGPT gesendet wird.
188
+
189
+ Hier ist ein Beispiel für einen an ChatGPT gesendeten Prompt:
190
+
191
+ System-Prompt:
192
+
193
+ ```txt
194
+ You are a helpful assistant that can answer questions about the Intlayer documentation.
195
+
196
+ Related chunks :
197
+
198
+ -----
199
+ docName: "getting-started"
200
+ docChunk: "1/3"
201
+ docUrl: "https://example.com/docs/de/getting-started"
202
+ ---
203
+
204
+ # Wie man anfängt
205
+
206
+ ...
207
+
208
+ -----
209
+ docName: "another-doc"
210
+ docChunk: "1/5"
211
+ docUrl: "https://example.com/docs/de/another-doc"
212
+ ---
213
+
214
+ # Ein weiteres Dokument
215
+
216
+ ...
217
+ ```
218
+
219
+ Benutzeranfrage:
220
+
221
+ ```txt
222
+ Wie fängt man an?
223
+ ```
224
+
225
+ Wir verwenden SSE, um die Antwort von der API-Route zu streamen.
226
+
227
+ Wie bereits erwähnt, verwenden wir gpt-4-turbo ohne den "Denkmodus". Die Antworten sind relevant und die Latenz gering.
228
+ Wir haben mit gpt-5 experimentiert, aber die Latenz war zu hoch (manchmal bis zu 15 Sekunden für eine Antwort). Das werden wir in Zukunft erneut prüfen.
229
+
230
+ 👉 [Hier die Demo ausprobieren](https://intlayer.org/doc/why) 👉 [Den Code-Template auf GitHub ansehen](https://github.com/aymericzip/smart_doc_RAG)
231
+
232
+ ## Weiterführende Möglichkeiten
233
+
234
+ Dieses Projekt ist eine Minimalimplementierung. Aber Sie können es auf viele Arten erweitern:
235
+
236
+ - MCP-Server → die Dokumentationssuchfunktion zu einem MCP-Server machen, um die Dokumentation mit jedem KI-Assistenten zu verbinden
237
+
238
+ - Vektor-Datenbanken → Skalierung auf Millionen von Dokumentenabschnitten
239
+ - LangChain / LlamaIndex → fertige Frameworks für RAG-Pipelines
240
+ - Analyse-Dashboards → Visualisierung von Benutzeranfragen und Schmerzpunkten
241
+ - Multi-Source Retrieval → nicht nur Dokumente abrufen, sondern auch Datenbankeinträge, Blogbeiträge, Tickets usw.
242
+ - Verbesserte Eingabeaufforderungen → Neuranking, Filterung und hybride Suche (Schlüsselwort + semantisch)
243
+
244
+ ## Begrenzungen, auf die wir gestoßen sind
245
+
246
+ - Chunking und Überlappung sind empirisch. Das richtige Gleichgewicht (Chunk-Größe, Überlappungsprozentsatz, Anzahl der abgerufenen Chunks) erfordert Iteration und Tests.
247
+ - Embeddings werden nicht automatisch neu generiert, wenn sich die Dokumente ändern. Unser System setzt Embeddings für eine Datei nur zurück, wenn sich die Anzahl der Chunks von der gespeicherten Anzahl unterscheidet.
248
+ - In diesem Prototyp werden Embeddings im JSON-Format gespeichert. Das funktioniert für Demos, verschmutzt aber das Git-Repository. In der Produktion ist eine Datenbank oder ein dedizierter Vektor-Speicher besser geeignet.
249
+
250
+ ## Warum das über die Dokumentation hinaus wichtig ist
251
+
252
+ Der interessante Teil ist nicht nur der Chatbot. Es ist der **Feedback-Loop**.
253
+
254
+ Mit RAG beantwortest du nicht nur:
255
+
256
+ - Du lernst, was die Nutzer verwirrt.
257
+ - Du entdeckst, welche Funktionen sie erwarten.
258
+ - Du passt deine Produktstrategie basierend auf echten Anfragen an.
259
+
260
+ **Beispiel:**
261
+
262
+ Stell dir vor, du führst eine neue Funktion ein und siehst sofort:
263
+
264
+ - 50 % der Fragen betreffen denselben unklaren Einrichtungsschritt
265
+ - Nutzer fragen wiederholt nach einer Integration, die du noch nicht unterstützt
266
+ - Menschen suchen nach Begriffen, die einen neuen Anwendungsfall offenbaren
267
+
268
+ Das ist **Produktintelligenz** direkt von deinen Nutzern.
269
+
270
+ ## Fazit
271
+
272
+ RAG ist eine der einfachsten und leistungsstärksten Methoden, um LLMs praktisch einsetzbar zu machen. Durch die Kombination von **Abruf + Generierung** können Sie statische Dokumentationen in einen **intelligenten Assistenten** verwandeln und gleichzeitig einen kontinuierlichen Strom von Produktinformationen gewinnen.
273
+
274
+ Für mich hat dieses Projekt gezeigt, dass RAG nicht nur ein technischer Trick ist. Es ist eine Möglichkeit, Dokumentationen in Folgendes zu verwandeln:
275
+
276
+ - ein interaktives Unterstützungssystem
277
+ - einen Feedback-Kanal
278
+ - ein Werkzeug für die Produktstrategie
279
+
280
+ 👉 [Probieren Sie die Demo hier aus](https://intlayer.org/doc/why) 👉 [Sehen Sie sich die Code-Vorlage auf GitHub an](https://github.com/aymericzip/smart_doc_RAG)
281
+
282
+ Und wenn Sie auch mit RAG experimentieren, würde ich gerne hören, wie Sie es einsetzen.