{"id":1806,"date":"2025-05-06T19:05:53","date_gmt":"2025-05-06T12:05:53","guid":{"rendered":"https:\/\/nlnc.e-shepherding.org\/?page_id=1806"},"modified":"2025-05-06T19:06:16","modified_gmt":"2025-05-06T12:06:16","slug":"1806-2","status":"publish","type":"page","link":"https:\/\/nlnc.e-shepherding.org\/?page_id=1806","title":{"rendered":""},"content":{"rendered":"<h1 style=\"text-align: center;\"><strong>\u5c5e\u7075\u95ee\u7b54\u6784\u5efa\u6d41\u7a0b<\/strong><\/h1>\n<h2 style=\"text-align: center;\">\u4e00\u3000\u524d\u7aef\u7684\u8bbe\u8ba1<\/h2>\n<p>\u3010\u5165\u53e3\uff1a\u7528\u6237\u8f93\u5165\u3011\uff08\u70b9\u51fb\u53d1\u9001 \u6216 \u56de\u8f66 \u6216 \u8bed\u97f3\u8bc6\u522b\u586b\u5165 input\uff09<br \/>\n\u2193<br \/>\n\u662f\u5426\u901a\u8fc7\u8bed\u97f3\u8bc6\u522b\uff1f<br \/>\n\u251c\u2500\u2500 \u662f \u2192<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u8c03\u7528 SpeechRecognition \u5f00\u59cb\u8bc6\u522b<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u76d1\u542c result \u2192 \u83b7\u53d6 transcript<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u662f\u5426\u7e41\u4f53\u73af\u5883\uff1f<br \/>\n\u2502 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u662f \u2192 convertToTraditional(<wbr \/>transcript)<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u5c06 transcript \u5199\u5165\u8f93\u5165\u6846 + \u81ea\u52a8\u542f\u7528\u53d1\u9001\u6309\u94ae<br \/>\n\u2514\u2500\u2500 \u5426 \u2192<br \/>\n\u76f4\u63a5\u4ece userInput.value \u83b7\u53d6\u8f93\u5165<\/p>\n<p>\u2193<br \/>\n\u3010\u7edf\u4e00\u8fdb\u5165 sendMessage \u6d41\u7a0b\u3011<br \/>\n\u2193<br \/>\nStep 1. convertTraditionalToSimplified<wbr \/>() \u2192 \u5c06\u7e41\u4f53\u8f6c\u4e3a\u7b80\u4f53<br \/>\n\u2193<br \/>\nStep 2. cleanPoliteStructure()<br \/>\n\u251c\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u904d\u5386 politePrefixes\uff0c\u5224\u65ad text.startsWith(prefix)<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u547d\u4e2d\u5219\u622a\u6389\u524d\u7f00 + trim()<br \/>\n\u2514\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u8fdb\u5165 removeSuffixes(text, politeSuffixes)<br \/>\n\u2514\u2500\u2500 \u8fde\u7eed\u53bb\u9664\u8bed\u6c14\u540e\u7f00\uff08\u5982\u201c\u5417\u201d\u201c\u5427\u201d\u201c\uff5e\u201d\u7b49\uff09<\/p>\n<p>\u2193<br \/>\nStep 3. standardizeQuestion()<br \/>\n\u251c\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u68c0\u67e5\u662f\u5426\u662f\u4f8b\u5916\u53e5\uff08\u5982\u201c\u6211\u4eec\u662f\u4ec0\u4e48\u201d\uff09\u2192 \u662f\u5219\u76f4\u63a5\u8fd4\u56de<br \/>\n\u251c\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u904d\u5386 replacements\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u82e5 keep: \u4ec5\u8bb0\u5f55 matchedType\uff0c\u4e0d\u6e05\u6d17<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u5426\u5219\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u53ea\u66ff\u6362\u7b2c\u4e00\u6b21\u547d\u4e2d\u7684 from \u2192 to<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u6e05\u6d17\u5b8c\u6210 \u2192 \u5f97\u5230 rawInput<\/p>\n<p>\u2193<br \/>\nStep 4. \u662f\u5426\u5339\u914d\u201c\u8bd7\u6b4c\u7f16\u53f7\u683c\u5f0f\u201d\uff1f\uff08\u6b63\u5219\uff09<br \/>\n\u2514\u2500\u2500 \/\u5927\u672c|\u8865\u5145\u672c|\u5c0f\u672c|\u513f\u7ae5[\\D]*(\\d{1,4})\/<br \/>\n\u251c\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u5c0f\u672c \u2192 \u66ff\u6362\u4e3a\u8865\u5145\u672c<br \/>\n\u251c\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u6784\u9020 prefix: \u5982\u201c\u5927\u672c\u8bd7\u6b4c\u7b2c123\u9996\u201d<br \/>\n\u2514\u2500<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/25b6\/32.png\" alt=\"\u25b6\" data-emoji=\"\u25b6\" aria-label=\"\u25b6\" data-bit=\"iit\" \/>\u00a0\u4ece window.hymns \u627e key.startsWith(prefix)<br \/>\n\u251c\u2500\u2500 \u627e\u5230\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 appendMessage \u6e32\u67d3 + formatMessage \u8bd7\u6b4c\u5185\u5bb9<br \/>\n\u2514\u2500\u2500 \u6ca1\u627e\u5230 \u2192 \u56de\u590d\u201c\u7f16\u53f7\u9519\u8bef\u6216\u672a\u6536\u5f55\u201d<\/p>\n<p>\u2193<br \/>\nStep 5. \u672c\u5730\u5173\u952e\u8bcd\u5339\u914d handleLocalDictionaryMatch(<wbr \/>rawInput)<br \/>\n\u2193<br \/>\n\u904d\u5386 configList \u4e2d\u5404\u7c7b\uff1a<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<wbr \/>\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 \u00a0\u8bcd\u5178\u79cd\u7c7b \u00a0 \u00a0 \u00a0| \u5b57\u5178\u540d \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 | \u9650\u5b9a\u6761\u4ef6 \u00a0 \u00a0 \u00a0\u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<wbr \/>\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u00a0\u8bd7\u6b4c \u00a0 \u00a0 \u00a0 \u00a0 | window.shi_ge \u00a0 \u00a0 \u00a0| \u5fc5\u987b\u5305\u542b&#8221;\u8bd7\u6b4c&#8221; \u2502<br \/>\n\u2502 \u00a0\u7ecf\u8282\u95ee\u7b54 \u00a0 \u00a0 | window.jing_jie \u00a0 | \u5fc5\u987b\u5305\u542b&#8221;\u7ecf\u8282&#8221; \u2502<br \/>\n\u2502 \u00a0\u6ce8\u89e3\u95ee\u7b54 \u00a0 \u00a0 | window.zhu_jie \u00a0 \u00a0| \u5fc5\u987b\u5305\u542b&#8221;\u6ce8\u89e3&#8221; \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<wbr \/>\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>\u2193<br \/>\n\u3010\u6bcf\u79cd\u8bcd\u5178\u5185\u90e8\u5339\u914d\u6d41\u7a0b\u3011<br \/>\n\u251c\u2500\u2500 \u5224\u65ad rawInput \u662f\u5426\u542b\u5173\u952e\u8bcd\uff1f\uff08\u5982 \u201c\u8bd7\u6b4c\u201d\uff09<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u5426 \u2192 \u8df3\u8fc7\u5f53\u524d\u7c7b\u578b<br \/>\n\u251c\u2500\u2500 \u662f\u5426\u542b\u6392\u9664\u8bcd\uff1f\uff08\u4ec5\u8bd7\u6b4c\uff1a\u70b9\u8bd7\u6b4c \/ \u5531\u8bd7\u6b4c\u7b49\uff09\u2192 \u662f\u5219\u8df3\u8fc7<br \/>\n\u251c\u2500\u2500 \u53bb\u9664\u5173\u952e\u8bcd\u540e \u2192 \u5f97\u5230 query\uff08\u6a21\u7cca\u4e3b\u8bcd\uff09<br \/>\n\u251c\u2500\u2500 \u4ece dict \u4e2d\u67e5\u627e\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u7cbe\u786e\u5339\u914d key === query<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u6a21\u7cca\u5339\u914d\uff08Fuse.js\uff09<br \/>\n\u2502 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u9608\u503c score &lt; 0.25\uff0875% \u76f8\u4f3c\u5ea6\u4ee5\u4e0a\uff09<br \/>\n\u2502 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u5408\u5e76\u7cbe\u786e\u5339\u914d + \u6a21\u7cca\u524d5\u9879\uff08\u4e0d\u91cd\u590d\uff09<br \/>\n\u251c\u2500\u2500 \u82e5\u6709\u5339\u914d\u7ed3\u679c\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u6e32\u67d3\u683c\u5f0f\u4e3a\uff1a\u6807\u9898 + \u67e5\u770b\u5168\u6587\u6309\u94ae + \u5185\u5bb9\u524d120\u5b57\u6458\u8981<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 appendMessage + \u63d2\u5165\u201c\u590d\u5236\u201d\u6309\u94ae + \u201c\u66f4\u591a\u201d\u6309\u94ae<br \/>\n\u2514\u2500\u2500 \u5339\u914d\u6210\u529f return true \u2192 \u505c\u6b62\u540e\u7eed\u6d41\u7a0b<\/p>\n<p>\u2193<br \/>\nStep 6. \u5c0f\u767e\u79d1\u515c\u5e95 window.xiao_bai_ke\uff08\u4e0d\u9650\u5236\u5173\u952e\u8bcd\uff09<br \/>\n\u251c\u2500\u2500 rawInput \u2192 query<br \/>\n\u251c\u2500\u2500 \u7cbe\u786e\u5339\u914d \/ \u6a21\u7cca\u5339\u914d\uff08Fuse\uff09<br \/>\n\u251c\u2500\u2500 \u8fd4\u56de\u524d5\u6761\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u6e32\u67d3\u683c\u5f0f\u4e3a\uff1a\u6807\u9898 + \u67e5\u770b\u5168\u6587\u6309\u94ae + \u5185\u5bb9\u524d240\u5b57\u6458\u8981<br \/>\n\u251c\u2500\u2500 appendMessage + \u63d2\u5165\u6309\u94ae<br \/>\n\u2514\u2500\u2500 \u5339\u914d\u6210\u529f return true<\/p>\n<p>\u2193<br \/>\nStep 7. fallback \u2192 \u540e\u7aef API \u8bf7\u6c42\uff08\u4e94\u7c7b\u7686\u672a\u547d\u4e2d\uff09<br \/>\n\u251c\u2500\u2500 showLoading()<br \/>\n\u251c\u2500\u2500 fetch(fixedApiUrl, { message: userMessage })<br \/>\n\u2502 \u00a0 \u00a0 \u251c\u2500\u2500 \u6210\u529f\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u2514\u2500\u2500 data.data.response \u2192 appendMessage<br \/>\n\u2502 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u63d2\u5165\u6309\u94ae\uff1a\u66f4\u591a \/ \u590d\u5236<br \/>\n\u2502 \u00a0 \u00a0 \u2514\u2500\u2500 \u5931\u8d25\uff1a<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 appendMessage(&#8220;\u8bf7\u6c42\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5&#8221;)<br \/>\n\u2514\u2500\u2500 removeLoading()<\/p>\n<p>\u2193<br \/>\n\u3010\u5b8c\u6210\u3011<\/p>\n<h2 style=\"text-align: center;\">\u4e8c\u3000\u540e\u7aef\u6d41\u7a0b\uff0c\u4ee5\u4e00\u822c\u5206\u7c7b\u4e3e\u4f8b<br \/>\n\uff08\u540e\u7aef\u5206\u4e3a\u56db\u7c7b\uff1a\u7ecf\u8282\u3001\u6ce8\u89e3\u3001\u8bd7\u6b4c\u3001\u4e00\u822c\u95ee\u7b54\uff09<\/h2>\n<p><span style=\"font-size: large;\">\u3010\u5165\u53e3\u3011\u8c03\u7528 process_general_request(<wbr \/>client_prompt)<br \/>\n\u2193<br \/>\nStep 1\uff1a\u68c0\u67e5 token \u957f\u5ea6<br \/>\n\u251c\u2500\u2500 \u82e5\u8d85\u8fc7 INPUT_TOKEN_LIMIT \u2192 \u8fd4\u56de\u9519\u8bef\u63d0\u793a<br \/>\n\u2514\u2500\u2500 \u5426 \u2192 \u7ee7\u7eed\u5904\u7406<\/span><\/p>\n<p>\u2193<br \/>\nStep 2\uff1a\u6784\u9020 Prompt \u6587\u672c<br \/>\n\u251c\u2500\u2500 \u63d2\u5165\u7528\u6237\u95ee\u9898\uff0c\u5e76\u52a0\u8bf4\u660e\uff1a<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u4e0d\u53ef\u6539\u5199\u539f\u6587<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u56de\u7b54\u5e94\u5305\u62ec\u7ecf\u8282\u51fa\u5904\u3001\u6b63\u6587\u3001\u53c2\u8003\u4fe1\u606f<br \/>\n\u2502 \u00a0 \u2514\u2500\u2500 \u8fd4\u56de\u683c\u5f0f\u4f8b\u5b50\uff08\u7528\u4e8e\u63d0\u793a\u683c\u5f0f\uff09<\/p>\n<p>\u2193<br \/>\nStep 3\uff1a\u6784\u5efa Bedrock API \u8bf7\u6c42\u4f53\uff08request_data\uff09<br \/>\n\u251c\u2500\u2500 input:<br \/>\n\u2502 \u00a0 \u2514\u2500\u2500 {&#8220;text&#8221;: prompt}<br \/>\n\u251c\u2500\u2500 retrieveAndGenerateConfigurati<wbr \/>on:<br \/>\n\u2502 \u00a0 \u2514\u2500\u2500 knowledgeBaseConfiguration:<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 knowledgeBaseId = KB_GENERAL_ID<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 modelArn = MODEL_ARN<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 retrievalConfiguration:<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 vectorSearchConfiguration:<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 overrideSearchType = &#8220;HYBRID&#8221; \u00a0 \u00a0 \u00a0<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u6df7\u5408\u641c\u7d22<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 numberOfResults = 5 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u68c0\u7d22\u6700\u591a 5 \u7bc7\u6587\u6863<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 generationConfiguration:<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 inferenceConfig:<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 textInferenceConfig:<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 temperature = 0.0<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 topP = 1.0<br \/>\n\u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 maxTokens = 1024<\/p>\n<p>\u2193<br \/>\nStep 4\uff1a\u8c03\u7528 API \u2192 retrieve_and_generate(request_<wbr \/>data)<br \/>\n\u251c\u2500\u2500 \u6355\u83b7\u8017\u65f6\u65e5\u5fd7<br \/>\n\u251c\u2500\u2500 \u82e5\u6210\u529f \u2192 \u83b7\u53d6 response \u5bf9\u8c61<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u63d0\u53d6 response[&#8220;output&#8221;][&#8220;text&#8221;]<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u83b7\u53d6 response[&#8220;citations&#8221;]\uff08\u6587\u6863\u5f15\u7528\u7ed3\u6784\uff09<br \/>\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 \u6bcf\u6761 citation \u5305\u542b\uff1a<br \/>\n\u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 generatedResponsePart.<wbr \/>textResponsePart.text<br \/>\n\u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 retrievedReferences[].<wbr \/>location.s3Location.uri<br \/>\n\u2502 \u00a0 \u2514\u2500\u2500 \u82e5\u65e0 citation \u2192 \u8fd4\u56de\u201c\u672a\u627e\u5230\u5339\u914d\u6587\u6863\u201d<\/p>\n<p>\u2193<br \/>\nStep 5\uff1a\u6574\u7406\u56de\u7b54\u6bb5\u843d\uff08\u6309\u6765\u6e90\u5206\u7ec4\uff09<br \/>\n\u251c\u2500\u2500 \u7528 grouped_text_by_source[s3_uri] \u5b58\u50a8\u6bcf\u6bb5\u6587\u5b57<br \/>\n\u251c\u2500\u2500 \u6bcf\u4e2a\u6587\u6863\u4e00\u6bb5\uff0c\u591a\u6bb5\u7528 &#8220;###&#8221; \u5206\u9694<br \/>\n\u2514\u2500\u2500 \u5408\u6210 output_text<\/p>\n<p>\u2193<br \/>\nStep 6\uff1a\u6574\u7406\u5f15\u7528\u4fe1\u606f<br \/>\n\u251c\u2500\u2500 \u904d\u5386\u6240\u6709 citation.retrievedReferences<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u53d6 metadata[&#8220;x-amz-bedrock-kb-<wbr \/>source-uri&#8221;]<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u4f7f\u7528 clean_filename() \u63d0\u53d6\u6587\u4ef6\u540d\uff08\u53bb\u524d\u7f00\/\u540e\u7f00\uff09<br \/>\n\u2502 \u00a0 \u251c\u2500\u2500 \u7f16\u53f7\u4e3a [1]\u3001[2]&#8230;<br \/>\n\u2502 \u00a0 \u2514\u2500\u2500 \u62fc\u63a5\u4e3a\u53c2\u8003\u4fe1\u606f\u6587\u672c\u5757 references_text<\/p>\n<p>\u2193<br \/>\nStep 7\uff1a\u5408\u5e76\u8f93\u51fa\u5185\u5bb9 + \u5f15\u7528<br \/>\n\u251c\u2500\u2500 output_text + &#8220;\\n\\n\u53c2\u8003\u4fe1\u606f\uff1a\\n&#8221; + sources.join(&#8220;\\n&#8221;)<br \/>\n\u2514\u2500\u2500 \u6784\u9020\u54cd\u5e94\uff1a<br \/>\n{<br \/>\n&#8220;response&#8221;: \u5408\u5e76\u540e\u6587\u672c,<br \/>\n&#8220;sources&#8221;: [\u6e05\u6d17\u540e\u6587\u4ef6\u540d\u5217\u8868]<br \/>\n}<\/p>\n<p>\u2193<br \/>\n\u3010\u8fd4\u56de\u3011<br \/>\n\u2192 main \u2192 lambda_handler<br \/>\n\u2192 \u6700\u7ec8\u901a\u8fc7 standard_response \u7edf\u4e00\u5c01\u88c5\u8fd4\u56de<\/p>\n<h2 style=\"text-align: center;\">\u4e09\u3000\u8fdb\u5165<span class=\"il\">Claude<\/span>\u00a0\u7684\u524d\u540e\u6d41\u7a0b<\/h2>\n<p class=\"yj6qo\">\u2192 \u6784\u9020 Prompt\uff1a<br \/>\n&#8211; \u542b\u683c\u5f0f\u8981\u6c42\uff08\u5982\u7ecf\u8282 + \u6ce8\u89e3 + \u53c2\u8003\u6765\u6e90\uff09<br \/>\n&#8211; \u63d2\u5165\u7528\u6237\u539f\u59cb\u95ee\u9898<br \/>\n\u2193<br \/>\n\u2192 \u6784\u9020 request_data\uff1a<br \/>\n\u251c\u2500 input: prompt\uff08\u7528\u6237\u95ee\u9898 + \u683c\u5f0f\u8bf4\u660e\uff09<br \/>\n\u2514\u2500 retrieveAndGenerateConfigurati<wbr \/>on:<br \/>\n\u251c\u2500 knowledgeBaseId: KB_GENERAL_ID<br \/>\n\u251c\u2500 modelArn:\u00a0<span class=\"il\">Claude<\/span>\u00a0\u6a21\u578b ARN<br \/>\n\u251c\u2500 vectorSearchConfiguration: Hybrid\uff08\u6df7\u5408\u68c0\u7d22\uff09<br \/>\n\u2514\u2500 generationConfiguration: maxTokens, temperature \u7b49<br \/>\n\u2193<br \/>\n\u2192 \u8c03\u7528\u00a0<span class=\"il\">Claude<\/span>\uff1a<br \/>\nclient_bedrock_knowledgebase.<wbr \/>retrieve_and_generate(request_<wbr \/>data)<br \/>\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550<br \/>\n<img decoding=\"async\" class=\"an1\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f9e0\/32.png\" alt=\"\ud83e\udde0\" data-emoji=\"\ud83e\udde0\" aria-label=\"\ud83e\udde0\" \/>\u00a0<span class=\"il\">Claude<\/span>\u00a0\u6267\u884c\u4e2d\uff08Bedrock \u5185\u90e8\u884c\u4e3a\uff09<br \/>\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550<br \/>\n\u2193<br \/>\n\u2192\u00a0<img decoding=\"async\" class=\"an1\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f50d\/32.png\" alt=\"\ud83d\udd0d\" data-emoji=\"\ud83d\udd0d\" aria-label=\"\ud83d\udd0d\" \/>\u00a0\u68c0\u7d22\u9636\u6bb5\uff08Retrieval\uff09\uff1a<br \/>\n&#8211;\u00a0<span class=\"il\">Claude<\/span>\u00a0\u81ea\u52a8\u4f7f\u7528 embedding \u5411\u91cf + keyword hybrid search<br \/>\n&#8211; \u4ece KB \u4e2d\u53d6 Top N\uff08\u5982 5 \u6761\uff09\u76f8\u5173\u6587\u6bb5<br \/>\n\u2193<br \/>\n\u2192\u00a0<img decoding=\"async\" class=\"an1\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f9e9\/32.png\" alt=\"\ud83e\udde9\" data-emoji=\"\ud83e\udde9\" aria-label=\"\ud83e\udde9\" \/>\u00a0\u4e0a\u4e0b\u6587\u62fc\u63a5\uff08Context \u6ce8\u5165\uff09\uff1a<br \/>\n&#8211; Bedrock \u81ea\u52a8\u5c06 retrieved \u6587\u6bb5\u6ce8\u5165\u00a0<span class=\"il\">Claude<\/span>\u00a0\u7684\u7cfb\u7edf\u4e0a\u4e0b\u6587\u4e2d<br \/>\n&#8211; \u4e0d\u9700\u8981\u4f60\u624b\u52a8\u62fc\u63a5\uff0c<span class=\"il\">Claude<\/span>\u00a0\u4f1a\u4ee5\u6b64\u4e3a\u751f\u6210\u53c2\u8003\u4f9d\u636e<br \/>\n\u2193<br \/>\n\u2192\u00a0<img decoding=\"async\" class=\"an1\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/270d_fe0f\/32.png\" alt=\"\u270d\ufe0f\" data-emoji=\"\u270d\ufe0f\" aria-label=\"\u270d\ufe0f\" \/>\u00a0\u751f\u6210\u9636\u6bb5\uff08Generation\uff09\uff1a<br \/>\n&#8211;\u00a0<span class=\"il\">Claude<\/span>\u00a0\u9605\u8bfb prompt + \u4e0a\u4e0b\u6587<br \/>\n&#8211; \u4e25\u683c\u6309\u683c\u5f0f\u8bf4\u660e\uff0c\u5f15\u7528 KB \u5185\u5bb9\u751f\u6210\u56de\u7b54<br \/>\n&#8211; \u8f93\u51fa\u5b57\u6bb5\u5305\u62ec\uff1a<br \/>\n\u251c\u2500 output.text\uff1a\u6700\u7ec8\u751f\u6210\u7684\u5b8c\u6574\u5185\u5bb9<br \/>\n\u2514\u2500 citations\uff1aretrievedReferences\uff08<wbr \/>\u5f15\u7528\u6765\u6e90\uff09<br \/>\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550<br \/>\n<img decoding=\"async\" class=\"an1\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" \/>\u00a0<span class=\"il\">Claude<\/span>\u00a0\u6267\u884c\u5b8c\u6bd5\uff0c\u8fd4\u56de\u7ed3\u679c\u5230 Lambda<br \/>\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<wbr \/>\u2550\u2550\u2550\u2550<br \/>\n\u2193<br \/>\n\u2192 \u63d0\u53d6 output.text \u4f5c\u4e3a\u56de\u7b54\u6b63\u6587<br \/>\n\u2193<br \/>\n\u2192 \u63d0\u53d6 citations \u2192 \u63d0\u53d6 retrievedReferences \u2192 \u5f97\u5230 S3 URI<br \/>\n\u2193<br \/>\n\u2192 clean_filename()\uff1a\u6e05\u7406\u6587\u4ef6\u540d\uff0c\u63d0\u53d6\u6765\u6e90\u540d\u79f0<br \/>\n\u2193<br \/>\n\u2192 \u6574\u7406\u53c2\u8003\u6765\u6e90\u5217\u8868\uff08\u7f16\u53f7 + \u6587\u4ef6\u540d\uff09<br \/>\n\u2193<br \/>\n\u2192 \u62fc\u63a5\u56de\u7b54\u6b63\u6587 + \u201c\u53c2\u8003\u4fe1\u606f\u201d\u6587\u5b57\u6bb5<br \/>\n\u2193<br \/>\n\u2192 \u5c01\u88c5\u4e3a JSON \u54cd\u5e94\uff08standard_response\uff09\uff0c\u5e26 CORS headers<\/p>\n<div class=\"adL\"><\/div>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\">\u56db\u3000\u524d\u7aef\u683c\u5f0f\u5316\uff0c\u5c55\u793a\u7b54\u6848\u7684\u6d41\u7a0b<\/h2>\n<p><span style=\"font-size: large;\"><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f4e6\/32.png\" alt=\"\ud83d\udce6\" data-emoji=\"\ud83d\udce6\" aria-label=\"\ud83d\udce6\" data-bit=\"iit\" \/>\u00a0\u540e\u53f0\u8fd4\u56de JSON \u54cd\u5e94<br \/>\n\u2514\u2500 { success: true, data: { response: &#8220;AI\u751f\u6210\u7684\u5185\u5bb9&#8230;&#8221; } }<br \/>\n\u2193<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2702_fe0f\/32.png\" alt=\"\u2702\ufe0f\" data-emoji=\"\u2702\ufe0f\" aria-label=\"\u2702\ufe0f\" data-bit=\"iit\" \/>\u00a0\u63d0\u53d6 message = data.data.response<br \/>\n\u2193<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f4e8\/32.png\" alt=\"\ud83d\udce8\" data-emoji=\"\ud83d\udce8\" aria-label=\"\ud83d\udce8\" data-bit=\"iit\" \/>\u00a0appendMessage(&#8216;AI&#8217;, message)<br \/>\n\u2193<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f3a8\/32.png\" alt=\"\ud83c\udfa8\" data-emoji=\"\ud83c\udfa8\" aria-label=\"\ud83c\udfa8\" data-bit=\"iit\" \/>\u00a0\u8c03\u7528 formatMessage(message)<br \/>\n\u2193<\/span><\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f527\/32.png\" alt=\"\ud83d\udd27\" data-emoji=\"\ud83d\udd27\" aria-label=\"\ud83d\udd27\" data-bit=\"iit\" \/>\u00a0formatMessage(message) \u6267\u884c\u903b\u8f91\uff1a<\/p>\n<p>\u2460 \u6bb5\u843d\u6807\u8bb0\u5904\u7406<br \/>\n\u2514\u2500 &#8220;###&#8221; \u2192 \u66ff\u6362\u4e3a \\n<br \/>\n\u2461 \u6bb5\u843d\u62c6\u5206<br \/>\n\u2514\u2500 message.split(&#8216;\\n&#8217;) \u2192 \u6bcf\u6bb5\u5305\u88f9 &lt;p&gt;<br \/>\n\u2514\u2500 \u6709\u52a0\u7c97\u6807\u8bb0 \u2192 margin-bottom: 5px<br \/>\n\u2514\u2500 \u666e\u901a\u6bb5\u843d \u2192 margin-bottom: 12px<\/p>\n<p>\u2462 \u6807\u70b9\u683c\u5f0f\u4f18\u5316<br \/>\n\u2514\u2500 , . ! ? : ; \u2192 \u66ff\u6362\u4e3a \uff0c\u3002\uff01\uff1f\uff1a\uff1b<br \/>\n\u2514\u2500 \u907f\u514d\u8bef\u66ff\u6362\u7f29\u5199\/\u7f51\u5740\uff08\u6b63\u5219\u9650\u5236\uff09<\/p>\n<p>\u2463 \u6570\u5b57\u5f15\u7528\u5904\u7406<br \/>\n\u2514\u2500 [123] \u2192 &lt;a class=&#8221;reference&#8221;&gt;[123]&lt;\/a&gt;<\/p>\n<p>\u2464 \u666e\u901a\u52a0\u7c97\u6587\u672c<br \/>\n\u2514\u2500 [\u5c5e\u7075\u5b9e\u9645] \u2192 &lt;strong data-tag=&#8221;inline-bold&#8221;&gt;[\u5c5e\u7075\u5b9e\u9645]&lt;<wbr \/>\/strong&gt;<\/p>\n<p>\u2465 \u63d2\u5165\u7ecf\u8282\u5185\u5bb9<br \/>\n\u2514\u2500 \u5339\u914d \u201c\u91cd\u8981\u7ecf\u8282\u51fa\u5904\uff1a[\u5f17\u56db22\u300123\uff1b\u6797\u524d\u4e091~3]\u201d<br \/>\n\u2514\u2500 \u6620\u5c04 window.bibleVerse \u2192 \u62fc\u6210\uff1a<br \/>\n&lt;p&gt;&lt;strong&gt;\u5f17\u56db22&lt;\/strong&gt; \u5185\u5bb9&lt;\/p&gt;<\/p>\n<p>\u2466 \u8bd7\u6b4c\u6807\u9898\u7ed3\u6784\u5316<br \/>\n\u2514\u2500 [\u5927\u672c\u8bd7\u6b4c\u7b2c123\u9996 \u67d0\u6807\u9898\u3000\u67e5\u770b\u5168\u6587]<br \/>\n\u2514\u2500 \u66ff\u6362\u4e3a\uff1a<br \/>\n&lt;span class=&#8221;hymn-title&#8221;&gt;\u6807\u9898&lt;\/span&gt;<br \/>\n&lt;button class=&#8221;view-original&#8221;&gt;\u67e5\u770b\u5168\u6587&lt;\/<wbr \/>button&gt;<\/p>\n<p>\u2467 \u6807\u9898\u5173\u952e\u8bcd\u9ad8\u4eae<br \/>\n\u2514\u2500 \u8bfb\u7ecf\uff1a\/\u53c2\u8003\u4fe1\u606f\uff1a\/\u58f9\u3000\u2192 \u52a0 &lt;strong&gt; \u5305\u88f9<\/p>\n<p>\u2468 \u6b63\u6587 \/ \u53c2\u8003\u4fe1\u606f \u5206\u533a<br \/>\n\u2514\u2500 \u4ee5 &lt;strong&gt;\u53c2\u8003\u4fe1\u606f\uff1a&lt;\/strong&gt; \u5206\u5272\u4e24\u6bb5<br \/>\n\u2514\u2500 \u5206\u522b &lt;p&gt; \u5305\u88f9\u6b63\u6587\u4e0e\u53c2\u8003\u5185\u5bb9<\/p>\n<p>\u2469 \u7e41\u4f53\u8f6c\u6362\uff08\u53ef\u9009\uff09<br \/>\n\u2514\u2500 \u82e5 navigator.language \u662f zh-TW\/HK\/MO<br \/>\n\u2514\u2500 \u8c03\u7528 convertToTraditional() \u8f6c\u6362\u6587\u672c<\/p>\n<p>\u2193<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f3af\/32.png\" alt=\"\ud83c\udfaf\" data-emoji=\"\ud83c\udfaf\" aria-label=\"\ud83c\udfaf\" data-bit=\"iit\" \/>\u00a0\u8fd4\u56de\u683c\u5f0f\u5316 HTML \u7ed3\u6784\u5b57\u7b26\u4e32<br \/>\n\u2193<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f4e5\/32.png\" alt=\"\ud83d\udce5\" data-emoji=\"\ud83d\udce5\" aria-label=\"\ud83d\udce5\" data-bit=\"iit\" \/>\u00a0\u63d2\u5165 DOM \u2192 appendMessage \u6e32\u67d3\uff1a<\/p>\n<p>&lt;div class=&#8221;message bot&#8221;&gt;<br \/>\n&lt;div class=&#8221;avatar&#8221;&gt;B&lt;\/div&gt;<br \/>\n&lt;div class=&#8221;content&#8221;&gt;[\u683c\u5f0f\u5316\u5185\u5bb9]&lt;\/div&gt;<br \/>\n&lt;\/div&gt;<\/p>\n<p>\u2193<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f3a8\/32.png\" alt=\"\ud83c\udfa8\" data-emoji=\"\ud83c\udfa8\" aria-label=\"\ud83c\udfa8\" data-bit=\"iit\" \/>\u00a0CSS \u6837\u5f0f\u4f5c\u7528\u70b9\uff1a<\/p>\n<p>\u3010.message.bot\u3011<br \/>\n\u2514\u2500 \u7070\u8272\u80cc\u666f\u3001\u5706\u89d2\u3001\u6700\u5927\u5bbd\u5ea6 90%<br \/>\n\u2514\u2500 padding: 10px 15px<br \/>\n\u2514\u2500 word-break: break-word<\/p>\n<p>\u3010.history\u3011<br \/>\n\u2514\u2500 flex \u5782\u76f4\u6392\u5217\u3001scroll-behavior: smooth<br \/>\n\u2514\u2500 \u6eda\u52a8\u9690\u85cf scrollbar-width: none<\/p>\n<p>\u3010.data-title\u3011<br \/>\n\u2514\u2500 \u7070\u80cc\u666f\u5757\u3001\u5b57\u95f4\u8ddd\u5927\u3001\u5706\u89d2\u6837\u5f0f<\/p>\n<p>\u3010.reference\u3011<br \/>\n\u2514\u2500 \u84dd\u8272\u7c97\u4f53\u94fe\u63a5\uff0chover \u9ad8\u4eae<\/p>\n<p>\u3010.view-original\u3011<br \/>\n\u2514\u2500 \u84dd\u5e95\u767d\u5b57\u6309\u94ae\uff0c\u70b9\u51fb\u5f39\u51fa\u539f\u6587 modal<\/p>\n<p>\u2193<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f518\/32.png\" alt=\"\ud83d\udd18\" data-emoji=\"\ud83d\udd18\" aria-label=\"\ud83d\udd18\" data-bit=\"iit\" \/>\u00a0\u81ea\u52a8\u6302\u8f7d\u9644\u52a0\u529f\u80fd\uff1a<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u67e5\u770b\u5168\u6587\u6309\u94ae<br \/>\n\u2514\u2500 showHymnModal(title, content)<br \/>\n\u2514\u2500 \u6e32\u67d3\u6a21\u6001\u5f39\u7a97 + formatMessage(content)<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u66f4\u591a\u6309\u94ae<br \/>\n\u2514\u2500 \u91cd\u65b0\u53d1\u9001\u539f\u59cb\u7528\u6237\u95ee\u9898 \u2192 \u8bf7\u6c42\u65b0\u56de\u590d<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u590d\u5236\u6309\u94ae<br \/>\n\u2514\u2500 \u63d0\u53d6\u4e0a\u4e0b\u6587\u95ee\u9898 + \u7b54\u6848 \u2192 \u5199\u5165\u526a\u8d34\u677f<\/p>\n<p>\u2193<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f4f1\/32.png\" alt=\"\ud83d\udcf1\" data-emoji=\"\ud83d\udcf1\" aria-label=\"\ud83d\udcf1\" data-bit=\"iit\" \/>\u00a0\u624b\u673a\u7aef\u9002\u914d\u7ec6\u8282\uff1a<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f539\/32.png\" alt=\"\ud83d\udd39\" data-emoji=\"\ud83d\udd39\" aria-label=\"\ud83d\udd39\" data-bit=\"iit\" \/>\u00a0.chat-container<br \/>\n\u2514\u2500 `max-width: 800px` \u2192 \u54cd\u5e94\u5f0f\u538b\u7f29\u4e3a 100%<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f539\/32.png\" alt=\"\ud83d\udd39\" data-emoji=\"\ud83d\udd39\" aria-label=\"\ud83d\udd39\" data-bit=\"iit\" \/>\u00a0.message.bot .content<br \/>\n\u2514\u2500 `max-width: 85%` on small screens<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f539\/32.png\" alt=\"\ud83d\udd39\" data-emoji=\"\ud83d\udd39\" aria-label=\"\ud83d\udd39\" data-bit=\"iit\" \/>\u00a0.modal-content<br \/>\n\u2514\u2500 `height: 90dvh`\u3001iOS `fixed + bottom` \u5f39\u7a97<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f539\/32.png\" alt=\"\ud83d\udd39\" data-emoji=\"\ud83d\udd39\" aria-label=\"\ud83d\udd39\" data-bit=\"iit\" \/>\u00a0textarea<br \/>\n\u2514\u2500 \u81ea\u52a8\u9ad8\u5ea6\u3001\u9690\u85cf\u6eda\u52a8\u6761\u3001\u4fdd\u7559\u53ef\u9009\u4e2d\u884c\u4e3a<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f539\/32.png\" alt=\"\ud83d\udd39\" data-emoji=\"\ud83d\udd39\" aria-label=\"\ud83d\udd39\" data-bit=\"iit\" \/>\u00a0iOS Safari<br \/>\n\u2514\u2500 @supports (font: -apple-system-body) \u2192 \u7cfb\u7edf\u5b57\u4f53\u7f29\u653e\u652f\u6301<\/p>\n<p>\u2193<\/p>\n<p><img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/1f50d\/32.png\" alt=\"\ud83d\udd0d\" data-emoji=\"\ud83d\udd0d\" aria-label=\"\ud83d\udd0d\" data-bit=\"iit\" \/>\u00a0\u6700\u7ec8\u5b8c\u6574\u89c6\u89c9\u5c55\u793a<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u683c\u5f0f\u6574\u9f50<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u5f15\u7528\u51c6\u786e<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u6309\u94ae\u53ef\u7528<br \/>\n<img decoding=\"async\" class=\"an1 CToWUd\" draggable=\"false\" src=\"https:\/\/fonts.gstatic.com\/s\/e\/notoemoji\/16.0\/2705\/32.png\" alt=\"\u2705\" data-emoji=\"\u2705\" aria-label=\"\u2705\" data-bit=\"iit\" \/>\u00a0\u8de8\u5e73\u53f0\u517c\u5bb9<\/p>\n<div class=\"yj6qo\"><\/div>\n<div class=\"adL\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5c5e\u7075\u95ee\u7b54\u6784\u5efa\u6d41\u7a0b \u4e00\u3000\u524d\u7aef\u7684\u8bbe\u8ba1 \u3010\u5165\u53e3\uff1a\u7528\u6237\u8f93\u5165\u3011\uff08\u70b9\u51fb\u53d1\u9001 \u6216 \u56de\u8f66 \u6216 \u8bed\u97f3\u8bc6\u522b\u586b\u5165 input\uff09 \u2193  [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1806","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=\/wp\/v2\/pages\/1806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1806"}],"version-history":[{"count":2,"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=\/wp\/v2\/pages\/1806\/revisions"}],"predecessor-version":[{"id":1808,"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=\/wp\/v2\/pages\/1806\/revisions\/1808"}],"wp:attachment":[{"href":"https:\/\/nlnc.e-shepherding.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}