{"id":1558,"date":"2024-05-22T07:35:18","date_gmt":"2024-05-22T07:35:18","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1558"},"modified":"2024-05-22T07:35:35","modified_gmt":"2024-05-22T07:35:35","slug":"ruhejiyuwendangdeneirongshixian-ai-duihuagongnengyi-documate-weili","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/ruhejiyuwendangdeneirongshixian-ai-duihuagongnengyi-documate-weili.html","title":{"rendered":"\u5982\u4f55\u57fa\u4e8e\u6587\u6863\u7684\u5185\u5bb9\u5b9e\u73b0 AI \u5bf9\u8bdd\u529f\u80fd\uff0c\u4ee5 Documate \u4e3a\u4f8b"},"content":{"rendered":"<h2 data-id=\"heading-0\">\u524d\u8a00<\/h2>\n<p>\u5728 ChatGPT \u51fa\u73b0\u4e4b\u65f6\uff0c\u793e\u533a\u5185\u4e5f\u51fa\u73b0\u8fc7 <a href=\"https:\/\/juejin.cn\/post\/7212270321622827066\" target=\"_blank\" title=\"https:\/\/juejin.cn\/post\/7212270321622827066\" rel=\"noopener\">\u628a React \u5b98\u65b9\u6587\u6863\u6295\u5582\u7ed9\u5b83<\/a> \uff0c\u7136\u540e\u5bf9\u5b83\u8fdb\u884c\u63d0\u95ee\u7684\u5b9e\u8df5\u3002\u4f46\u662f\uff0c\u7531\u4e8e\u6bcf\u6b21 ChatGPT \u5bf9\u8bdd\u80fd\u63a5\u53d7\u7684\u6587\u672c\u5185\u5bb9\u5bf9\u5e94\u7684 Token \u662f\u6709\u4e0a\u9650\u7684\uff0c\u6240\u4ee5\u8fd9\u79cd\u4f7f\u7528\u65b9\u5f0f\u5b58\u5728\u4e00\u5b9a\u7684\u624b\u52a8\u64cd\u4f5c\u6210\u672c\u548c\u4e0d\u80fd\u590d\u7528\u7684\u95ee\u9898\u3002<\/p>\n<p>\u800c <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fdocumate.site%2F\" target=\"_blank\" title=\"https:\/\/documate.site\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Documate<\/a> \u7684\u51fa\u73b0\u5219\u662f\u901a\u8fc7\u5de5\u5177\u94fe\u7684\u96c6\u6210\uff0c\u4ec5\u9700\u4f7f\u7528 CLI \u63d0\u4f9b\u7684\u547d\u4ee4\u548c\u90e8\u7f72\u670d\u52a1\u7aef\u7684\u4ee3\u7801\uff0c\u5c31\u53ef\u4ee5\u5f88\u8f7b\u677e\u5730\u5b9e\u73b0\u4e0a\u8ff0\u7684\u6570\u636e\u6295\u5582\u6a21\u578b + \u63d0\u95ee ChatGPT \u8fc7\u7a0b\u7684\u81ea\u52a8\u5316\uff0c\u8ba9\u4f60\u7684\u6587\u6863\uff08<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fvitepress.dev%2F\" target=\"_blank\" title=\"https:\/\/vitepress.dev\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">VitePress<\/a>\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fdocusaurus.io%2F\" target=\"_blank\" title=\"https:\/\/docusaurus.io\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Docusaurus<\/a>\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fdocsify.js.org%2F%23%2F\" target=\"_blank\" title=\"https:\/\/docsify.js.org\/#\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Docsify<\/a>\uff09\u7ad9\u70b9\u5177\u5907 AI \u5bf9\u8bdd\u529f\u80fd\u3002<\/p>\n<p>Documate \u7684\u5b98\u7f51\u6587\u6863\u5bf9\u5982\u4f55\u4f7f\u7528\u5b83\u8fdb\u884c\u73b0\u6709\u6587\u6863\u7ad9\u70b9\u7684\u63a5\u5165\u4ecb\u7ecd\u7684\u5f88\u4e3a\u8be6\u5c3d\uff0c\u5e76\u4e14\u5176\u4f5c\u8005\uff08<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fakira-cn\" target=\"_blank\" title=\"https:\/\/github.com\/akira-cn\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u6708\u5f71<\/a>\uff09\u4e5f\u4e13\u95e8\u5199\u4e86<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FrCyPlUUczmk3uF7ut15ZXg\" target=\"_blank\" title=\"https:\/\/mp.weixin.qq.com\/s\/rCyPlUUczmk3uF7ut15ZXg\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u3010\u9ed1\u79d1\u6280\u3011\u8ba9\u4f60\u7684 VitePress \u6587\u6863\u7ad9\u652f\u6301 AI \u5bf9\u8bdd\u80fd\u529b<\/a>\u6587\u7ae0\u4ecb\u7ecd\uff0c\u5bf9\u63a5\u5165 Documate \u611f\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u81ea\u884c\u9605\u8bfb\u6587\u6863\u6216\u6587\u7ae0\u3002<\/p>\n<p>\u76f8\u4fe1\u5f88\u591a\u540c\u5b66\u548c\u6211\u4e00\u6837\uff0c\u5bf9<strong>\u5982\u4f55\u57fa\u4e8e\u6587\u6863\u7684\u5185\u5bb9\u5b9e\u73b0 AI Chat<\/strong> \u7559\u6709\u7591\u95ee\uff0c\u90a3\u4e48\u63a5\u4e0b\u6765\uff0c\u672c\u6587\u5c06\u56f4\u7ed5 Documate \u7684\u5b9e\u73b0\u539f\u7406\u5206\u522b\u5c55\u5f00\u4ecb\u7ecd\uff1a<\/p>\n<ul>\n<li>Documate \u8fd0\u884c\u673a\u5236<\/li>\n<li>Documate \u670d\u52a1\u7aef<\/li>\n<\/ul>\n<h2 data-id=\"heading-1\">\u4e00\u3001Documate \u8fd0\u884c\u673a\u5236<\/h2>\n<p>Documate \u4e3b\u8981\u7531 2 \u90e8\u5206\u6784\u6210\uff0c<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40documate%2Fdocumate\" target=\"_blank\" title=\"https:\/\/www.npmjs.com\/package\/@documate\/documate\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Documate CLI<\/a> \u548c<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Faircodelabs%2Fdocumate\" target=\"_blank\" title=\"https:\/\/github.com\/aircodelabs\/documate\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u670d\u52a1\u7aef\uff08Backend\uff09<\/a>\u63a5\u53e3\u5b9e\u73b0\uff0c\u5176\u4e2d Documate CLI \u4e3b\u8981\u804c\u8d23\u662f\u83b7\u53d6\u672c\u5730\u6587\u6863\u8fc7\u7a0b\u7684\u6587\u6863\u548c\u6784\u9020\u6307\u5b9a\u7ed3\u6784\u7684\u6587\u6863\u6570\u636e\uff0c\u6700\u7ec8\u4e0a\u4f20\u6570\u636e\u5230 <code>upload<\/code> \u63a5\u53e3\uff0c\u800c\u670d\u52a1\u7aef\u4e3b\u8981\u804c\u8d23\u662f\u63d0\u4f9b <code>upload<\/code> \u548c <code>ask<\/code> \u63a5\u53e3\uff0c\u5b83\u4eec\u5206\u522b\u7684\u4f5c\u7528\uff1a<\/p>\n<ul>\n<li><code>upload<\/code> \u63a5\u53e3\uff0c\u63a5\u6536\u6765\u81ea CLI \u4e0a\u4f20\u7684\u6587\u6863\u6570\u636e\uff0c\u5bf9\u6570\u636e\u8fdb\u884c Token \u5316\u3001\u5206\u7247\u5165\u5e93\u7b49\u64cd\u4f5c<\/li>\n<li><code>ask<\/code> \u63a5\u53e3\uff0c\u63a5\u6536\u6765\u81ea\u6587\u6863\u7ad9\u70b9\u7684\u63d0\u95ee\u5185\u5bb9\uff0c\u6821\u9a8c\u5185\u5bb9\u5408\u6cd5\u6027\u3001\u751f\u6210\u5185\u5bb9\u7684\u77e2\u91cf\u5750\u6807\uff0c\u57fa\u4e8e\u6240\u6709\u6587\u6863\u8fdb\u884c\u77e2\u91cf\u641c\u7d22\u3001\u8fdb\u884c Chat \u63d0\u95ee\u83b7\u53d6\u7ed3\u679c\u5e76\u8fd4\u56de\u7b49\u64cd\u4f5c<\/li>\n<\/ul>\n<p>\u6574\u4f53\u5b9e\u73b0\u673a\u5236\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/3d85c3bb2547e24d770e0f0ebc92824d.png\" alt=\"\u5982\u4f55\u57fa\u4e8e\u6587\u6863\u7684\u5185\u5bb9\u5b9e\u73b0 AI \u5bf9\u8bdd\u529f\u80fd\uff0c\u4ee5 Documate \u4e3a\u4f8b\" \/><\/figure>\n<\/p>\n<p>\u5176\u4e2d\uff0c\u5173\u4e8e Documate CLI \u4e3b\u8981\u652f\u6301\u4e86 <code>init<\/code> \u548c <code>upload<\/code> \u7b49 2 \u4e2a\u547d\u4ee4\uff0c<code>init<\/code> \u8d1f\u8d23\u5411\u6587\u6863\u5de5\u7a0b\u6ce8\u5165 Documate \u8fd0\u884c\u7684\u57fa\u7840\u5de5\u7a0b\u914d\u7f6e\uff0c<code>upload<\/code> \u8d1f\u8d23\u4e0a\u4f20\u6587\u6863\u5de5\u7a0b\u7684\u6587\u6863\u5185\u5bb9\u5230\u670d\u52a1\u7aef\uff0c2 \u8005\u7684\u5b9e\u73b0\u5e76\u4e0d\u590d\u6742\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u81ea\u884c\u4e86\u89e3\u3002<\/p>\n<p>\u76f8\u6bd4\u8f83 CLI\uff0c<strong>\u5728 Documate \u7684\u670d\u52a1\u7aef\u5b9e\u73b0\u7684\u4e00\u7cfb\u5217\u80fd\u529b\u662f\u652f\u6301\u6587\u6863\u5185\u5bb9\u5bf9\u8bdd\u7684\u5173\u952e\u6280\u672f\u70b9<\/strong>\uff0c\u90a3\u8fd9\u4e9b\u80fd\u529b\u53c8\u662f\u5982\u4f55\u901a\u8fc7\u4ee3\u7801\u5b9e\u73b0\u7684\uff1f\u4e0b\u9762\uff0c\u6211\u4eec\u6765\u5206\u522b\u4ece\u4ee3\u7801\u5c42\u9762\u6df1\u5165\u8ba4\u8bc6\u4e0b Documate \u670d\u52a1\u7aef\u7684\u5404\u4e2a\u80fd\u529b\u7684\u5b9e\u73b0\u3002<\/p>\n<h2 data-id=\"heading-2\">\u4e8c\u3001Documate \u670d\u52a1\u7aef<\/h2>\n<p>Documate \u670d\u52a1\u7aef\u4e3b\u8981\u8d1f\u8d23\u63a5\u6536\u5e76\u5b58\u50a8 <code>documate upload<\/code> \u547d\u4ee4\u4e0a\u4f20\u7684\u6587\u6863\u5185\u5bb9\u3001\u6839\u636e\u5bf9\u8bdd\u7684\u63d0\u95ee\u5185\u5bb9\u8fd4\u56de\u4e0e\u4e4b\u5173\u8054\u7684\u56de\u7b54\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/d73286dd9a963b17db15982f5ccfea81.png\" alt=\"\u5982\u4f55\u57fa\u4e8e\u6587\u6863\u7684\u5185\u5bb9\u5b9e\u73b0 AI \u5bf9\u8bdd\u529f\u80fd\uff0c\u4ee5 Documate \u4e3a\u4f8b\" \/><\/figure>\n<\/p>\n<p>\u5176\u4e2d\uff0c\u540e\u8005\u9700\u8981\u4f7f\u7528 OpenAI \u63d0\u4f9b\u7684 Text Embeddings \u6765\u5b9e\u73b0 AI \u5bf9\u8bdd\u7684\u529f\u80fd\uff0c\u6240\u4ee5\uff0c\u6211\u4eec\u5148\u6765\u5bf9 OpenAI Text Embeddings \u5efa\u7acb\u4e00\u4e2a\u57fa\u7840\u7684\u8ba4\u77e5\u3002<\/p>\n<h3 data-id=\"heading-3\">2.1 OpenAI Text Embeddings<\/h3>\n<p>\u5728 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Foverview\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/overview\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">OpenAI \u7684\u5f00\u53d1\u8005\u5e73\u53f0<\/a> \u63d0\u4f9b\u4e86\u5f88\u591a\u529f\u80fd\u7684 API \u7ed9\u5f00\u53d1\u8005\u8c03\u7528\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Ftext-generation\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/text-generation\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Text generation<\/a>\uff0c\u751f\u6210\u6587\u672c\u548c\u8c03\u7528\u51fd\u6570<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Fprompt-engineering\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/prompt-engineering\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Prompt engineering<\/a>\uff0cPrompt \u7684\u6700\u4f73\u5de5\u7a0b\u5b9e\u8df5<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Fembeddings\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/embeddings\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Embeddings<\/a>\uff0c\u641c\u7d22\u3001\u5206\u7c7b\u548c\u6bd4\u8f83\u6587\u672c<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Fspeech-to-text\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/speech-to-text\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Speech to text<\/a>\uff0c\u8bed\u97f3\u8f6c\u6587\u672c<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Fimages%3Fcontext%3Dnode\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/images?context=node\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Image generation<\/a>\uff0c\u4f7f\u7528 DALL\u00b7E \u751f\u6210\u6216\u8005\u64cd\u4f5c\u56fe\u50cf<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Ffine-tuning\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/fine-tuning\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Fine-tuning<\/a>\uff0c\u4e3a\u5e94\u7528\u5b9a\u5236\u6a21\u578b<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Ftext-to-speech\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/text-to-speech\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Text to speech<\/a>\uff0c\u5c06\u6587\u672c\u8f6c\u4e3a\u903c\u771f\u7684\u8bed\u97f3<\/li>\n<li><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fguides%2Fvision\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/guides\/vision\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Vision<\/a>\uff0c\u4f7f\u7528 GPT-4 \u7406\u89e3\u56fe\u50cf<\/li>\n<\/ul>\n<p>\u57fa\u4e8e\u6587\u6863\u5185\u5bb9\u7684 AI \u5bf9\u8bdd\u7684\u5b9e\u73b0\u672c\u8d28\u662f\u6839\u636e\u5173\u952e\u8bcd\u641c\u7d22\u5f97\u5230\u7b54\u6848\uff0c\u6240\u4ee5\u9700\u8981\u4f7f\u7528\u5230 Embeddings\uff0cEmbedding \u4e3b\u8981\u7528\u4e8e\u8861\u91cf\u6587\u672c\u5b57\u7b26\u4e32\u4e4b\u95f4\u7684\u5173\u8054\u6027\uff0c\u4e00\u4e2a Embedding \u662f\u7531\u6d6e\u70b9\u6570\u5b57\u6784\u6210\u7684\u77e2\u91cf\u6570\u7ec4\uff0c\u4f8b\u5982 <code>[0.938293, 0.284951, 0.348264, 0.948276, 0.564720]<\/code>\u30022 \u4e2a\u77e2\u91cf\u4e4b\u95f4\u7684\u8ddd\u79bb\u8868\u793a\u5b83\u4eec\u7684\u5173\u8054\u6027\u3002\u8ddd\u79bb\u5c0f\u8868\u793a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u8054\u6027\u9ad8\uff0c\u53cd\u4e4b\u5173\u8054\u6027\u4f4e\u3002<\/p>\n<h3 data-id=\"heading-4\">2.2 \u6587\u6863\u5185\u5bb9\u5b58\u50a8<\/h3>\n<p>\u6587\u6863\u5185\u5bb9\u7684\u5b58\u50a8\u4e3b\u8981\u5206\u4e3a 2 \u4e2a\u6b65\u9aa4\uff1a<\/p>\n<p><strong>1\u3001\u6839\u636e\u6a21\u578b\u6bcf\u6b21\u80fd\u63a5\u53d7\u7684 Token \u6700\u5927\u957f\u5ea6\u53bb\u5bf9\u5185\u5bb9\u8fdb\u884c\u5206\u7247 chunks<\/strong><\/p>\n<p>OpenAI \u7684\u6a21\u578b\u8c03\u7528\u6240\u80fd\u63a5\u6536\u7684 Token \u7684\u957f\u5ea6\u662f\u6709\u9650\u7684\uff0c\u5bf9\u5e94\u7684 <code>text-embedding-ada-002<\/code> \u6a21\u578b\u53ef\u63a5\u6536\u7684 Token \u6700\u5927\u957f\u5ea6\u662f 1536\u3002\u6240\u4ee5\uff0c\u5728\u63a5\u6536\u5230 CLI \u4e0a\u4f20\u7684\u6587\u6863\u5185\u5bb9\u540e\uff0c\u9700\u8981\u6839\u636e Token \u7684\u6700\u5927\u957f\u5ea6 1536 \u6765\u5bf9\u6587\u6863\u5185\u5bb9\u8fdb\u884c\u5206\u7247\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> tokenizer = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'gpt-3-encoder'<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-comment\">\/\/ Split the page content into chunks base on the MAX_TOKEN_PER_CHUNK<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title function_\">getContentChunks<\/span>(<span class=\"hljs-params\">content<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">  <span class=\"hljs-comment\">\/\/ GPT-2 and GPT-3 use byte pair encoding to turn text into a series of integers to feed into the model.<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">  <span class=\"hljs-keyword\">const<\/span> encoded = tokenizer.<span class=\"hljs-title function_\">encode<\/span>(content);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">  <span class=\"hljs-keyword\">const<\/span> tokenChunks = encoded.<span class=\"hljs-title function_\">reduce<\/span>(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    <span class=\"hljs-function\">(<span class=\"hljs-params\">acc, token<\/span>) =&gt;<\/span> (<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">      acc[acc.<span class=\"hljs-property\">length<\/span> - <span class=\"hljs-number\">1<\/span>].<span class=\"hljs-property\">length<\/span> &lt; <span class=\"hljs-variable constant_\">MAX_TOKEN_PER_CHUNK<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">        ? acc[acc.<span class=\"hljs-property\">length<\/span> - <span class=\"hljs-number\">1<\/span>].<span class=\"hljs-title function_\">push<\/span>(token)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">        : acc.<span class=\"hljs-title function_\">push<\/span>([token]),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">      acc<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    ),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    [[]],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">  );<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">  <span class=\"hljs-keyword\">return<\/span> tokenChunks.<span class=\"hljs-title function_\">map<\/span>(<span class=\"hljs-function\"><span class=\"hljs-params\">tokens<\/span> =&gt;<\/span> tokenizer.<span class=\"hljs-title function_\">decode<\/span>(tokens));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">}<\/span>\n<\/code><\/pre>\n<p>\u9996\u5148\uff0c\u4f1a\u5148\u4f7f\u7528 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Flatitudegames%2FGPT-3-Encoder\" target=\"_blank\" title=\"https:\/\/github.com\/latitudegames\/GPT-3-Encoder\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">gpt-3-encoder<\/a> \u6765\u5bf9\u6587\u6863\u5185\u5bb9\u8fdb\u884c <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FByte_pair_encoding\" target=\"_blank\" title=\"https:\/\/en.wikipedia.org\/wiki\/Byte_pair_encoding\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Byte Pair Encoding<\/a>\uff0c\u5c06\u6587\u6863\u4ece\u6587\u672c\u5f62\u5f0f\u8f6c\u6210\u4e00\u7cfb\u5217\u6570\u5b57\uff0c\u4ece\u800c\u7528\u4e8e\u540e\u7eed\u6295\u5582\uff08Feed\uff09\u7ed9\u6a21\u578b\u3002\u5176\u4e2d\uff0c <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Ftowardsdatascience.com%2Fbyte-pair-encoding-subword-based-tokenization-algorithm-77828a70bee0\" target=\"_blank\" title=\"https:\/\/towardsdatascience.com\/byte-pair-encoding-subword-based-tokenization-algorithm-77828a70bee0\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">BPE \u7b97\u6cd5<\/a> \u7684\u5b9e\u73b0\uff1a<\/p>\n<ul>\n<li>\u628a\u6587\u672c\u5185\u5bb9\u62c6\u5206\u6210\u4e00\u4e2a\u4e2a\u5b57\u7b26\uff0c\u8ba1\u7b97\u5b57\u7b26\u51fa\u73b0\u9891\u7387<\/li>\n<li>\u5408\u5e76\u76f8\u90bb\u91cd\u590d\u51fa\u73b0\u7684\u5b57\u7b26\u548c\u5bf9\u5e94\u7684\u51fa\u73b0\u9891\u7387<\/li>\n<li>\u5bf9\u6700\u7ec8\u62c6\u5206\u7684\u5b57\u7b26\u7f16\u7801\u6210\u6570\u5b57\uff0c\u4e5f\u5c31\u662f Token \u7684\u503c\uff0c\u7136\u540e\u6784\u9020\u5b57\u7b26\u5230\u6570\u5b57\u6620\u5c04\u7684\u4e00\u4e2a\u8bcd\u6c47\u8868<\/li>\n<li>\u6839\u636e\u8bcd\u6c47\u8868\u5c06\u539f\u6709\u7684\u6587\u672c\u5185\u5bb9\u8f6c\u4e3a\u5bf9\u5e94\u7684 Token \u8868\u793a<\/li>\n<\/ul>\n<p>\u7531\u4e8e BPE \u7f16\u7801\u540e\u7684\u7ed3\u679c <code>encoded<\/code> \u662f\u4e00\u4e2a Token \u6570\u7ec4\uff0c\u4e14\u6a21\u578b\u6bcf\u6b21\u80fd\u6295\u5582\u662f\u6709\u6700\u5927\u957f\u5ea6\u7684\u9650\u5236\uff0c\u6240\u4ee5\u6839\u636e Token \u6700\u5927\u957f\u5ea6\u8fdb\u884c\u5206\u7247\uff0c\u4e5f\u5c31\u662f\u4ee3\u7801\u4e2d\u7684 <code>acc<\/code>\uff0c<code>acc<\/code> \u521d\u59cb\u503c\u662f\u4e00\u4e2a\u4e8c\u7ef4\u6570\u7ec4\uff0c\u6bcf\u4e2a\u503c\u662f\u4e00\u4e2a Token\uff0c\u6bcf\u4e2a\u5143\u7d20\u6570\u7ec4\u4e3b\u8981\u7528\u4e8e\u5b58\u50a8\u6a21\u578b\u6700\u5927 Token \u9650\u5236\u4e0b\u7684\u6570\u636e\uff0c\u5373\u5c06\u4e00\u4e2a\u5927\u7684 Token \u5206\u7247\u6210\u6a21\u578b\u5141\u8bb8\u4f20\u5165\u7684\u5c0f Token\u3002<\/p>\n<blockquote>\n<p>\u5bf9\u6587\u6863\u5185\u5bb9\u8fdb\u884c\u5206\u7247\u7684\u76ee\u7684\u662f\u7528\u4e8e\u540e\u7eed\u5c06\u6587\u6863\u5185\u5bb9\u6295\u5582\uff08Feed\uff09\u7ed9\u6a21\u578b\u7684\u65f6\u5019\u662f\u6709\u6548\uff08\u4e0d\u4f1a\u8d85\u51fa Token \u6700\u5927\u957f\u5ea6\uff09\u548c\u8fde\u7eed\u7684\u3002<\/p>\n<\/blockquote>\n<p><strong>2\u3001\u6784\u9020\u6307\u5b9a\u7684\u6570\u636e\u7ed3\u6784 <code>ChunkItem<\/code> \u5b58\u5165\u6570\u636e\u5e93\u4e2d\uff0c<code>ChunkItem<\/code> \u6570\u636e\u7ed3\u6784<\/strong><\/p>\n<p>\u56e0\u4e3a\uff0c\u5c06\u6587\u6863\u7684\u6240\u6709\u5185\u5bb9\u5168\u90e8\u6295\u5582\u7ed9\u6a21\u578b\u662f<strong>\u6709\u6210\u672c\uff08Token \u8ba1\u8d39\uff09\u5e76\u4e14\u6536\u76ca\u4f4e\uff08\u95ee\u7b54\u5185\u5bb9\u5173\u8054\u6027\u4f4e\uff09<\/strong>\uff0c\u6240\u4ee5\uff0c\u9700\u8981\u5728\u63d0\u95ee\u7684\u73af\u8282\u901a\u8fc7\u77e2\u91cf\u6570\u636e\u5e93\u67e5\u8be2\u7684\u65b9\u5f0f\uff0c\u67e5\u51fa\u5173\u8054\u7684\u6587\u6863\u5185\u5bb9\uff0c\u7136\u540e\u518d\u5c06\u5bf9\u5e94\u7684\u6587\u6863\u5185\u5bb9\u6295\u5582\u7ed9\u6a21\u578b\uff0c\u6a21\u578b\u6839\u636e\u5bf9<strong>\u5173\u8054<\/strong>\u6587\u6863\u4e0a\u4e0b\u6587\u548c\u95ee\u9898\u7ed9\u51fa\u5408\u7406\u7684\u56de\u7b54\u3002<\/p>\n<p>\u90a3\u4e48\uff0c\u5728\u524d\u9762\u6839\u636e BPE \u751f\u6210\u7684 Token \u548c\u5206\u7247\u751f\u6210\u7684\u57fa\u7840\u4e0a\uff0c\u9700\u8981\u5c06\u8be5\u7ed3\u679c\u6309\u6307\u5b9a\u7684\u6570\u636e\u7ed3\u6784\uff08\u8def\u5f84\u3001\u6807\u9898\u7b49\uff09\u5b58\u5165\u6570\u636e\u5e93\u4e2d\uff0c\u7528\u4e8e\u540e\u7eed\u63d0\u95ee\u7684\u65f6\u5019\u67e5\u8be2\u77e2\u91cf\u6570\u636e\u5e93\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">typescript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-typescript code-block-extension-codeShowNum\" lang=\"typescript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> aircode = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'aircode'<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-title class_\">PagesTable<\/span> = aircode.<span class=\"hljs-property\">db<\/span>.<span class=\"hljs-title function_\">table<\/span>(<span class=\"hljs-string\">'pages'<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-comment\">\/\/ \u6839\u636e BPE \u548c\u6a21\u578b\u7684 Token \u4e0a\u9650\u9650\u5236\u53bb\u5212\u5206 chunk<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-keyword\">const<\/span> chunks = <span class=\"hljs-title function_\">getContentChunks<\/span>(content);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-comment\">\/\/ \u6784\u9020\u51fa\u5b58\u5230\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e\u7ed3\u6784<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-keyword\">const<\/span> pagesToSave = chunks.<span class=\"hljs-title function_\">map<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">chunk, index<\/span>) =&gt;<\/span> ({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">  project,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">  <span class=\"hljs-comment\">\/\/ \u6587\u6863\u6587\u4ef6\u8def\u5f84<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">  path,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">  title,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">  <span class=\"hljs-comment\">\/\/ \u6587\u4ef6\u5185\u5bb9\u751f\u6210\u7684 hash \u503c<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">  checksum,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">  <span class=\"hljs-attr\">chunkIndex<\/span>: index,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">  <span class=\"hljs-comment\">\/\/ \u5185\u5bb9<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">  <span class=\"hljs-attr\">content<\/span>: chunk,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">  <span class=\"hljs-attr\">embedding<\/span>: <span class=\"hljs-literal\">null<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">}))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-comment\">\/\/ Save the result to database<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-keyword\">let<\/span> i = <span class=\"hljs-number\">0<\/span>; i &lt; pagesToSave.<span class=\"hljs-property\">length<\/span>; i += <span class=\"hljs-number\">100<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">  <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-title class_\">PagesTable<\/span>.<span class=\"hljs-title function_\">save<\/span>(pagesToSave.<span class=\"hljs-title function_\">slice<\/span>(i, i + <span class=\"hljs-number\">100<\/span>));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">}<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u91cc\u4f1a\u4f7f\u7528\u5230 AirCode \u63d0\u4f9b\u7684\u8868\u64cd\u4f5c\u7684 <code>PagesTable.save<\/code> API\uff0c\u7528\u4e8e\u5c06\u6784\u9020\u597d\u7684\u6570\u636e\u5165\u5e93\u3002<\/p>\n<h3 data-id=\"heading-5\">2.3 \u6839\u636e\u63d0\u95ee\u8fdb\u884c AI \u5bf9\u8bdd<\/h3>\n<p>OpenAI \u8981\u6c42\u8f93\u5165\u7684\u5185\u5bb9\u662f\u9700\u8981<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fplatform.openai.com%2Fdocs%2Fapi-reference%2Fmoderations\" target=\"_blank\" title=\"https:\/\/platform.openai.com\/docs\/api-reference\/moderations\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u7b26\u5408\u5b83\u4eec\u89c4\u5b9a\u7684\u5185\u5bb9\u653f\u7b56<\/a>\u7684\uff0c\u6240\u4ee5\u9700\u8981\u5148\u5bf9\u8f93\u5165\u7684\u95ee\u9898\u8fdb\u884c\u5185\u5bb9\u68c0\u67e5\uff0cOpenAI \u4e5f\u63d0\u4f9b\u76f8\u5e94\u7684 API \u7528\u4e8e\u68c0\u67e5\u5185\u5bb9\u5b89\u5168\uff0c\u800c OpenAI \u7684 API \u8c03\u7528\u53ef\u4ee5\u901a\u8fc7 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fopenai%2Fopenai-node\" target=\"_blank\" title=\"https:\/\/github.com\/openai\/openai-node\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">OpenAI Node<\/a> \u6765\u5b9e\u73b0\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-title class_\">OpenAI<\/span> = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'openai'<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-comment\">\/\/ \u521b\u5efa OpenAI \u7684\u5b9e\u4f8b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">const<\/span> openai = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">OpenAI<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-attr\">apiKey<\/span>: process.<span class=\"hljs-property\">env<\/span>.<span class=\"hljs-property\">OPENAI_API_KEY<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-comment\">\/\/ \u63d0\u95ee\u5185\u5bb9<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-keyword\">const<\/span> question = params.<span class=\"hljs-property\">question<\/span>.<span class=\"hljs-title function_\">trim<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-comment\">\/\/ https:\/\/platform.openai.com\/docs\/api-reference\/moderations<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-keyword\">const<\/span> { <span class=\"hljs-attr\">results<\/span>: moderationRes } = <span class=\"hljs-keyword\">await<\/span> openai.<span class=\"hljs-property\">moderations<\/span>.<span class=\"hljs-title function_\">create<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    <span class=\"hljs-attr\">input<\/span>: question,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><span class=\"hljs-keyword\">if<\/span> (moderationRes[<span class=\"hljs-number\">0<\/span>].<span class=\"hljs-property\">flagged<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    <span class=\"hljs-variable language_\">console<\/span>.<span class=\"hljs-title function_\">log<\/span>(<span class=\"hljs-string\">'The user input contains flagged content.'<\/span>, moderationRes[<span class=\"hljs-number\">0<\/span>].<span class=\"hljs-property\">categories<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">    context.<span class=\"hljs-title function_\">status<\/span>(<span class=\"hljs-number\">403<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">    <span class=\"hljs-keyword\">return<\/span> {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">    <span class=\"hljs-attr\">error<\/span>: <span class=\"hljs-string\">'Question input didn't meet the moderation criteria.'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">    <span class=\"hljs-attr\">categories<\/span>: moderationRes[<span class=\"hljs-number\">0<\/span>].<span class=\"hljs-property\">categories<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">    };<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">}<\/span>\n<\/code><\/pre>\n<p>\u5982\u679c\uff0c\u8fd4\u56de\u7684\u7ed3\u679c <code>moderationsRes[0].flagged<\/code> \u5219\u89c6\u4e3a\u4e0d\u7b26\u5408\uff0c\u6807\u8bc6\u4e3a\u9519\u8bef\u7684\u8bf7\u6c42\u3002\u53cd\u4e4b\u7b26\u5408\uff0c\u63a5\u7740\u4f7f\u7528 Embeddings \u6765\u83b7\u53d6\u63d0\u95ee\u5185\u5bb9\u6240\u5bf9\u5e94\u7684\u77e2\u91cf\u5750\u6807\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-comment\">\/\/ https:\/\/platform.openai.com\/docs\/api-reference\/embeddings\/object<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">const<\/span> { <span class=\"hljs-attr\">data<\/span>: [ { embedding }] } = <span class=\"hljs-keyword\">await<\/span> openai.<span class=\"hljs-property\">embeddings<\/span>.<span class=\"hljs-title function_\">create<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-attr\">model<\/span>: <span class=\"hljs-string\">'text-embedding-ada-002'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-attr\">input<\/span>: question.<span class=\"hljs-title function_\">replace<\/span>(<span class=\"hljs-regexp\">\/n\/g<\/span>, <span class=\"hljs-string\">' '<\/span>),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">});<\/span>\n<\/code><\/pre>\n<p>\u90a3\u4e48\uff0c\u6709\u4e86\u77e2\u91cf\u5750\u6807\u540e\uff0c\u6211\u4eec\u9700\u8981\u7528\u5148\u524d\u5b58\u50a8\u5230\u6570\u636e\u5e93\u7684\u5206\u7247\u6587\u672c\u521b\u5efa\u77e2\u91cf\u6570\u636e\u5e93\uff0c\u8fd9\u53ef\u4ee5\u4f7f\u7528 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Foramasearch%2Forama\" target=\"_blank\" title=\"https:\/\/github.com\/oramasearch\/orama\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Orama<\/a> \u5b8c\u6210\uff0c\u5b83\u63d0\u4f9b\u4e86\u5168\u6587\u548c\u77e2\u91cf\u641c\u7d22\u7684\u80fd\u529b\u3002<\/p>\n<p>\u9996\u5148\uff0c\u9700\u8981\u5148\u4ece\u6570\u636e\u5e93\u4e2d\u67e5\u8be2\u51fa\u6240\u6709\u7684\u6587\u6863\u6570\u636e\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> { project = <span class=\"hljs-string\">'default'<\/span> } = params;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">const<\/span> pages = <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-title class_\">PagesTable<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  .<span class=\"hljs-title function_\">where<\/span>({ project })<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">  .<span class=\"hljs-title function_\">projection<\/span>({ <span class=\"hljs-attr\">path<\/span>: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">title<\/span>: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">content<\/span>: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">embedding<\/span>: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">_id<\/span>: <span class=\"hljs-number\">0<\/span> })<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">  .<span class=\"hljs-title function_\">find<\/span>();<\/span>\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u901a\u8fc7 Orama \u63d0\u4f9b\u7684 <code>create<\/code> \u65b9\u6cd5\u521d\u59cb\u5316\u4e00\u4e2a\u77e2\u91cf\u6570\u636e\u5e93 <code>memDB<\/code>\uff0c\u5e76\u4e14\u5c06\u6587\u6863\u5185\u5bb9 <code>pages<\/code> \u63d2\u5165\u5230\u6570\u636e\u5e93\u4e2d\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> memDB = <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-title function_\">create<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-comment\">\/\/ \u5efa\u7acb\u597d\u7d22\u5f15\u7684 `schema`<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  <span class=\"hljs-attr\">schema<\/span>: {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-attr\">path<\/span>: <span class=\"hljs-string\">'string'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-attr\">title<\/span>: <span class=\"hljs-string\">'string'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">    <span class=\"hljs-attr\">content<\/span>: <span class=\"hljs-string\">'string'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    <span class=\"hljs-attr\">embedding<\/span>: <span class=\"hljs-string\">'vector[1536]'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">  },<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-title function_\">insertMultiple<\/span>(memDB, pages);<\/span>\n<\/code><\/pre>\n<p>\u6709\u4e86\u6587\u6863\u5185\u5bb9\u5bf9\u5e94\u7684\u77e2\u91cf\u6570\u636e\u5e93\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u7528\u524d\u9762 Emdeedings \u6839\u636e\u63d0\u95ee\u5185\u5bb9\u751f\u6210\u7684\u77e2\u91cf\u5750\u6807\u8fdb\u884c\u641c\u7d22\uff0c\u4f7f\u7528 Orama \u63d0\u4f9b\u7684 <code>searchVector<\/code> \u8fdb\u884c\u641c\u7d22\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> { hits } = <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-title function_\">searchVector<\/span>(memDB, {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-attr\">vector<\/span>: embedding,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  <span class=\"hljs-attr\">property<\/span>: <span class=\"hljs-string\">'embedding'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">  <span class=\"hljs-attr\">similarity<\/span>: <span class=\"hljs-number\">0.8<\/span>,  <span class=\"hljs-comment\">\/\/ Minimum similarity. Defaults to `0.8`<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">  <span class=\"hljs-attr\">limit<\/span>: <span class=\"hljs-number\">10<\/span>,        <span class=\"hljs-comment\">\/\/ Defaults to `10`<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">  <span class=\"hljs-attr\">offset<\/span>: <span class=\"hljs-number\">0<\/span>,        <span class=\"hljs-comment\">\/\/ Defaults to `0`<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">});<\/span>\n<\/code><\/pre>\n<p><strong>\u90a3\u4e48\uff0c\u4e3a\u4ec0\u4e48\u4f7f\u7528\u7684\u662f\u77e2\u91cf\u641c\u7d22\u800c\u4e0d\u662f\u6587\u672c\u641c\u7d22\uff1f<\/strong> \u56e0\u4e3a\uff0c\u77e2\u91cf\u641c\u7d22\u7684\u4f5c\u7528\u662f\u4e3a\u4e86\u641c\u7d22\u5230\u548c\u6587\u672c\u5bf9\u5e94\u7684\u77e2\u91cf\u4f4d\u7f6e\u76f8\u8fd1\u7684\u5185\u5bb9\uff0c\u7528\u4e8e\u751f\u6210\u4e0a\u4e0b\u6587\u672c GPT \u6574\u7406\u6700\u7ec8\u7684\u56de\u7b54\u3002<\/p>\n<p>\u5176\u4e2d <code>hits<\/code> \u7684\u6570\u636e\u7ed3\u6784\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-attr\">count<\/span>: <span class=\"hljs-number\">1<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  <span class=\"hljs-attr\">elapsed<\/span>: {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-attr\">raw<\/span>: <span class=\"hljs-number\">25000<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-attr\">formatted<\/span>: <span class=\"hljs-string\">'25ms'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">  },<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">  <span class=\"hljs-attr\">hits<\/span>: [<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">      <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">'1-19238'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">      <span class=\"hljs-attr\">score<\/span>: <span class=\"hljs-number\">0.812383129<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">      <span class=\"hljs-attr\">document<\/span>: {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">        <span class=\"hljs-attr\">title<\/span>: <span class=\"hljs-string\">'The Prestige'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">        <span class=\"hljs-attr\">embedding<\/span>: [<span class=\"hljs-number\">0.938293<\/span>, <span class=\"hljs-number\">0.284951<\/span>, <span class=\"hljs-number\">0.348264<\/span>, <span class=\"hljs-number\">0.948276<\/span>, <span class=\"hljs-number\">0.564720<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">      }<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    }<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">  ]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">}<\/span>\n<\/code><\/pre>\n<p>\u7531\u4e8e\uff0c\u5148\u524d\u5c06\u6587\u6863\u5185\u5bb9\u6839\u636e Embeddings \u7684 Token \u6700\u5927\u957f\u5ea6\u5206\u7247\u8fdb\u884c\u5b58\u50a8\uff0c\u6240\u4ee5\uff0c\u8fd9\u91cc\u9700\u8981\u5c06 <code>hits<\/code> \u4e2d\u7684\u6570\u636e\u83b7\u53d6\u7684\u5185\u5bb9\u7ec4\u5408\u8d77\u6765\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">let<\/span> tokenCount = <span class=\"hljs-number\">0<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">let<\/span> contextSections = <span class=\"hljs-string\">''<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-keyword\">let<\/span> i = <span class=\"hljs-number\">0<\/span>; i &lt; hits.<span class=\"hljs-property\">length<\/span>; i += <span class=\"hljs-number\">1<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">  <span class=\"hljs-keyword\">const<\/span> { content } = hits[i].<span class=\"hljs-property\">document<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">  <span class=\"hljs-comment\">\/\/ \u6ce8\u610f encode\uff0c\u7528\u4e8e\u7ec4\u5408\u5206\u7247<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">  <span class=\"hljs-keyword\">const<\/span> encoded = tokenizer.<span class=\"hljs-title function_\">encode<\/span>(content);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">  tokenCount += encoded.<span class=\"hljs-property\">length<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">  <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">  <span class=\"hljs-comment\">\/\/ \u5224\u65ad\u662f\u5426\u8fbe\u5230 token \u4e0a\u9650<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">  <span class=\"hljs-keyword\">if<\/span> (tokenCount &gt;= <span class=\"hljs-variable constant_\">MAX_CONTEXT_TOKEN<\/span> &amp;&amp; contextSections !== <span class=\"hljs-string\">''<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    <span class=\"hljs-keyword\">break<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">  }<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">  contextSections += <span class=\"hljs-string\">`<span class=\"hljs-subst\">${content.trim()}<\/span>n---n`<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">}<\/span>\n<\/code><\/pre>\n<p>\u5230\u8fd9\u91cc\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e86<strong>\u95ee\u9898\u548c\u95ee\u9898\u5173\u8054\u7684\u5185\u5bb9<\/strong>\uff0c\u53ef\u4ee5\u7528\u5b83\u4eec\u6784\u9020\u4e00\u4e2a Prompt \u7528\u4e8e\u540e\u7eed AI \u5bf9\u8bdd\u4f7f\u7528\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">css<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-css code-block-extension-codeShowNum\" lang=\"css\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">const prompt = `You are <span class=\"hljs-selector-tag\">a<\/span> very kindly assistant who loves <span class=\"hljs-selector-tag\">to<\/span> help people. Given the following sections <span class=\"hljs-selector-tag\">from<\/span> documatation, answer the question using only that information, outputted in markdown format. If you are unsure and the answer is not explicitly written in the documentation, say \"Sorry, <span class=\"hljs-selector-tag\">I<\/span> don't know how <span class=\"hljs-selector-tag\">to<\/span> help with that.\" Always trying <span class=\"hljs-selector-tag\">to<\/span> anwser in the spoken language of the questioner.<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">Context sections:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">${contextSections}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">Question:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">${question}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">Answer as markdown (including related <span class=\"hljs-selector-tag\">code<\/span> snippets if available):`<\/span>\n<\/code><\/pre>\n<p>\u4e0b\u9762\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8c03\u7528 OpenAI \u7684 API \u8fdb\u884c AI \u5bf9\u8bdd\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> messages = [{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-attr\">role<\/span>: <span class=\"hljs-string\">'user'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  <span class=\"hljs-attr\">content<\/span>: prompt,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">}];<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> openai.<span class=\"hljs-property\">chat<\/span>.<span class=\"hljs-property\">completions<\/span>.<span class=\"hljs-title function_\">create<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">  messages,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">  <span class=\"hljs-attr\">model<\/span>: <span class=\"hljs-string\">'gpt-3.5-turbo'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">  <span class=\"hljs-attr\">max_tokens<\/span>: <span class=\"hljs-number\">512<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">  <span class=\"hljs-attr\">temperature<\/span>: <span class=\"hljs-number\">0.4<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">  <span class=\"hljs-attr\">stream<\/span>: <span class=\"hljs-literal\">true<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">})<\/span>\n<\/code><\/pre>\n<p>\u5176\u4e2d\uff0c<code>response<\/code> \u662f\u4e00\u4e2a OpenAI API \u8c03\u7528\u8fd4\u56de\u7684\u81ea\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u7684 Streaming Responses\uff0c\u76f4\u63a5\u5c06 <code>response<\/code> \u8fd4\u56de\u7ed9 <code>ask<\/code> \u63a5\u53e3\u8bf7\u6c42\u65b9\u80af\u5b9a\u662f\u4e0d\u5408\u7406\u7684\uff08\u8bf7\u6c42\u65b9\u53ea\u9700\u8981\u62ff\u5230\u7b54\u6848\uff09\u3002\u90a3\u4e48\uff0c\u8fd9\u91cc\u53ef\u4ee5\u4f7f\u7528\u8fd9\u91cc\u53ef\u4ee5\u4f7f\u7528 Vercel \u56e2\u961f\u5b9e\u73b0\u7684 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fvercel%2Fai\" target=\"_blank\" title=\"https:\/\/github.com\/vercel\/ai\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">ai<\/a> \u63d0\u4f9b\u7684 <code>OpenAIStream<\/code> \u51fd\u6570\u6765\u5b8c\u6210\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> { <span class=\"hljs-title class_\">OpenAIStream<\/span> } = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'ai'<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">const<\/span> stream = <span class=\"hljs-title class_\">OpenAIStream<\/span>(response);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">return<\/span> stream;<\/span>\n<\/code><\/pre>\n<p><code>OpenAIStream<\/code> \u4f1a\u81ea\u52a8\u5c06 OpenAI Completions \u8fd4\u56de\u7684\u7ed3\u679c\u89e3\u6790\u6210\u53ef\u4ee5\u6b63\u5e38\u8bfb\u53d6\u7684 Streaming Resonsese\uff0c\u5982\u679c\u4f7f\u7528\u7684\u662f AirCode \u5219\u53ef\u4ee5\u76f4\u63a5\u8fd4\u56de <code>stream<\/code>\uff0c\u5982\u679c\u4f7f\u7528\u7684\u662f\u666e\u901a\u7684 Node Server\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u4f7f\u7528 <code>ai<\/code> \u63d0\u4f9b\u7684 <code>streamToResponse<\/code> \u51fd\u6570\u6765\u5c06 <code>stream<\/code> \u8f6c\u4e3a ServerResponse \u5bf9\u8c61\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> { <span class=\"hljs-title class_\">OpenAIStream<\/span>, streamToResponse } = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'ai'<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">const<\/span> stream = <span class=\"hljs-title class_\">OpenAIStream<\/span>(response);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-title function_\">streamToResponse<\/span>(stream);<\/span>\n<\/code><\/pre>\n<h2 data-id=\"heading-6\">\u7ed3\u8bed<\/h2>\n<p>\u901a\u8fc7\u5b66\u4e60 Documate \u5185\u90e8\u7684\u5b9e\u73b0\u539f\u7406\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\u4e86\u5982\u4f55\u4ece\u5b9e\u9645\u7684\u95ee\u9898\u51fa\u53d1\uff0c\u7ed3\u5408\u4f7f\u7528 OpenAI API \u63d0\u4f9b\u7684\u6a21\u578b\u89e3\u51b3\u95ee\u9898\u3002\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u53bb\u505a\u522b\u7684\u573a\u666f\u63a2\u7d22\uff0c\u8ba9 AI \u6210\u4e3a\u73b0\u5728\u6216\u8005\u5c06\u6765\u6211\u4eec\u89e3\u51b3\u95ee\u9898\u7684\u4e00\u79cd\u6280\u672f\u624b\u6bb5\u6216\u5c1d\u8bd5\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u5c40\u9650\u4e8e\u4f1a\u4f7f\u7528 ChatGPT \u63d0\u95ee\u548c\u83b7\u53d6\u7b54\u6848\u3002<\/p>\n<blockquote>\n<p>\u6211\u662f\u4e94\u67f3\uff0c\u559c\u6b22\u521b\u65b0\u3001\u6363\u9f13\u6e90\u7801\uff0c\u4e13\u6ce8\u4e8e\u6e90\u7801\uff08Vue 3\u3001Vite\uff09\u3001\u524d\u7aef\u5de5\u7a0b\u5316\u3001\u8de8\u7aef\u7b49\u6280\u672f\u5b66\u4e60\u548c\u5206\u4eab\uff0c\u6b22\u8fce\u5173\u6ce8\u6211\u7684<strong>\u5fae\u4fe1\u516c\u4f17\u53f7 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fp9-juejin.byteimg.com%2Ftos-cn-i-k3u1fbpfcp%2F650eef2e7a0a4f1faf1bd68cd4fd961e~tplv-k3u1fbpfcp-zoom-1.image\" target=\"_blank\" title=\"https:\/\/p9-juejin.byteimg.com\/tos-cn-i-k3u1fbpfcp\/650eef2e7a0a4f1faf1bd68cd4fd961e~tplv-k3u1fbpfcp-zoom-1.image\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Code center<\/a> \u6216 <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2FWJCHumble\" target=\"_blank\" title=\"https:\/\/github.com\/WJCHumble\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">GitHub<\/a><\/strong>\u3002<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u5728 ChatGPT \u51fa\u73b0\u4e4b\u65f6\uff0c\u793e\u533a\u5185\u4e5f\u51fa\u73b0\u8fc7 \u628a React \u5b98\u65b9\u6587\u6863\u6295\u5582\u7ed9\u5b83 \uff0c\u7136\u540e\u5bf9\u5b83\u8fdb\u884c\u63d0\u95ee\u7684\u5b9e\u8df5\u3002\u4f46\u662f\uff0c\u7531\u4e8e\u6bcf\u6b21 ChatGPT \u5bf9\u8bdd\u80fd\u63a5\u53d7\u7684\u6587\u672c\u5185\u5bb9\u5bf9\u5e94\u7684 Token \u662f\u6709\u4e0a\u9650\u7684\uff0c\u6240\u4ee5<\/p>\n","protected":false},"author":1,"featured_media":11119,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","views":"3","footnotes":""},"categories":[3],"tags":[126,127,128,129,136],"collection":[],"class_list":["post-1558","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fenlei2","tag-gpt","tag-ai","tag-128","tag-129","tag-136"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/comments?post=1558"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1558\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media\/11119"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1558"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}