{"id":1765,"date":"2024-05-29T13:39:33","date_gmt":"2024-05-29T13:39:33","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1765"},"modified":"2024-05-29T13:40:14","modified_gmt":"2024-05-29T13:40:14","slug":"kuaisupaotongopenaiweidiaomoxing","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/kuaisupaotongopenaiweidiaomoxing.html","title":{"rendered":"\u5feb\u901f\u8dd1\u901aopenai\u5fae\u8c03\u6a21\u578b"},"content":{"rendered":"<p>openai\u63d0\u4f9b\u4e24\u79cd\u5bf9\u8bdd\u65b9\u5f0f\uff0c\u4e00\u79cd\u662f\u4f7f\u7528\u73b0\u6210\u7684\u6a21\u578b\uff0c\u4f8b\u5982gpt-3.5-turbo\u3001gpt-4\uff0c\u53e6\u4e00\u79cd\u5c31\u662f\u5728\u73b0\u6709\u7684\u57fa\u7840\u4e0a\uff0c\u901a\u8fc7\u6295\u5582\u6570\u636e\u96c6\u6765\u8bad\u7ec3\u81ea\u5df1\u7684\u6a21\u578b\uff0c\u4e5f\u5c31\u662fFine-tuning\uff0c\u5fae\u8c03OpenAI\u6587\u672c\u751f\u6210\u6a21\u578b\u53ef\u4ee5\u4f7f\u5b83\u4eec\u5728\u7279\u5b9a\u5e94\u7528\u573a\u666f\u4e2d\u66f4\u597d\u5730\u53d1\u6325\u4f5c\u7528\uff0c\u4f46\u9700\u8981\u6295\u5165\u65f6\u95f4\u548c\u7cbe\u529b\u3002<\/p>\n<p>\u4e00\u4e9b\u5e38\u89c1\u7684\u5fae\u8c03\u53ef\u4ee5\u6539\u5584\u7ed3\u679c\u7684\u7528\u4f8b\u5305\u62ec\uff1a<\/p>\n<ul>\n<li>\u8bbe\u7f6e\u98ce\u683c\u3001\u8bed\u6c14\u3001\u683c\u5f0f\u6216\u5176\u4ed6\u5b9a\u6027\u65b9\u9762<\/li>\n<li>\u63d0\u9ad8\u751f\u6210\u671f\u671b\u8f93\u51fa\u7684\u53ef\u9760\u6027<\/li>\n<li>\u4ee5\u7279\u5b9a\u65b9\u5f0f\u5904\u7406\u8bb8\u591a\u8fb9\u7f18\u60c5\u51b5<\/li>\n<li>\u6267\u884c\u96be\u4ee5\u7528\u63d0\u793a\u6e05\u695a\u8868\u8fbe\u7684\u65b0\u6280\u80fd\u6216\u4efb\u52a1\n\u672c\u4eba\u662f\u671f\u671b\u80fd\u591f\u7528AI\u4ee3\u66ff\u4eba\u5de5\u5ba2\u670d\uff0c\u6240\u4ee5\u5c1d\u8bd5\u4e86\u4e00\u4e0bopenai\u7684\u5fae\u8c03\u6a21\u578b\uff0c\u672c\u804c\u524d\u7aef\uff0c\u6587\u7ae0\u4e2d\u90e8\u5206\u76f4\u63a5\u7ffb\u8bd1\u7684\u5b98\u7f51\u6587\u6863\uff0c\u5176\u4f59\u8bdd\u672f\u4ec5\u4f9b\u53c2\u8003\uff0c\u4e0d\u662f\u4e13\u4e1a\u4eba\u58eb\uff0c\u6240\u4ee5\u5982\u679c\u6709\u4ec0\u4e48\u6982\u5ff5\u6216\u8005\u672f\u8bed\u8bf4\u9519\u4e86\u7684\u6b22\u8fce\u6307\u6b63\u3002<\/li>\n<\/ul>\n<h3 data-id=\"heading-0\">\u51c6\u5907\u6570\u636e\u96c6<\/h3>\n<p>\u201c\u9700\u8981\u521b\u5efa\u4e00\u7ec4\u591a\u6837\u5316\u7684\u6f14\u793a\u5bf9\u8bdd\uff0c\u8fd9\u4e9b\u5bf9\u8bdd\u7c7b\u4f3c\u4e8e\u8981\u6c42\u6a21\u578b\u5728\u751f\u4ea7\u4e2d\u7684\u63a8\u7406\u65f6\u54cd\u5e94\u7684\u5bf9\u8bdd\u3002\u201d<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">json<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-json code-block-extension-codeShowNum\" lang=\"json\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"messages\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-punctuation\">[<\/span><span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"system\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Marv is a factual chatbot that is also sarcastic.\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"user\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"What's the capital of France?\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"assistant\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Paris, as if everyone doesn't know that already.\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">]<\/span><span class=\"hljs-punctuation\">}<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"messages\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-punctuation\">[<\/span><span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"system\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Marv is a factual chatbot that is also sarcastic.\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"user\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Who wrote 'Romeo and Juliet'?\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"assistant\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Oh, just some guy named William Shakespeare. Ever heard of him?\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">]<\/span><span class=\"hljs-punctuation\">}<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"messages\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-punctuation\">[<\/span><span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"system\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Marv is a factual chatbot that is also sarcastic.\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"user\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"How far is the Moon from Earth?\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-punctuation\">{<\/span><span class=\"hljs-attr\">\"role\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"assistant\"<\/span><span class=\"hljs-punctuation\">,<\/span> <span class=\"hljs-attr\">\"content\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"Around 384,400 kilometers. Give or take a few, like that really matters.\"<\/span><span class=\"hljs-punctuation\">}<\/span><span class=\"hljs-punctuation\">]<\/span><span class=\"hljs-punctuation\">}<\/span><\/span>\n<\/code><\/pre>\n<p>\u201c\u8981\u5fae\u8c03\u6a21\u578b\uff0c\u60a8\u9700\u8981\u63d0\u4f9b\u81f3\u5c11 10 \u4e2a\u793a\u4f8b\u3002\u6211\u4eec\u901a\u5e38\u4f1a\u770b\u5230\u5bf9 50 \u5230 100 \u4e2a\u8bad\u7ec3\u793a\u4f8b\u8fdb\u884c\u5fae\u8c03\u4f1a\u5e26\u6765\u660e\u663e\u7684\u6539\u8fdb\uff0c\u4f46\u6b63\u786e\u7684\u6570\u91cf\u6839\u636e\u5177\u4f53\u7684\u7528\u4f8b\u800c\u6709\u5f88\u5927\u5dee\u5f02\u3002\u201d<\/p>\n<p>\u8bad\u7ec3\u6a21\u578b\u65f6\u9700\u8981\u4e0a\u4f20\u4e24\u4e2a.jsonl\u6587\u4ef6\uff0c\u4e00\u4e2a\u8bad\u7ec3\u96c6\u548c\u4e00\u4e2a\u6821\u9a8c\u96c6\uff0c\u5176\u4e2d\u8bad\u7ec3\u96c6\u7528\u4e8e\u8bad\u7ec3\u6a21\u578b\uff0c\u9a8c\u8bc1\u96c6\u7528\u4e8e\u8bc4\u4f30\u6a21\u578b\u7684\u6027\u80fd\u548c\u8c03\u6574\u8d85\u53c2\u6570\u3002\u6821\u9a8c\u96c6\u6570\u636e\u6761\u6570\u4e00\u822c\u662f\u8bad\u7ec3\u96c6\u768410%-30%\u3002\u5efa\u8bae\u4e00\u5f00\u59cb\u5c31\u591a\u51c6\u5907\u4e00\u4e9b\u6570\u636e\uff0c\u5e76\u628a\u6570\u636e\u90fd\u6e05\u7406\u4e00\u4e0b\uff0c\u907f\u514d\u5f71\u54cd\u6700\u540e\u7684\u7ed3\u679c\u3002<\/p>\n<h3 data-id=\"heading-1\">\u6821\u9a8c<\/h3>\n<p>\u6821\u9a8c\u6bcf\u6761\u6570\u636e\u4e2d\u7684token\u6570\u4e0d\u8d85\u8fc7\u9650\u5236\uff0ctoken\u6570\u91cf\u7684\u9650\u5236\u53d6\u51b3\u4e8e\u60a8\u9009\u62e9\u7684\u578b\u53f7\u3002\u5bf9\u4e8egpt-3.5-turbo-0125\uff0c\u6700\u5927\u4e0a\u4e0b\u6587\u957f\u5ea6\u4e3a 16,385\uff0c\u56e0\u6b64\u6bcf\u4e2a\u8bad\u7ec3\u793a\u4f8b\u4e5f\u9650\u5236\u4e3a 16,385 \u4e2atoken\u3002\u8d85\u8fc7\u7684\u90e8\u5206\u4f1a\u76f4\u63a5\u88ab\u622a\u53d6\u3002<\/p>\n<p>\u9644token\u6821\u9a8c\u3001\u8ba1\u6570\u548c\u8ba1\u8d39\u7684\u811a\u672c\uff1atoken_conter.py<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">import<\/span> json<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">import<\/span> tiktoken<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">import<\/span> numpy <span class=\"hljs-keyword\">as<\/span> np<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> defaultdict<\/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-comment\"># \u4ece jsonl \u6587\u4ef6\u4e2d\u8bfb\u53d6\u6d88\u606f\u5217\u8868<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">read_messages_from_jsonl<\/span>(<span class=\"hljs-params\">jsonl_file<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp; &nbsp; messages = []<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp; &nbsp; <span class=\"hljs-keyword\">with<\/span> <span class=\"hljs-built_in\">open<\/span>(jsonl_file, <span class=\"hljs-string\">'r'<\/span>, encoding=<span class=\"hljs-string\">'utf-8'<\/span>) <span class=\"hljs-keyword\">as<\/span> f:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">for<\/span> line <span class=\"hljs-keyword\">in<\/span> f:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message = json.loads(line.strip())<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; messages.append(message)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">&nbsp; &nbsp; <span class=\"hljs-keyword\">return<\/span> messages<\/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-comment\"># \u8bfb\u53d6\u4f60\u7684 jsonl \u6587\u4ef6\u5e76\u5c06\u5176\u8f6c\u6362\u4e3a\u6d88\u606f\u5217\u8868<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">jsonl_file = <span class=\"hljs-string\">'.\/Training.jsonl'<\/span> &nbsp;<span class=\"hljs-comment\"># \u4fee\u6539\u4e3a\u4f60\u7684 jsonl \u6587\u4ef6\u8def\u5f84<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">dataset = read_messages_from_jsonl(jsonl_file)<\/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 class=\"hljs-comment\"># Format error checks<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">format_errors = defaultdict(<span class=\"hljs-built_in\">int<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><span class=\"hljs-keyword\">for<\/span> ex <span class=\"hljs-keyword\">in<\/span> dataset:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-built_in\">isinstance<\/span>(ex, <span class=\"hljs-built_in\">dict<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"data_type\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">continue<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp; &nbsp; messages = ex.get(<span class=\"hljs-string\">\"messages\"<\/span>, <span class=\"hljs-literal\">None<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> messages:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"missing_messages_list\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">continue<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp; &nbsp; <span class=\"hljs-keyword\">for<\/span> message <span class=\"hljs-keyword\">in<\/span> messages:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-string\">\"role\"<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> message <span class=\"hljs-keyword\">or<\/span> <span class=\"hljs-string\">\"content\"<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> message:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"message_missing_key\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-built_in\">any<\/span>(k <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> (<span class=\"hljs-string\">\"role\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>, <span class=\"hljs-string\">\"name\"<\/span>) <span class=\"hljs-keyword\">for<\/span> k <span class=\"hljs-keyword\">in<\/span> message):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"message_unrecognized_key\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> message.get(<span class=\"hljs-string\">\"role\"<\/span>, <span class=\"hljs-literal\">None<\/span>) <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> (<span class=\"hljs-string\">\"system\"<\/span>, <span class=\"hljs-string\">\"user\"<\/span>, <span class=\"hljs-string\">\"assistant\"<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"unrecognized_role\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp; &nbsp; &nbsp; &nbsp; content = message.get(<span class=\"hljs-string\">\"content\"<\/span>, <span class=\"hljs-literal\">None<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> content <span class=\"hljs-keyword\">or<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-built_in\">isinstance<\/span>(content, <span class=\"hljs-built_in\">str<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"missing_content\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-built_in\">any<\/span>(message.get(<span class=\"hljs-string\">\"role\"<\/span>, <span class=\"hljs-literal\">None<\/span>) == <span class=\"hljs-string\">\"assistant\"<\/span> <span class=\"hljs-keyword\">for<\/span> message <span class=\"hljs-keyword\">in<\/span> messages):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp; &nbsp; &nbsp; &nbsp; format_errors[<span class=\"hljs-string\">\"example_missing_assistant_message\"<\/span>] += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"49\"><span class=\"hljs-keyword\">if<\/span> format_errors:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"50\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">\"Found errors:\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"51\">&nbsp; &nbsp; <span class=\"hljs-keyword\">for<\/span> k, v <span class=\"hljs-keyword\">in<\/span> format_errors.items():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"52\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{k}<\/span>: <span class=\"hljs-subst\">{v}<\/span>\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"53\"><span class=\"hljs-keyword\">else<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"54\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">\"No errors found\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"55\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"56\"><span class=\"hljs-comment\"># Token counting functions<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"57\">encoding = tiktoken.get_encoding(<span class=\"hljs-string\">\"cl100k_base\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"58\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"59\"><span class=\"hljs-comment\"># not exact!<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"60\"><span class=\"hljs-comment\"># simplified from https:\/\/github.com\/openai\/openai-cookbook\/blob\/main\/examples\/How_to_count_tokens_with_tiktoken.ipynb<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"61\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">num_tokens_from_messages<\/span>(<span class=\"hljs-params\">messages, tokens_per_message=<span class=\"hljs-number\">3<\/span>, tokens_per_name=<span class=\"hljs-number\">1<\/span><\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"62\">&nbsp; &nbsp; num_tokens = <span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"63\">&nbsp; &nbsp; <span class=\"hljs-keyword\">for<\/span> message <span class=\"hljs-keyword\">in<\/span> messages:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"64\">&nbsp; &nbsp; &nbsp; &nbsp; num_tokens += tokens_per_message<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"65\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">for<\/span> key, value <span class=\"hljs-keyword\">in<\/span> message.items():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"66\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num_tokens += <span class=\"hljs-built_in\">len<\/span>(encoding.encode(value))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"67\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> key == <span class=\"hljs-string\">\"name\"<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"68\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num_tokens += tokens_per_name<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"69\">&nbsp; &nbsp; num_tokens += <span class=\"hljs-number\">3<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"70\">&nbsp; &nbsp; <span class=\"hljs-keyword\">return<\/span> num_tokens<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"71\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"72\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">num_assistant_tokens_from_messages<\/span>(<span class=\"hljs-params\">messages<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"73\">&nbsp; &nbsp; num_tokens = <span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"74\">&nbsp; &nbsp; <span class=\"hljs-keyword\">for<\/span> message <span class=\"hljs-keyword\">in<\/span> messages:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"75\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> message[<span class=\"hljs-string\">\"role\"<\/span>] == <span class=\"hljs-string\">\"assistant\"<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"76\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num_tokens += <span class=\"hljs-built_in\">len<\/span>(encoding.encode(message[<span class=\"hljs-string\">\"content\"<\/span>]))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"77\">&nbsp; &nbsp; <span class=\"hljs-keyword\">return<\/span> num_tokens<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"78\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"79\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">print_distribution<\/span>(<span class=\"hljs-params\">values, name<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"80\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"n#### Distribution of <span class=\"hljs-subst\">{name}<\/span>:\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"81\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"min \/ max: <span class=\"hljs-subst\">{<span class=\"hljs-built_in\">min<\/span>(values)}<\/span>, <span class=\"hljs-subst\">{<span class=\"hljs-built_in\">max<\/span>(values)}<\/span>\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"82\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"mean \/ median: <span class=\"hljs-subst\">{np.mean(values)}<\/span>, <span class=\"hljs-subst\">{np.median(values)}<\/span>\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"83\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"p5 \/ p95: <span class=\"hljs-subst\">{np.quantile(values, <span class=\"hljs-number\">0.1<\/span>)}<\/span>, <span class=\"hljs-subst\">{np.quantile(values, <span class=\"hljs-number\">0.9<\/span>)}<\/span>\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"84\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"85\"><span class=\"hljs-comment\"># Warnings and tokens counts<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"86\">n_missing_system = <span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"87\">n_missing_user = <span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"88\">n_messages = []<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"89\">convo_lens = []<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"90\">assistant_message_lens = []<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"91\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"92\"><span class=\"hljs-keyword\">for<\/span> ex <span class=\"hljs-keyword\">in<\/span> dataset:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"93\">&nbsp; &nbsp; messages = ex[<span class=\"hljs-string\">\"messages\"<\/span>]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"94\">&nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-built_in\">any<\/span>(message[<span class=\"hljs-string\">\"role\"<\/span>] == <span class=\"hljs-string\">\"system\"<\/span> <span class=\"hljs-keyword\">for<\/span> message <span class=\"hljs-keyword\">in<\/span> messages):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"95\">&nbsp; &nbsp; &nbsp; &nbsp; n_missing_system += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"96\">&nbsp; &nbsp; <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-built_in\">any<\/span>(message[<span class=\"hljs-string\">\"role\"<\/span>] == <span class=\"hljs-string\">\"user\"<\/span> <span class=\"hljs-keyword\">for<\/span> message <span class=\"hljs-keyword\">in<\/span> messages):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"97\">&nbsp; &nbsp; &nbsp; &nbsp; n_missing_user += <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"98\">&nbsp; &nbsp; n_messages.append(<span class=\"hljs-built_in\">len<\/span>(messages))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"99\">&nbsp; &nbsp; convo_lens.append(num_tokens_from_messages(messages))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"100\">&nbsp; &nbsp; assistant_message_lens.append(num_assistant_tokens_from_messages(messages))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"101\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"102\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">\"Num examples missing system message:\"<\/span>, n_missing_system)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"103\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">\"Num examples missing user message:\"<\/span>, n_missing_user)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"104\">print_distribution(n_messages, <span class=\"hljs-string\">\"num_messages_per_example\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"105\">print_distribution(convo_lens, <span class=\"hljs-string\">\"num_total_tokens_per_example\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"106\">print_distribution(assistant_message_lens, <span class=\"hljs-string\">\"num_assistant_tokens_per_example\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"107\">n_too_long = <span class=\"hljs-built_in\">sum<\/span>(l &gt; <span class=\"hljs-number\">4096<\/span> <span class=\"hljs-keyword\">for<\/span> l <span class=\"hljs-keyword\">in<\/span> convo_lens)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"108\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"n<span class=\"hljs-subst\">{n_too_long}<\/span> examples may be over the 4096 token limit, they will be truncated during fine-tuning\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"109\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"110\"><span class=\"hljs-comment\"># Pricing and default n_epochs estimate<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"111\">MAX_TOKENS_PER_EXAMPLE = <span class=\"hljs-number\">4096<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"112\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"113\">TARGET_EPOCHS = <span class=\"hljs-number\">3<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"114\">MIN_TARGET_EXAMPLES = <span class=\"hljs-number\">100<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"115\">MAX_TARGET_EXAMPLES = <span class=\"hljs-number\">25000<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"116\">MIN_DEFAULT_EPOCHS = <span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"117\">MAX_DEFAULT_EPOCHS = <span class=\"hljs-number\">25<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"118\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"119\">n_epochs = TARGET_EPOCHS<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"120\">n_train_examples = <span class=\"hljs-built_in\">len<\/span>(dataset)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"121\"><span class=\"hljs-keyword\">if<\/span> n_train_examples * TARGET_EPOCHS &lt; MIN_TARGET_EXAMPLES:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"122\">&nbsp; &nbsp; n_epochs = <span class=\"hljs-built_in\">min<\/span>(MAX_DEFAULT_EPOCHS, MIN_TARGET_EXAMPLES \/\/ n_train_examples)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"123\"><span class=\"hljs-keyword\">elif<\/span> n_train_examples * TARGET_EPOCHS &gt; MAX_TARGET_EXAMPLES:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"124\">&nbsp; &nbsp; n_epochs = <span class=\"hljs-built_in\">max<\/span>(MIN_DEFAULT_EPOCHS, MAX_TARGET_EXAMPLES \/\/ n_train_examples)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"125\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"126\">n_billing_tokens_in_dataset = <span class=\"hljs-built_in\">sum<\/span>(<span class=\"hljs-built_in\">min<\/span>(MAX_TOKENS_PER_EXAMPLE, length) <span class=\"hljs-keyword\">for<\/span> length <span class=\"hljs-keyword\">in<\/span> convo_lens)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"127\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"Dataset has ~<span class=\"hljs-subst\">{n_billing_tokens_in_dataset}<\/span> tokens that will be charged for during training\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"128\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"By default, you'll train for <span class=\"hljs-subst\">{n_epochs}<\/span> epochs on this dataset\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"129\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"By default, you'll be charged for ~<span class=\"hljs-subst\">{n_epochs * n_billing_tokens_in_dataset}<\/span> tokens\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"130\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">\"See pricing page to estimate total costs\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"131\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"132\"><span class=\"hljs-comment\"># base cost per 1k tokens * number of tokens in the input file * number of epochs trained<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"133\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">calculate_price_per_epoch<\/span>(<span class=\"hljs-params\">token_price_per_k, num_tokens, num_epochs<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"134\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u8ba1\u7b97\u6bcf\u4e2a epoch \u7684\u4ef7\u683c<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"135\">&nbsp; &nbsp; price_per_epoch = token_price_per_k * (num_tokens \/ <span class=\"hljs-number\">1000<\/span>) * num_epochs<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"136\">&nbsp; &nbsp; <span class=\"hljs-keyword\">return<\/span> price_per_epoch<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"137\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"138\"><span class=\"hljs-comment\"># Token \u4ef7\u683c\uff08\u6bcf\u4e2a token\uff09<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"139\">token_dollar_per_k = <span class=\"hljs-number\">0.0080<\/span> <span class=\"hljs-comment\"># $0.0080 \/ 1K tokens<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"140\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"141\"><span class=\"hljs-comment\"># \u8ba1\u7b97\u603b\u4ef7\u683c<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"142\">total_dollar = calculate_price_per_epoch(token_dollar_per_k, n_billing_tokens_in_dataset, n_epochs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"143\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"144\"><span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"Total price: $~<span class=\"hljs-subst\">{total_dollar}<\/span>\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"145\"><\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u6548\u679c\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/8e1a63e5960043ee804e44e3c203d9c9.png\" alt=\"image.png\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-2\">\u5f00\u59cb\u8bad\u7ec3<\/h3>\n<p>\u53ef\u4ee5\u4f7f\u7528\u56fe\u5f62\u5316\u8bad\u7ec3\u6216\u8005\u7528\u4ee3\u7801\u521b\u5efa\uff0c\u8fd9\u91cc\u6211\u9009\u62e9\u4e86\u56fe\u5f62\u5316\u8bad\u7ec3<\/p>\n<p>1.\u4e0a\u4f20\u6570\u636e\u96c6<\/p>\n<p>\u53ef\u4ee5\u63d0\u524d\u4e0a\u4f20\uff0c\u4e5f\u53ef\u4ee5\u5728\u521b\u5efa\u8bad\u7ec3\u4efb\u52a1\u65f6\u4e0a\u4f20<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/757d0f61ba9e7396862007881a052a77.png\" alt=\"image (1).png\" \/><\/figure>\n<\/p>\n<p>2.\u521b\u5efa\u8bad\u7ec3\u4efb\u52a1<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/8bf7b0b624f4fd120c1b73f853c9155e.png\" alt=\"image (2).png\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-3\">\u8fd0\u884c<\/h3>\n<p>\u4e2d\u9014\u5fd8\u622a\u56fe\u4e86\uff0c\u9700\u8981\u7b49\u6a21\u578b\u8dd1\u4e00\u4f1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/8aee63777372a34ca5d5fc56264b68f7.png\" alt=\"image (3).png\" \/><\/figure>\n<\/p>\n<p>\u6210\u529f\u4e4b\u540e\u5c31\u53ef\u4ee5\u8bd5\u7528\u4e86<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/5e9ec640d09836c21975a53359c40435.png\" alt=\"image (4).png\" \/><\/figure>\n<\/p>\n<p>\u9644\uff1afine-turning.py<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">from<\/span> openai <span class=\"hljs-keyword\">import<\/span> OpenAI<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">import<\/span> json<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">client = OpenAI()<\/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 class=\"hljs-comment\"># \u521b\u5efa<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-comment\"># client.fine_tuning.jobs.create(<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-comment\"># &nbsp; training_file=\"file-krCDQKRmCzcYxiOAMxef69nK\", <\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-comment\"># &nbsp; model=\"gpt-3.5-turbo\",<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-comment\"># &nbsp; hyperparameters={<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-comment\"># &nbsp; &nbsp; \"n_epochs\":3<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-comment\"># &nbsp; }<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-comment\"># )<\/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 class=\"hljs-keyword\">import<\/span> openai<\/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 class=\"hljs-comment\"># \u521d\u59cb\u5316\u5bf9\u8bdd<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">conversation = [<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp; &nbsp; {<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"system\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: <span class=\"hljs-string\">\"xxx\"<\/span>},<\/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>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-keyword\">while<\/span> <span class=\"hljs-literal\">True<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u83b7\u53d6\u7528\u6237\u8f93\u5165<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp; &nbsp; user_input = <span class=\"hljs-built_in\">input<\/span>(<span class=\"hljs-string\">\"\u7528\u6237\uff1a\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp; &nbsp; <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u6dfb\u52a0\u7528\u6237\u8f93\u5165\u5230\u5bf9\u8bdd\u4e2d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp; &nbsp; conversation.append({<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"user\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: user_input})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp; &nbsp; <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u8bf7\u6c42\u6a21\u578b\u56de\u590d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp; &nbsp; completion = client.chat.completions.create(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp; &nbsp; &nbsp; &nbsp; model=<span class=\"hljs-string\">\"ft:gpt-3.5-turbo-0125:xxx:xx:xxx\"<\/span>, <span class=\"hljs-comment\"># \u8bad\u7ec3\u6210\u529f\u540e\u7684\u6a21\u578b\u540d\u79f0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp; &nbsp; &nbsp; &nbsp; messages=conversation<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp; &nbsp; )<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp; &nbsp; <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u83b7\u53d6\u6a21\u578b\u56de\u590d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp; &nbsp; response = completion.choices[<span class=\"hljs-number\">0<\/span>].message.content<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp; &nbsp; <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u6253\u5370\u6a21\u578b\u56de\u590d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">&nbsp; &nbsp; <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">\"\u6a21\u578b\uff1a\"<\/span>, response)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp; &nbsp; <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp; &nbsp; <span class=\"hljs-comment\"># \u6dfb\u52a0\u6a21\u578b\u56de\u590d\u5230\u5bf9\u8bdd\u4e2d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">&nbsp; &nbsp; conversation.append({<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"assistant\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: response})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\"><\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u6548\u679c\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/1455f9d5d957da147c0fcb18c198a15f.png\" alt=\"image (5).png\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-4\">\u7ed3\u5c3e<\/h3>\n<p>\u641e\u4e86\u4e24\u6b21\u611f\u89c9\u6548\u679c\u4e0d\u662f\u5f88\u7406\u60f3\uff0cTraining loss\u4e24\u6b21\u90fd\u5f88\u9ad8\uff0c\u7b2c\u4e00\u6b21\u4ee5\u4e3a\u662f\u6570\u636e\u96c6\u7ed9\u5f97\u592a\u5c11\u4e86\uff0c200\u591a\u6761\u6570\u636e\uff0c\u4e14\u6ca1\u6709\u4e0a\u4f20\u6821\u9a8c\u96c6\uff0c\u7b2c\u4e8c\u6b21\u589e\u52a0\u4e86\u4e09\u500d\uff0c\u6821\u9a8c\u96c6\u4e5f\u51c6\u5907\u4e86\uff0c\u4f9d\u65e7\u5f88\u9ad8\uff0c\u53ef\u80fd\u8fd9\u79cd\u5fae\u8c03\u6a21\u578b\u4e0d\u592a\u9002\u7528\u4e8e\u6211\u7684\u4f7f\u7528\u573a\u666f\uff08\u4e2d\u6587\u3001\u5ba2\u670d\uff09<\/p>","protected":false},"excerpt":{"rendered":"<p>openai\u63d0\u4f9b\u4e24\u79cd\u5bf9\u8bdd\u65b9\u5f0f\uff0c\u4e00\u79cd\u662f\u4f7f\u7528\u73b0\u6210\u7684\u6a21\u578b\uff0c\u4f8b\u5982gpt-3.5-turbo\u3001gpt-4\uff0c\u53e6\u4e00\u79cd\u5c31\u662f\u5728\u73b0\u6709\u7684\u57fa\u7840\u4e0a\uff0c\u901a\u8fc7\u6295\u5582\u6570\u636e\u96c6\u6765\u8bad\u7ec3\u81ea\u5df1\u7684\u6a21\u578b\uff0c\u4e5f\u5c31\u662fFine-tuning\uff0c\u5fae\u8c03OpenAI<\/p>\n","protected":false},"author":1,"featured_media":11734,"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":"1","footnotes":""},"categories":[3],"tags":[136,126,127,128,129],"collection":[],"class_list":["post-1765","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fenlei2","tag-136","tag-gpt","tag-ai","tag-128","tag-129"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1765","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=1765"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1765\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media\/11734"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1765"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}