{"id":877,"date":"2026-08-20T23:34:08","date_gmt":"2026-08-20T15:34:08","guid":{"rendered":"https:\/\/blog.itsmygo.uk\/2026\/08\/20\/proxy-server%ef%bc%9a%e5%9c%98%e9%9a%8a%e7%b5%b1%e4%b8%80%e9%96%98%e9%81%93%e8%88%87%e6%88%90%e6%9c%ac%e6%8e%a7%e7%ae%a1\/"},"modified":"2026-08-20T23:34:08","modified_gmt":"2026-08-20T15:34:08","slug":"proxy-server%ef%bc%9a%e5%9c%98%e9%9a%8a%e7%b5%b1%e4%b8%80%e9%96%98%e9%81%93%e8%88%87%e6%88%90%e6%9c%ac%e6%8e%a7%e7%ae%a1","status":"publish","type":"post","link":"https:\/\/blog.itsmygo.uk\/wordpress\/2026\/08\/20\/proxy-server%ef%bc%9a%e5%9c%98%e9%9a%8a%e7%b5%b1%e4%b8%80%e9%96%98%e9%81%93%e8%88%87%e6%88%90%e6%9c%ac%e6%8e%a7%e7%ae%a1\/","title":{"rendered":"Proxy Server\uff1a\u5718\u968a\u7d71\u4e00\u9598\u9053\u8207\u6210\u672c\u63a7\u7ba1"},"content":{"rendered":"\n<div id=\"quiz-893f8c4e\">\n<style>\n#quiz-893f8c4e .question { background: white; border-radius: 8px; padding: 20px; margin: 20px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }#quiz-893f8c4e .question h3 { margin-top: 0; color: #333; }#quiz-893f8c4e .options { list-style: none; padding: 0; }#quiz-893f8c4e .options li { padding: 12px 15px; margin: 8px 0; border: 2px solid #ddd; border-radius: 6px; cursor: pointer; transition: all 0.2s; }#quiz-893f8c4e .options li:hover:not(.disabled) { border-color: #4caf50; background: #f0fff0; }#quiz-893f8c4e .options li.correct { border-color: #4caf50; background: #e8f5e9; }#quiz-893f8c4e .options li.wrong { border-color: #f44336; background: #ffebee; }#quiz-893f8c4e .options li.disabled { cursor: default; opacity: 0.7; }#quiz-893f8c4e .options li.show-answer { border-color: #4caf50; background: #e8f5e9; }#quiz-893f8c4e .feedback { margin-top: 15px; padding: 12px; border-radius: 6px; display: none; }#quiz-893f8c4e .feedback.correct { background: #e8f5e9; color: #2e7d32; display: block; }#quiz-893f8c4e .feedback.wrong { background: #ffebee; color: #c62828; display: block; }#quiz-893f8c4e .score { text-align: center; font-size: 1.5em; padding: 20px; background: white; border-radius: 8px; margin-top: 20px; }#quiz-893f8c4e .code-block { background: #1e1e1e; color: #d4d4d4; padding: 14px; border-radius: 6px; font-family: \"Monaco\", \"Consolas\", \"Courier New\", monospace; font-size: 0.9em; overflow-x: auto; margin: 12px 0; white-space: pre-wrap; }\n<\/style>\n<h1>\u6e2c\u9a57\uff1aProxy Server \u5718\u968a\u7d71\u4e00\u9598\u9053\u8207\u6210\u672c\u63a7\u7ba1<\/h1>\n    <p>\u5171 5 \u984c\uff0c\u9ede\u9078\u7b54\u6848\u5f8c\u6703\u7acb\u5373\u986f\u793a\u7d50\u679c<\/p>\n\n    <div class=\"question\" id=\"q1\">\n      <h3>1. \u76f8\u8f03\u65bc\u524d\u4e09\u7bc7\u7684 LiteLLM SDK\uff0c\u67b6\u8a2d Proxy Server \u6700\u4e3b\u8981\u89e3\u6c7a\u7684\u662f\u4ec0\u9ebc\u554f\u984c\uff1f<\/h3>\n      <ul class=\"options\">\n        <li onclick=\"checkAnswer(1, 'A', 'B')\">A. \u8b93\u55ae\u4e00\u8173\u672c\u547c\u53eb\u6a21\u578b\u7684\u901f\u5ea6\u66f4\u5feb<\/li>\n        <li onclick=\"checkAnswer(1, 'B', 'B')\">B. \u591a\u4eba\uff0f\u591a\u5c08\u6848\u5171\u7528\u4e00\u500b\u4e2d\u592e\u9598\u9053\uff0c\u96c6\u4e2d\u7ba1\u7406 key\u3001\u8a18\u5e33\u8207\u9650\u984d<\/li>\n        <li onclick=\"checkAnswer(1, 'C', 'B')\">C. \u8b93 Python \u7a0b\u5f0f\u4e0d\u9700\u8981 import litellm<\/li>\n        <li onclick=\"checkAnswer(1, 'D', 'B')\">D. \u81ea\u52d5\u5e6b\u6a21\u578b\u7522\u751f\u66f4\u597d\u7684\u56de\u7b54\u54c1\u8cea<\/li>\n      <\/ul>\n      <div class=\"feedback\" id=\"fb1\"><\/div>\n    <\/div>\n\n    <div class=\"question\" id=\"q2\">\n      <h3>2. \u5728 config.yaml \u88e1\u770b\u5230 <code>api_key: os.environ\/OPENAI_API_KEY<\/code>\uff0c\u9019\u4ee3\u8868\u4ec0\u9ebc\uff1f<\/h3>\n      <ul class=\"options\">\n        <li onclick=\"checkAnswer(2, 'A', 'C')\">A. API key \u5c31\u662f\u5b57\u4e32 os.environ\/OPENAI_API_KEY<\/li>\n        <li onclick=\"checkAnswer(2, 'B', 'C')\">B. \u9019\u884c\u8a2d\u5b9a\u7121\u6548\uff0c\u6703\u5c0e\u81f4\u555f\u52d5\u5931\u6557<\/li>\n        <li onclick=\"checkAnswer(2, 'C', 'C')\">C. \u53bb\u8b80\u540d\u70ba OPENAI_API_KEY \u7684\u74b0\u5883\u8b8a\u6578\uff0c\u907f\u514d\u628a key \u5beb\u6b7b\u5728\u6a94\u6848<\/li>\n        <li onclick=\"checkAnswer(2, 'D', 'C')\">D. \u628a key \u4e0a\u50b3\u5230 OpenAI \u7684\u74b0\u5883<\/li>\n      <\/ul>\n      <div class=\"feedback\" id=\"fb2\"><\/div>\n    <\/div>\n\n    <div class=\"question\" id=\"q3\">\n      <h3>3. Client \u7aef\u8981\u63a5\u4e0a proxy\uff0c\u6700\u95dc\u9375\u7684\u6539\u52d5\u662f\u54ea\u4e00\u9805\uff1f<\/h3>\n      <div class=\"code-block\">from openai import OpenAI\nclient = OpenAI(base_url=&#8221;http:\/\/localhost:4000&#8243;, api_key=&#8221;sk-1234&#8243;)<\/div>\n      <ul class=\"options\">\n        <li onclick=\"checkAnswer(3, 'A', 'A')\">A. \u628a base_url \u6307\u5411 proxy \u4f4d\u5740\uff0c\u7528 virtual key \u7576 api_key<\/li>\n        <li onclick=\"checkAnswer(3, 'B', 'A')\">B. \u5fc5\u9808\u6539\u7528 import litellm \u624d\u80fd\u63a5 proxy<\/li>\n        <li onclick=\"checkAnswer(3, 'C', 'A')\">C. api_key \u8981\u586b\u771f\u6b63\u7684 OpenAI key \u624d\u9023\u5f97\u4e0a<\/li>\n        <li onclick=\"checkAnswer(3, 'D', 'A')\">D. model \u8981\u586b\u5be6\u969b\u7684 openai\/gpt-4o \u5b8c\u6574\u8def\u5f91<\/li>\n      <\/ul>\n      <div class=\"feedback\" id=\"fb3\"><\/div>\n    <\/div>\n\n    <div class=\"question\" id=\"q4\">\n      <h3>4. config.yaml \u4e2d\u7684\u4e09\u5927\u9802\u5c64\u5340\u584a\uff0c\u5c0d\u61c9\u95dc\u4fc2\u4f55\u8005\u6b63\u78ba\uff1f<\/h3>\n      <ul class=\"options\">\n        <li onclick=\"checkAnswer(4, 'A', 'D')\">A. model_list \u7ba1\u8a8d\u8b49\u3001general_settings \u7ba1\u83dc\u55ae<\/li>\n        <li onclick=\"checkAnswer(4, 'B', 'D')\">B. litellm_settings \u7ba1\u6709\u54ea\u4e9b\u6a21\u578b\u53ef\u7528<\/li>\n        <li onclick=\"checkAnswer(4, 'C', 'D')\">C. general_settings \u8ca0\u8cac\u91cd\u8a66\u8207\u903e\u6642<\/li>\n        <li onclick=\"checkAnswer(4, 'D', 'D')\">D. model_list \u662f\u83dc\u55ae\u3001litellm_settings \u662f\u547c\u53eb\u884c\u70ba\u3001general_settings \u662f proxy \u7ba1\u7406<\/li>\n      <\/ul>\n      <div class=\"feedback\" id=\"fb4\"><\/div>\n    <\/div>\n\n    <div class=\"question\" id=\"q5\">\n      <h3>5. \u95dc\u65bc virtual key \u642d\u914d max_budget\uff0c\u4e0b\u5217\u6558\u8ff0\u4f55\u8005\u6b63\u78ba\uff1f<\/h3>\n      <ul class=\"options\">\n        <li onclick=\"checkAnswer(5, 'A', 'B')\">A. \u6bcf\u500b\u5718\u968a\u90fd\u5fc5\u9808\u62ff master_key \u624d\u80fd\u547c\u53eb\u6a21\u578b<\/li>\n        <li onclick=\"checkAnswer(5, 'B', 'B')\">B. \u53ef\u70ba\u6bcf\u500b\u5718\u968a\u767c\u5c08\u5c6c key \u4e26\u8a2d\u9810\u7b97\u4e0a\u9650\uff0c\u8d85\u904e\u5c31\u62d2\u7d55\u8acb\u6c42\u4e14\u4e0d\u5f71\u97ff\u4ed6\u4eba<\/li>\n        <li onclick=\"checkAnswer(5, 'C', 'B')\">C. max_budget \u53ea\u80fd\u8a2d\u5b9a\u6574\u53f0 proxy \u7684\u7e3d\u984d\u5ea6<\/li>\n        <li onclick=\"checkAnswer(5, 'D', 'B')\">D. virtual key \u6703\u628a\u771f key \u76f4\u63a5\u4ea4\u7d66 client \u7aef<\/li>\n      <\/ul>\n      <div class=\"feedback\" id=\"fb5\"><\/div>\n    <\/div>\n\n    <div class=\"score\" id=\"score\" style=\"display:none;\"><\/div>\n<script>\n\n      let answered = 0;\n      let correct = 0;\n      const total = 5;\n      const explanations = {\n        1: \"Proxy \u662f\u81ea\u5df1\u67b6\u7684\u4e2d\u592e\u9598\u9053\uff0c\u8b93\u5168\u516c\u53f8\u5171\u7528\u4e00\u500b\u5165\u53e3\uff0c\u771f key \u96c6\u4e2d\u5728 proxy\uff0c\u4e26\u5167\u5efa virtual key\u3001budget \u8a18\u5e33\u8207\u9650\u984d\u3002SDK \u9069\u5408\u55ae\u4eba\u55ae\u8173\u672c\u3002\",\n        2: \"os.environ\/XXX \u662f LiteLLM \u7684\u7279\u6b8a\u8a9e\u6cd5\uff0c\u610f\u601d\u662f\u300c\u8b80\u74b0\u5883\u8b8a\u6578 XXX\u300d\uff0c\u8b93\u771f key \u4e0d\u5fc5\u5beb\u6b7b\u5728 YAML\uff0c\u4e5f\u4e0d\u6703\u88ab commit \u9032 git\u3002\",\n        3: \"\u8d70 proxy \u7684\u91cd\u9ede\u662f\u628a base_url \u63db\u6210 proxy \u4f4d\u5740\uff0capi_key \u586b proxy \u8a8d\u7684 virtual key\uff08\u5982 sk-1234\uff09\u3002\u7528\u7684\u662f\u539f\u5ee0 OpenAI SDK\uff0c\u4e0d\u9700\u8981\u6539\u7528 litellm\uff0c\u771f key \u53ea\u8a72\u7559\u5728 proxy\u3002\",\n        4: \"model_list=\u83dc\u55ae\uff08\u6709\u54ea\u4e9b\u6a21\u578b\uff09\u3001litellm_settings=\u547c\u53eb\u884c\u70ba\uff08\u91cd\u8a66\u3001\u903e\u6642\u3001callback\uff09\u3001general_settings=proxy \u7ba1\u7406\uff08master_key\u3001\u8cc7\u6599\u5eab\uff09\u3002\",\n        5: \"virtual key \u53ef\u5c0d\u6bcf\u500b\u5718\u968a\u7368\u7acb\u767c\u653e\u4e26\u8a2d max_budget\uff0c\u7528\u8d85\u4e86\u90a3\u628a key \u81ea\u5df1\u88ab\u64cb\uff0c\u4e0d\u5f71\u97ff\u5176\u4ed6\u4eba\uff1b\u771f key \u85cf\u5728 proxy\uff0cclient \u53ea\u62ff\u5230 virtual key\u3002\",\n      };\n\n      function checkAnswer(qNum, selected, correctAns) {\n        const question = document.getElementById(\"q\" + qNum);\n        if (question.classList.contains(\"answered\")) return;\n        question.classList.add(\"answered\");\n        answered++;\n        const options = question.querySelectorAll(\".options li\");\n        options.forEach((opt) => {\n          opt.classList.add(\"disabled\");\n          if (opt.textContent.startsWith(correctAns + \".\")) opt.classList.add(\"show-answer\");\n        });\n        const feedback = document.getElementById(\"fb\" + qNum);\n        if (selected === correctAns) {\n          correct++;\n          feedback.className = \"feedback correct\";\n          feedback.innerHTML = \"\u2713 \u6b63\u78ba\uff01\" + explanations[qNum];\n        } else {\n          feedback.className = \"feedback wrong\";\n          feedback.innerHTML = \"\u2717 \u932f\u8aa4\u3002\u6b63\u78ba\u7b54\u6848\u662f \" + correctAns + \"\u3002\" + explanations[qNum];\n          options.forEach((opt) => {\n            if (opt.textContent.startsWith(selected + \".\")) opt.classList.add(\"wrong\");\n          });\n        }\n        if (answered === total) {\n          const scoreDiv = document.getElementById(\"score\");\n          scoreDiv.style.display = \"block\";\n          scoreDiv.innerHTML = \"\u6e2c\u9a57\u5b8c\u6210\uff01\u5f97\u5206\uff1a\" + correct + \" \/ \" + total +\n            (correct === total ? \" \ud83c\udf89 \u5168\u5c0d\uff01\" : correct >= Math.ceil(total * 0.6) ? \" \ud83d\udc4d \u4e0d\u932f\uff01\" : \" \ud83d\udcda \u518d\u8907\u7fd2\u4e00\u4e0b\u5427\");\n        }\n      }\n    \n<\/script>\n<\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u3010LiteLLM \u5b8c\u5168\u5165\u9580\u3011\u7cfb\u5217 #04\uff08\u5171 4 \u7bc7\uff09\uff5c\u96e3\u5ea6\uff1aL2-\u9032\u968e<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u524d\u4e09\u7bc7\u6211\u5011\u90fd\u5728\u8b1b <strong>LiteLLM SDK<\/strong>\uff1a\u5728 Python \u7a0b\u5f0f\u88e1 <code>import litellm<\/code>\uff0c\u7528\u4e00\u884c <code>completion()<\/code> \u6253\u904d\u5404\u5bb6\u6a21\u578b\u3002\u9019\u5c0d\u300c\u4e00\u500b\u4eba\u3001\u4e00\u652f\u7a0b\u5f0f\u300d\u5f88\u5920\u7528\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f46\u7576\u5718\u968a\u8b8a\u5927\uff0c\u60c5\u6cc1\u5c31\u4e0d\u4e00\u6a23\u4e86\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u4e94\u500b\u5de5\u7a0b\u5e2b\u3001\u4e09\u500b\u5c08\u6848\uff0c\u5404\u81ea\u628a API key \u585e\u5728\u81ea\u5df1\u7684 <code>.env<\/code> \u88e1\uff0ckey \u5916\u6d29\u4e86\u90fd\u4e0d\u77e5\u9053\u662f\u8ab0\u3002<\/li>\n\n\n<li>\u8001\u95c6\u554f\u300c\u9019\u500b\u6708 OpenAI \u82b1\u4e86\u591a\u5c11\uff1f\u54ea\u500b\u5718\u968a\u82b1\u6700\u5147\uff1f\u300d\u2014\u2014\u6c92\u4eba\u7b54\u5f97\u51fa\u4f86\u3002<\/li>\n\n\n<li>\u60f3\u5f9e GPT-4o \u63db\u6210 Claude\uff0c\u7d50\u679c\u6bcf\u652f\u7a0b\u5f0f\u90fd\u8981\u6539 code\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u6642\u5019\u5c31\u8f2a\u5230 <strong>LiteLLM Proxy Server<\/strong> \u51fa\u5834\u4e86\u3002\u5b83\u662f\u4e00\u500b<strong>\u4f60\u81ea\u5df1\u67b6\u7684\u4e2d\u592e\u9598\u9053<\/strong>\uff1a\u6240\u6709\u4eba\u4e0d\u518d\u76f4\u63a5\u6253 OpenAI\uff0fAnthropic\uff0c\u800c\u662f\u6253\u4f60\u7684 proxy\uff0cproxy \u518d\u5e6b\u5fd9\u8f49\u767c\u3001\u8a18\u5e33\u3001\u9650\u984d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u7bc7\u7684\u91cd\u9ede\u4e00\u6a23\u4e0d\u662f\u6559\u4f60\u300c\u67b6\u4e00\u500b production \u7b49\u7d1a\u7684 proxy\u300d\uff0c\u800c\u662f\u6559\u4f60<strong>\u770b\u61c2 AI \u5e6b\u4f60\u751f\u7684 <code>config.yaml<\/code> \u5728\u8a2d\u5b9a\u4ec0\u9ebc\u3001\u6bcf\u500b\u5340\u584a\u7ba1\u4ec0\u9ebc\u3001\u9a57\u6536\u6642\u8a72 curl \u54ea\u500b\u7aef\u9ede\u78ba\u8a8d\u5b83\u6d3b\u8457<\/strong>\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u7248\u672c\u63d0\u9192\uff1aLiteLLM Proxy \u7528 <code>litellm[proxy]<\/code> \u9019\u500b extra \u5b89\u88dd\uff0c\u6307\u4ee4\u662f <code>litellm --config config.yaml<\/code>\u3002\u672c\u6587\u7bc4\u4f8b\u4ee5\u6b64\u70ba\u6e96\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u53e5\u8a71\u8aaa\u660e<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>SDK\uff08\u524d\u4e09\u7bc7\uff09<\/th>\n<th>Proxy Server\uff08\u672c\u7bc7\uff09<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u9577\u4ec0\u9ebc\u6a23<\/strong><\/td>\n<td>Python \u51fd\u5f0f\u5eab\uff0c<code>import litellm<\/code><\/td>\n<td>\u4e00\u500b\u4e00\u76f4\u8dd1\u8457\u7684\u4f3a\u670d\u5668\uff08\u6709\u7db2\u5740\uff09<\/td>\n<\/tr>\n<tr>\n<td><strong>\u8ab0\u7528<\/strong><\/td>\n<td>\u5beb\u9019\u652f\u7a0b\u5f0f\u7684\u4f60<\/td>\n<td>\u5168\u516c\u53f8\u4efb\u4f55\u8a9e\u8a00\u3001\u4efb\u4f55\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td><strong>key \u653e\u54ea<\/strong><\/td>\n<td>\u6bcf\u652f\u7a0b\u5f0f\u5404\u81ea\u653e<\/td>\n<td><strong>\u96c6\u4e2d\u5728 proxy \u4e00\u8655<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>\u8a18\u5e33\uff0f\u9650\u984d<\/strong><\/td>\n<td>\u81ea\u5df1\u60f3\u8fa6\u6cd5<\/td>\n<td>\u5167\u5efa virtual key + budget<\/td>\n<\/tr>\n<tr>\n<td><strong>\u50cf\u4ec0\u9ebc<\/strong><\/td>\n<td>\u5bb6\u88e1\u81ea\u5df1\u63a5\u6c34\u7ba1<\/td>\n<td>\u793e\u5340\u7684<strong>\u7e3d\u6c34\u8868 + \u5206\u8868<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u53e5\u8a71\uff1a<strong>SDK \u662f\u300c\u6211\u9019\u652f\u7a0b\u5f0f\u8981\u6253\u6a21\u578b\u300d\uff0cProxy \u662f\u300c\u5168\u516c\u53f8\u6253\u6a21\u578b\u90fd\u8d70\u6211\u9019\u500b\u9598\u9053\u300d\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u770b code \u6642\u5fc3\u88e1\u4e00\u76f4\u554f\uff1a<strong>\u9019\u662f\u5728\u6559\u6211\u600e\u9ebc\u300c\u6253\u300dproxy\uff08client \u7aef\uff09\uff0c\u9084\u662f\u600e\u9ebc\u300c\u8a2d\u5b9a\u300dproxy\uff08server \u7aef\uff09\uff1f<\/strong> \u9019\u5169\u4ef6\u4e8b\u7684\u6a94\u6848\u9577\u5f97\u5b8c\u5168\u4e0d\u4e00\u6a23\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ec0\u9ebc\u6642\u5019\u8a72\u67b6 Proxy\uff1f\uff08\u5148\u5224\u65b7\u8a72\u4e0d\u8a72\u7528\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0d\u662f\u6bcf\u500b\u60c5\u6cc1\u90fd\u9700\u8981 proxy\u3002\u5148\u770b\u7d05\u7da0\u71c8\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 <strong>\u8a72\u67b6 proxy<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u591a\u4eba\uff0f\u591a\u5c08\u6848\u8981\u5171\u7528\u540c\u4e00\u6279 API key\uff0c\u4e0d\u60f3\u6bcf\u53f0\u6a5f\u5668\u90fd\u8cbc key\u3002<\/li>\n\n\n<li>\u8981\u80fd\u56de\u7b54\u300c\u8ab0\u82b1\u4e86\u591a\u5c11\u9322\u300d\u3001\u60f3\u8a2d\u6bcf\u6708\u9810\u7b97\u4e0a\u9650\u3002<\/li>\n\n\n<li>\u60f3\u7d71\u4e00\u5207\u63db\u6a21\u578b\u4f9b\u61c9\u5546\uff0cclient \u7aef code \u4e0d\u52d5\u3002<\/li>\n\n\n<li>\u5718\u968a\u88e1\u6709\u975e Python \u7684\u670d\u52d9\uff08Node\u3001Go\u3001n8n\u2026\uff09\u4e5f\u8981\u6253\u6a21\u578b\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc <strong>\u5148\u5225\u6025\u8457\u67b6 proxy<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u5c31\u4f60\u4e00\u500b\u4eba\u3001\u4e00\u652f\u8173\u672c \u2192 \u76f4\u63a5\u7528 SDK \u5c31\u597d\uff0cproxy \u662f\u591a\u9918\u7684\u7dad\u904b\u8ca0\u64d4\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u770b\u5230 AI \u4e00\u4e0a\u4f86\u5c31\u5e6b\u4f60\u67b6 proxy\uff0c\u4f46\u4f60\u5176\u5be6\u53ea\u662f\u8981\u8dd1\u500b\u4e00\u6b21\u6027\u8173\u672c\u2014\u2014\u9019\u6642\u5019\u8981\u80fd\u558a\u505c\uff1a\u300c\u6211\u53ea\u6709\u4e00\u652f\u7a0b\u5f0f\uff0c\u7528 SDK \u5c31\u597d\uff0c\u4e0d\u7528\u67b6 server \u5427\uff1f\u300d<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u6700\u5c0f\u7bc4\u4f8b\uff1a\u4e00\u500b config.yaml + \u4e00\u884c\u555f\u52d5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Proxy \u7684\u6838\u5fc3\u5c31\u662f<strong>\u4e00\u500b YAML \u8a2d\u5b9a\u6a94<\/strong>\u3002\u6700\u5c0f\u9577\u9019\u6a23\uff1a<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># config.yaml<\/span>\nmodel_list:\n  - model_name: gpt<span class=\"hljs-number\">-4<\/span>o                      <span class=\"hljs-comment\"># \u5c0d\u5916\u516c\u958b\u7684\u300c\u83dc\u55ae\u540d\u7a31\u300d<\/span>\n    litellm_params:\n      model: openai\/gpt<span class=\"hljs-number\">-4<\/span>o                   <span class=\"hljs-comment\"># \u5be6\u969b\u8981\u8f49\u767c\u5230\u54ea\u500b\u6a21\u578b<\/span>\n      api_key: os.environ\/OPENAI_API_KEY     <span class=\"hljs-comment\"># key \u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\uff0c\u4e0d\u5beb\u6b7b\u5728\u6a94\u6848\u88e1<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9010\u884c\u7ffb\u8b6f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>model_list<\/code>\uff1a\u9019\u53f0 proxy <strong>\u5c0d\u5916\u63d0\u4f9b\u54ea\u4e9b\u6a21\u578b<\/strong>\u7684\u6e05\u55ae\uff0c\u5c31\u662f\u5b83\u7684\u300c\u83dc\u55ae\u300d\u3002<\/li>\n\n\n<li><code>model_name: gpt-4o<\/code>\uff1aclient \u8981\u9ede\u9910\u6642\u7528\u7684\u540d\u5b57\u3002\u9019\u662f<strong>\u4f60\u81ea\u5df1\u53d6\u7684\u5225\u540d<\/strong>\uff0c\u53ef\u4ee5\u53eb <code>my-smart-model<\/code> \u90fd\u884c\u3002<\/li>\n\n\n<li><code>model: openai\/gpt-4o<\/code>\uff1a\u9019\u9053\u83dc\u5be6\u969b\u4e0a\u662f\u4ec0\u9ebc\u2014\u2014\u8f49\u767c\u5230 OpenAI \u7684 gpt-4o\u3002\u683c\u5f0f\u5c31\u662f\u524d\u5e7e\u7bc7\u7684 <code>\u4f9b\u61c9\u5546\/\u6a21\u578b\u540d<\/code>\u3002<\/li>\n\n\n<li><code>api_key: os.environ\/OPENAI_API_KEY<\/code>\uff1a<strong>\u91cd\u9ede<\/strong>\u2014\u2014<code>os.environ\/XXX<\/code> \u662f LiteLLM \u7684\u7279\u6b8a\u8a9e\u6cd5\uff0c\u610f\u601d\u662f\u300c\u53bb\u8b80\u540d\u70ba <code>XXX<\/code> \u7684\u74b0\u5883\u8b8a\u6578\u300d\uff0c\u800c\u4e0d\u662f\u628a\u5b57\u4e32 <code>os.environ\/OPENAI_API_KEY<\/code> \u7576\u6210 key\u3002\u9019\u6a23 key \u5c31\u4e0d\u6703\u88ab\u5beb\u6b7b\u5728 YAML \u88e1\uff08\u66f4\u4e0d\u6703\u88ab commit \u9032 git\uff09\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u555f\u52d5\u53ea\u8981\u4e00\u884c\uff1a<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">litellm --config config.yaml\n<span class=\"hljs-comment\"># \u9810\u8a2d\u8dd1\u5728 http:\/\/0.0.0.0:4000<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u300c\u9019\u5728\u5e79\u561b\u300d\uff1a\u8b80 <code>config.yaml<\/code>\uff0c\u628a\u88e1\u9762\u90a3\u5f35\u83dc\u55ae\u67b6\u6210\u4e00\u500b OpenAI \u76f8\u5bb9\u7684 API server\uff0c\u958b\u5728 4000 \u57e0\u7b49\u4eba\u4f86\u9ede\u9910\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Client \u600e\u9ebc\u63a5\uff1a\u628a base_url \u6307\u5411 proxy \u5c31\u597d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u662f proxy \u6700\u723d\u7684\u5730\u65b9\uff1a<strong>client \u7aef\u4e0d\u7528\u88dd LiteLLM\uff0c\u76f4\u63a5\u7528 OpenAI \u5b98\u65b9 SDK<\/strong>\uff0c\u53ea\u8981\u628a\u300c\u7db2\u5740\u300d\u6539\u6389\u3002<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from openai import OpenAI                       <span class=\"hljs-comment\"># \u6ce8\u610f\uff1a\u9019\u662f OpenAI \u5b98\u65b9\u5957\u4ef6\uff0c\u4e0d\u662f litellm<\/span>\n\nclient = OpenAI(\n    base_url=<span class=\"hljs-string\">\"http:\/\/localhost:4000\"<\/span>,           <span class=\"hljs-comment\"># \u6307\u5411\u4f60\u7684 proxy\uff0c\u800c\u4e0d\u662f openai.com<\/span>\n    api_key=<span class=\"hljs-string\">\"sk-1234\"<\/span>,                           <span class=\"hljs-comment\"># \u9019\u662f\u300cproxy \u7684 key\u300d\uff0c\u4e0d\u662f OpenAI \u7684 key<\/span>\n)\n\nresp = client.chat.completions.create(\n    model=<span class=\"hljs-string\">\"gpt-4o\"<\/span>,                              <span class=\"hljs-comment\"># \u9019\u88e1\u586b config.yaml \u88e1\u7684 model_name\uff08\u83dc\u55ae\u540d\uff09<\/span>\n    messages=&#91;{<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"user\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: <span class=\"hljs-string\">\"\u4f60\u597d\"<\/span>}],\n)\n<span class=\"hljs-keyword\">print<\/span>(resp.choices&#91;<span class=\"hljs-number\">0<\/span>].message.content)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9010\u884c\u7ffb\u8b6f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>from openai import OpenAI<\/code>\uff1a\u7528\u7684\u662f<strong>\u539f\u5ee0 OpenAI SDK<\/strong>\u3002\u56e0\u70ba proxy \u8b1b\u7684\u662f\u300cOpenAI \u76f8\u5bb9\u300d\u7684\u8a9e\u8a00\uff0c\u6240\u4ee5\u4efb\u4f55\u539f\u672c\u6703\u6253 OpenAI \u7684\u5de5\u5177\u90fd\u80fd\u7121\u75db\u63a5\u4e0a\u3002<\/li>\n\n\n<li><code>base_url=\"http:\/\/localhost:4000\"<\/code>\uff1a<strong>\u95dc\u9375\u6539\u52d5<\/strong>\u2014\u2014\u628a\u76ee\u7684\u5730\u5f9e openai.com \u63db\u6210\u4f60\u7684 proxy\u3002<\/li>\n\n\n<li><code>api_key=\"sk-1234\"<\/code>\uff1a\u9019\u628a key <strong>\u4e0d\u662f<\/strong> OpenAI \u7d66\u7684\uff0c\u800c\u662f<strong>\u4f60\u7684 proxy \u8a8d\u7684 key<\/strong>\uff08virtual key\uff0c\u7b49\u4e0b\u6703\u8b1b\uff09\u3002\u771f\u6b63\u7684 OpenAI key \u85cf\u5728 proxy \u90a3\u908a\uff0cclient \u5b8c\u5168\u78b0\u4e0d\u5230\u3002<\/li>\n\n\n<li><code>model=\"gpt-4o\"<\/code>\uff1a\u586b\u7684\u662f <code>config.yaml<\/code> \u88e1 <code>model_name<\/code> \u90a3\u500b\u5225\u540d\u3002proxy \u6536\u5230\u5f8c\u6703\u67e5\u83dc\u55ae\uff0c\u8f49\u767c\u5230\u5c0d\u61c9\u7684\u771f\u5be6\u6a21\u578b\u3002<\/li>\n\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u300c\u9019\u5728\u5e79\u561b\u300d\uff1aclient \u4ee5\u70ba\u81ea\u5df1\u5728\u6253 OpenAI\uff0c\u5176\u5be6\u6253\u7684\u662f\u4f60\u5bb6 proxy\uff1bproxy \u62ff\u771f key \u53bb\u8f49\u767c\uff0c\u56de\u4f86\u7684\u683c\u5f0f\u4e00\u6a21\u4e00\u6a23\uff0cclient \u6beb\u7121\u611f\u89ba\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vibe Coder \u6293\u91cd\u9ede<\/strong>\uff1a\u770b\u5230 client code \u88e1 <code>base_url<\/code> \u6307\u5411\u4e00\u500b <code>:4000<\/code> \u4e4b\u985e\u7684\u5167\u7db2\u4f4d\u5740\u3001<code>api_key<\/code> \u9577\u5f97\u50cf <code>sk-1234<\/code> \u9019\u7a2e\u5047 key\u2014\u2014\u9019\u5c31\u662f\u300c\u9019\u652f\u7a0b\u5f0f\u5728\u8d70 proxy\u300d\u7684\u8a0a\u865f\uff0c\u4e0d\u662f\u76f4\u9023 OpenAI\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">config.yaml \u7684\u4e09\u5927\u5340\u584a\uff1a\u5404\u7ba1\u4ec0\u9ebc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">AI \u751f\u51fa\u4f86\u7684 config \u901a\u5e38\u6709\u4e09\u500b\u9802\u5c64\u5340\u584a\u3002\u770b\u61c2\u9019\u4e09\u500b\uff0c\u516b\u6210\u5c31\u6293\u5230\u4e86\uff1a<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># 1. \u83dc\u55ae\uff1a\u5c0d\u5916\u63d0\u4f9b\u54ea\u4e9b\u6a21\u578b<\/span>\nmodel_list:\n  - model_name: gpt<span class=\"hljs-number\">-4<\/span>o\n    litellm_params:\n      model: openai\/gpt<span class=\"hljs-number\">-4<\/span>o\n      api_key: os.environ\/OPENAI_API_KEY\n  - model_name: claude                       <span class=\"hljs-comment\"># \u53ef\u4ee5\u639b\u591a\u500b\uff0c\u7d71\u4e00\u5f9e\u9019\u53f0 proxy \u51fa\u53bb<\/span>\n    litellm_params:\n      model: anthropic\/claude-sonnet<span class=\"hljs-number\">-4<\/span><span class=\"hljs-number\">-20250514<\/span>\n      api_key: os.environ\/ANTHROPIC_API_KEY\n\n<span class=\"hljs-comment\"># 2. LiteLLM \u884c\u70ba\u8a2d\u5b9a\uff1a\u91cd\u8a66\u3001\u903e\u6642\u3001\u8a18\u9304\u2026<\/span>\nlitellm_settings:\n  drop_params: <span class=\"hljs-keyword\">true<\/span>                          <span class=\"hljs-comment\"># \u67d0\u6a21\u578b\u4e0d\u652f\u63f4\u7684\u53c3\u6578\u81ea\u52d5\u4e1f\u6389\uff0c\u4e0d\u5831\u932f<\/span>\n  num_retries: <span class=\"hljs-number\">3<\/span>                             <span class=\"hljs-comment\"># \u5931\u6557\u81ea\u52d5\u91cd\u8a66 3 \u6b21<\/span>\n\n<span class=\"hljs-comment\"># 3. proxy \u672c\u8eab\u7684\u7ba1\u7406\u8a2d\u5b9a\uff1a\u8a8d\u8b49\u3001\u8cc7\u6599\u5eab\u2026<\/span>\ngeneral_settings:\n  master_key: os.environ\/LITELLM_MASTER_KEY  <span class=\"hljs-comment\"># \u7ba1\u7406\u54e1\u91d1\u9470\uff0c\u7528\u4f86\u5efa virtual key<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4e09\u5340\u584a\u5404\u7ba1\u4ec0\u9ebc\uff0c\u7528\u4e00\u53e5\u8a71\u8a18\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>\u5340\u584a<\/th>\n<th>\u7ba1\u4ec0\u9ebc<\/th>\n<th>\u767d\u8a71<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>model_list<\/code><\/td>\n<td>\u6709\u54ea\u4e9b\u6a21\u578b\u53ef\u7528<\/td>\n<td>\u300c<strong>\u83dc\u55ae<\/strong>\u300d<\/td>\n<\/tr>\n<tr>\n<td><code>litellm_settings<\/code><\/td>\n<td>\u547c\u53eb\u6a21\u578b\u6642\u7684\u884c\u70ba<\/td>\n<td>\u300c<strong>\u9ede\u9910\u6d41\u7a0b\u898f\u5247<\/strong>\u300d\uff08\u91cd\u8a66\u5e7e\u6b21\u3001\u903e\u6642\u591a\u4e45\uff09<\/td>\n<\/tr>\n<tr>\n<td><code>general_settings<\/code><\/td>\n<td>proxy \u7684\u9580\u7981\u8207\u5f8c\u53f0<\/td>\n<td>\u300c<strong>\u9910\u5ef3\u7ba1\u7406<\/strong>\u300d\uff08\u8ab0\u80fd\u9032\u3001\u8cc7\u6599\u5b58\u54ea\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc <strong>\u77e5\u9053\u5c31\u597d<\/strong>\uff1a<code>litellm_settings<\/code> \u5e95\u4e0b\u9078\u9805\u975e\u5e38\u591a\uff08\u5feb\u53d6\u3001fallback\u3001callback\u2026\uff09\uff0c\u4e0d\u7528\u80cc\u3002\u770b\u5230\u4e0d\u8a8d\u5f97\u7684 key\uff0c\u76f4\u63a5\u554f AI\u300c\u9019\u500b config \u9078\u9805\u5728\u5e79\u561b\u300d\u5373\u53ef\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Virtual Key \u8207 Budget\uff1a\u9019\u624d\u662f\u5718\u968a\u63a7\u7ba1\u7684\u6838\u5fc3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u524d\u9762 client \u7528\u7684\u90a3\u628a <code>sk-1234<\/code>\uff0c\u5c31\u662f <strong>virtual key\uff08\u865b\u64ec\u91d1\u9470\uff09<\/strong>\u3002\u9019\u662f proxy \u6700\u6709\u50f9\u503c\u7684\u529f\u80fd\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4f60\u53ef\u4ee5\u5e6b\u6bcf\u500b\u5718\u968a\uff0f\u6bcf\u500b\u4eba\u767c\u4e00\u628a\u81ea\u5df1\u7684 key\uff0c\u5404\u81ea\u8a2d\u9810\u7b97\u4e0a\u9650\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u767c key \u662f\u6253 proxy \u7684\u7ba1\u7406 API\uff08\u8981\u7528 <code>master_key<\/code> \u7576\u8a8d\u8b49\uff09\uff1a<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">curl http:<span class=\"hljs-comment\">\/\/localhost:4000\/key\/generate \\<\/span>\n  -H <span class=\"hljs-string\">\"Authorization: Bearer sk-master-1234\"<\/span> \\   <span class=\"hljs-comment\"># \u9019\u88e1\u7528\u7684\u662f master_key\uff08\u7ba1\u7406\u54e1\uff09<\/span>\n  -H <span class=\"hljs-string\">\"Content-Type: application\/json\"<\/span> \\\n  -d <span class=\"hljs-string\">'{\n    \"models\": &#91;\"gpt-4o\"],                        # \u9019\u628a key \u53ea\u80fd\u7528 gpt-4o\n    \"max_budget\": 100,                           # \u9019\u628a key \u82b1\u5230 100 \u7f8e\u5143\u5c31\u505c\n    \"budget_duration\": \"30d\"                     # \u6bcf 30 \u5929\u91cd\u7f6e\u4e00\u6b21\u984d\u5ea6\n  }'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9010\u884c\u7ffb\u8b6f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>Authorization: Bearer sk-master-1234<\/code>\uff1a\u767c key \u662f\u7ba1\u7406\u54e1\u64cd\u4f5c\uff0c\u6240\u4ee5\u8981\u5e36 <code>master_key<\/code>\uff0c\u4e0d\u662f\u96a8\u4fbf\u4e00\u628a key \u90fd\u80fd\u767c\u3002<\/li>\n\n\n<li><code>\"models\": [\"gpt-4o\"]<\/code>\uff1a<strong>\u6b0a\u9650\u63a7\u5236<\/strong>\u2014\u2014\u9019\u628a key \u53ea\u80fd\u9ede <code>gpt-4o<\/code>\uff0c\u60f3\u9ede <code>claude<\/code> \u6703\u88ab\u64cb\u3002<\/li>\n\n\n<li><code>\"max_budget\": 100<\/code>\uff1a<strong>\u6210\u672c\u5929\u82b1\u677f<\/strong>\u2014\u2014\u9019\u628a key \u7d2f\u7a4d\u82b1\u8cbb\u8d85\u904e 100 \u7f8e\u5143\uff0cproxy \u5c31\u76f4\u63a5\u62d2\u7d55\u8acb\u6c42\u3002<\/li>\n\n\n<li><code>\"budget_duration\": \"30d\"<\/code>\uff1a\u984d\u5ea6\u591a\u4e45\u91cd\u7f6e\u4e00\u6b21\u3002\u9019\u88e1\u662f\u6bcf 30 \u5929\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u56de\u50b3\u6703\u7d66\u4f60\u4e00\u628a\u65b0 key\uff0c\u4f8b\u5982 <code>sk-abc123...<\/code>\uff0c\u628a\u5b83\u4ea4\u7d66\u90a3\u500b\u5718\u968a\uff0c\u4ed6\u5011\u585e\u9032\u81ea\u5df1\u7684 <code>base_url<\/code> client \u5c31\u80fd\u7528\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u300c\u9019\u5728\u5e79\u561b\u300d\uff1a\u50cf\u793e\u5340\u7684\u5206\u8868\u2014\u2014\u7e3d\u8868\uff08master key\uff09\u63e1\u5728\u4f60\u624b\u4e0a\uff0c\u4f60\u5e6b\u6bcf\u6236\uff08\u6bcf\u500b\u5718\u968a\uff09\u88dd\u4e00\u500b\u6709\u4e0a\u9650\u7684\u5206\u8868\uff08virtual key\uff09\uff0c\u7528\u8d85\u4e86\u90a3\u6236\u81ea\u5df1\u65b7\u6c34\uff0c\u4e0d\u5f71\u97ff\u5225\u4eba\uff0c\u4f60\u4e5f\u770b\u5f97\u5230\u6bcf\u6236\u7528\u591a\u5c11\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u9019\u89e3\u6c7a\u4e86\u958b\u982d\u4e09\u500b\u75db\u9ede<\/strong>\uff1akey \u96c6\u4e2d\u7ba1\u7406\uff08\u771f key \u53ea\u5728 proxy\uff09\u3001\u80fd\u56de\u7b54\u8ab0\u82b1\u591a\u5c11\uff08\u6bcf\u628a virtual key \u7368\u7acb\u8a18\u5e33\uff09\u3001\u6709\u9810\u7b97\u4e0a\u9650\uff08<code>max_budget<\/code>\uff09\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u88dc\u5145\uff1a\u8981\u8a18\u5e33\u548c\u5b58 virtual key\uff0cproxy \u901a\u5e38\u9700\u8981\u63a5\u4e00\u500b Postgres \u8cc7\u6599\u5eab\uff08\u5728 <code>general_settings<\/code> \u8a2d <code>database_url<\/code>\uff09\u3002\u770b\u5230 config \u88e1\u6709 <code>database_url<\/code> \u5225\u7dca\u5f35\uff0c\u90a3\u5c31\u662f\u62ff\u4f86\u5b58\u82b1\u8cbb\u7d00\u9304\u548c key \u7684\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u8a18\u9304\u8207\u89c0\u6e2c\uff1a\u9322\u82b1\u53bb\u54ea\u3001\u8ab0\u5728\u6253<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5149\u6709\u9810\u7b97\u4e0a\u9650\u9084\u4e0d\u5920\uff0c\u4f60\u6703\u60f3\u77e5\u9053<strong>\u6bcf\u4e00\u6b21\u547c\u53eb\u7684\u7d30\u7bc0<\/strong>\uff08\u8ab0\u3001\u6253\u4e86\u4ec0\u9ebc\u3001\u82b1\u591a\u5c11\uff09\u3002LiteLLM \u7528 <strong>callbacks<\/strong> \u628a\u9019\u4e9b\u4e8b\u4ef6\u9001\u5230\u5916\u90e8\u7cfb\u7d71\uff1a<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">litellm_settings<\/span>:\n  <span class=\"hljs-selector-tag\">success_callback<\/span>: <span class=\"hljs-selector-attr\">&#91;<span class=\"hljs-string\">\"langfuse\"<\/span>]<\/span>     # \u6210\u529f\u7684\u547c\u53eb\uff0c\u628a\u7d00\u9304\u9001\u53bb <span class=\"hljs-selector-tag\">Langfuse<\/span>\n  <span class=\"hljs-selector-tag\">failure_callback<\/span>: <span class=\"hljs-selector-attr\">&#91;<span class=\"hljs-string\">\"langfuse\"<\/span>]<\/span>     # \u5931\u6557\u7684\u547c\u53eb\u4e5f\u9001\uff0c\u65b9\u4fbf\u6392\u67e5\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9010\u884c\u7ffb\u8b6f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>success_callback<\/code>\uff1a\u547c\u53eb<strong>\u6210\u529f<\/strong>\u6642\uff0c\u8981\u628a\u9019\u7b46\u7d00\u9304\uff08\u7528\u4e86\u54ea\u500b\u6a21\u578b\u3001\u5e7e\u500b token\u3001\u82b1\u591a\u5c11\uff09\u9001\u5230\u54ea\u4e9b\u89c0\u6e2c\u5e73\u53f0\u3002\u9019\u88e1\u662f Langfuse\u3002<\/li>\n\n\n<li><code>failure_callback<\/code>\uff1a\u547c\u53eb<strong>\u5931\u6557<\/strong>\u6642\u5f80\u54ea\u9001\uff0c\u65b9\u4fbf\u4f60\u4e8b\u5f8c\u67e5\u70ba\u4ec0\u9ebc\u639b\u6389\u3002<\/li>\n\n\n<li>\u503c\u662f\u4e00\u500b<strong>\u6e05\u55ae<\/strong>\uff0c\u4ee3\u8868\u53ef\u4ee5\u540c\u6642\u9001\u53bb\u597d\u5e7e\u500b\u5730\u65b9\uff08\u4f8b\u5982\u540c\u6642\u9001 Langfuse \u548c\u81ea\u5efa\u7684 log \u7cfb\u7d71\uff09\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udccc <strong>\u77e5\u9053\u5c31\u597d<\/strong>\uff1a\u652f\u63f4\u7684 callback \u76ee\u6a19\u5f88\u591a\uff08Langfuse\u3001Datadog\u3001Prometheus\u3001S3\u2026\uff09\uff0c\u540d\u5b57\u8a8d\u5f97\u5c31\u597d\u3002\u91cd\u9ede\u662f\u7406\u89e3\u300ccallback = \u547c\u53eb\u767c\u751f\u5f8c\uff0c\u628a\u9019\u4ef6\u4e8b\u901a\u77e5\u51fa\u53bb\u300d\u9019\u500b\u6982\u5ff5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u967d\u6625\u7684\u505a\u6cd5\u662f\u76f4\u63a5\u8b93 proxy \u628a\u6bcf\u7b46\u547c\u53eb\u5370\u5728\u7d42\u7aef\u6a5f\uff08\u9069\u5408\u958b\u767c\u6642\u770b\uff09\uff0c\u9019\u5728\u555f\u52d5\u6642\u52a0 <code>--detailed_debug<\/code> \u5c31\u6709\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udea9 \u7d05\u65d7\uff1a\u770b\u5230\u9019\u4e9b\u8981\u8b66\u89ba<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d05\u65d7 1\uff1a\u771f API key \u88ab\u5beb\u6b7b\u5728 config.yaml \u88e1<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">litellm_params:\n  model: openai\/gpt<span class=\"hljs-number\">-4<\/span>o\n  api_key: sk-proj-REALKEY1234567890    <span class=\"hljs-comment\"># \ud83d\udea9 \u771f key \u76f4\u63a5\u5beb\u6b7b\uff0c\u6703\u88ab commit \u9032 git \u5916\u6d29<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u6b63\u78ba\u61c9\u8a72\u662f <code>api_key: os.environ\/OPENAI_API_KEY<\/code>\u3002\u770b\u5230\u4e00\u9577\u4e32\u771f\u7684 key \u660e\u78bc\u5beb\u5728\u6a94\u6848\u88e1\uff0c\u5c24\u5176\u9019\u6a94\u6848\u8981\u9032\u7248\u63a7\u2014\u2014\u76f4\u63a5\u558a\u5361\u3002\u8ddf AI \u8aaa\uff1a\u300c\u628a api_key \u6539\u6210\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\uff0c\u4e0d\u8981\u5beb\u6b7b\u3002\u300d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d05\u65d7 2\uff1aproxy \u76f4\u63a5\u5c0d\u5916\u958b\u653e\u53c8\u6c92\u8a2d master_key \/ key \u8a8d\u8b49<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">litellm<\/span> <span class=\"hljs-selector-tag\">--config<\/span> <span class=\"hljs-selector-tag\">config<\/span><span class=\"hljs-selector-class\">.yaml<\/span> <span class=\"hljs-selector-tag\">--host<\/span> 0<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>   # \ud83d\udea9 \u5c0d\u5168\u4e16\u754c\u958b\u653e\uff0c\u4f46\u6c92\u4efb\u4f55\u8a8d\u8b49\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><code>0.0.0.0<\/code> \u4ee3\u8868\u4efb\u4f55\u4eba\u90fd\u9023\u5f97\u5230\u3002\u5982\u679c\u6c92\u8a2d <code>master_key<\/code>\u3001\u4e5f\u6c92\u8981\u6c42 virtual key\uff0c\u7b49\u65bc<strong>\u958b\u653e\u5168\u4e16\u754c\u514d\u8cbb\u7528\u4f60\u7684\u4ed8\u8cbb API \u5e33\u55ae<\/strong>\u3002\u554f AI\uff1a\u300c\u9019\u500b proxy \u6709\u6c92\u6709\u505a\u8a8d\u8b49\uff1f\u6703\u4e0d\u6703\u88ab\u4eba\u767d\u5ad6\u6211\u7684 API \u984d\u5ea6\uff1f\u300d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d05\u65d7 3\uff1aclient \u7aef\u9084\u7559\u8457\u771f key<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">client = OpenAI(\n    base_url=<span class=\"hljs-string\">\"http:\/\/localhost:4000\"<\/span>,\n    api_key=<span class=\"hljs-string\">\"sk-proj-REALOPENAIKEY...\"<\/span>,   <span class=\"hljs-comment\"># \ud83d\udea9 \u8d70\u4e86 proxy \u537b\u9084\u585e\u771f OpenAI key<\/span>\n)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8d70 proxy \u7684\u610f\u7fa9\u5c31\u662f<strong>\u8b93 client \u62ff\u4e0d\u5230\u771f key<\/strong>\u3002client \u9019\u88e1\u61c9\u8a72\u653e virtual key\uff08<code>sk-1234<\/code> \u90a3\u7a2e\uff09\uff0c\u771f key \u53ea\u8a72\u5b58\u5728 proxy\u3002\u770b\u5230 client \u9084\u62b1\u8457\u771f key\uff0c\u7b49\u65bc\u767d\u67b6\u4e86 proxy\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d05\u65d7 4\uff1a\u6c92\u8a2d max_budget \u5c31\u767c key \u7d66\u5916\u90e8\u5718\u968a<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6c92\u6709\u9810\u7b97\u4e0a\u9650\u7684 key\uff0c\u4e00\u65e6\u88ab\u6feb\u7528\u6216\u7a0b\u5f0f\u8dd1\u7206\u8ff4\u5708\uff0c\u5e33\u55ae\u6703\u76f4\u63a5\u5674\u4e0a\u5929\u3002\u767c key \u7d66\u4eba\u524d\uff0c\u78ba\u8a8d\u6709 <code>max_budget<\/code>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Vibe Coder \u9a57\u6536\u6aa2\u67e5\u9ede<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u67b6\u597d proxy \u5f8c\uff0c\u7528\u9019\u5e7e\u500b<strong>\u505a\u5f97\u5230\u7684\u52d5\u4f5c<\/strong>\u78ba\u8a8d\u5b83\u771f\u7684\u6d3b\u8457\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u78ba\u8a8d proxy \u6709\u8d77\u4f86\uff08\u5065\u5eb7\u6aa2\u67e5\uff09<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">curl http:<span class=\"hljs-comment\">\/\/localhost:4000\/health\/liveliness<\/span>\n<span class=\"hljs-comment\"># \u9810\u671f\uff1a\u56de \"I'm alive!\" \u4e4b\u985e\u7684\u5b58\u6d3b\u8a0a\u606f<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u78ba\u8a8d\u83dc\u55ae\u8f09\u5c0d\u4e86\uff08\u5217\u51fa\u6a21\u578b\u6e05\u55ae\uff09<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">curl http:<span class=\"hljs-comment\">\/\/localhost:4000\/v1\/models \\<\/span>\n  -H <span class=\"hljs-string\">\"Authorization: Bearer sk-1234\"<\/span>\n<span class=\"hljs-comment\"># \u9810\u671f\uff1a\u56de\u4e00\u4efd JSON\uff0c\u88e1\u9762 data \u9663\u5217\u6709\u4f60\u5728 config.yaml \u8a2d\u7684 model_name\uff08\u4f8b\u5982 gpt-4o\u3001claude\uff09<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u9019\u88e1\u5c11\u4e86\u4f60\u4ee5\u70ba\u6709\u8a2d\u7684\u6a21\u578b\uff0c\u4ee3\u8868 <code>config.yaml<\/code> \u7684 <code>model_list<\/code> \u6c92\u8f09\u5230\u2014\u2014\u5148\u6aa2\u67e5 YAML \u7e2e\u6392\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. \u5be6\u969b\u6253\u4e00\u767c\uff0c\u78ba\u8a8d\u8f49\u767c\u6210\u529f<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">curl http:<span class=\"hljs-comment\">\/\/localhost:4000\/v1\/chat\/completions \\<\/span>\n  -H <span class=\"hljs-string\">\"Authorization: Bearer sk-1234\"<\/span> \\\n  -H <span class=\"hljs-string\">\"Content-Type: application\/json\"<\/span> \\\n  -d <span class=\"hljs-string\">'{\"model\": \"gpt-4o\", \"messages\": &#91;{\"role\": \"user\", \"content\": \"\u8aaa\u4e00\u53e5\u8a71\"}]}'<\/span>\n<span class=\"hljs-comment\"># \u9810\u671f\uff1a\u56de\u4e00\u6bb5\u6b63\u5e38\u7684\u6a21\u578b\u56de\u8986 JSON\u3002\u82e5\u56de 401 \u2192 key \u4e0d\u5c0d\uff1b\u56de 400 \u627e\u4e0d\u5230\u6a21\u578b \u2192 model_name \u62fc\u932f<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>4. \u78ba\u8a8d key \u8a8d\u8b49\u6709\u751f\u6548<\/strong><\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">curl http:<span class=\"hljs-comment\">\/\/localhost:4000\/v1\/models   # \u6545\u610f\u4e0d\u5e36 Authorization<\/span>\n<span class=\"hljs-comment\"># \u9810\u671f\uff1a\u88ab\u64cb\u4e0b\u4f86\uff08401 \u4e4b\u985e\uff09\u3002\u5982\u679c\u6c92\u5e36 key \u4e5f\u80fd\u901a \u2192 \ud83d\udea9 \u4f60\u7684 proxy \u6c92\u505a\u8a8d\u8b49<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>5. \u8b93 AI \u5e6b\u4f60\u8907\u67e5 config<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u628a <code>config.yaml<\/code> \u8cbc\u7d66 AI \u554f\uff1a\u300c\u9019\u4efd LiteLLM proxy \u8a2d\u5b9a\u6709\u6c92\u6709\u628a\u771f key \u5beb\u6b7b\uff1f\u6709\u6c92\u6709\u505a\u8a8d\u8b49\uff1f\u5916\u90e8\u5718\u968a\u62ff\u5230 key \u6703\u4e0d\u6703\u6c92\u6709\u9810\u7b97\u4e0a\u9650\uff1f\u300d<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u770b\u4e0d\u61c2\u5c31\u9019\u6a23\u554f AI<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u300c\u7528\u767d\u8a71\u4e00\u6bb5\u4e00\u6bb5\u89e3\u91cb\u9019\u4efd <code>config.yaml<\/code> \u5728\u8a2d\u5b9a\u4ec0\u9ebc\uff0c\u6211\u53ea\u60f3\u77e5\u9053\u6bcf\u500b\u5340\u584a\u7ba1\u4ec0\u9ebc\u3002\u300d<\/li>\n\n\n<li>\u300c\u6211\u9019\u652f\u7a0b\u5f0f\u7684 client \u662f\u76f4\u9023 OpenAI \u9084\u662f\u8d70 LiteLLM proxy\uff1f\u5f9e\u54ea\u4e00\u884c\u770b\u5f97\u51fa\u4f86\uff1f\u300d<\/li>\n\n\n<li>\u300c\u5e6b\u6211\u6aa2\u67e5\u9019\u4efd proxy \u8a2d\u5b9a\u6709\u6c92\u6709\u5b89\u5168\u554f\u984c\uff1a\u771f key \u5beb\u6b7b\u3001\u6c92\u8a8d\u8b49\u3001\u6c92\u9810\u7b97\u4e0a\u9650\u3002\u300d<\/li>\n\n\n<li>\u300c\u6211\u53ea\u6709\u4e00\u652f\u4e00\u6b21\u6027\u8173\u672c\uff0c\u771f\u7684\u9700\u8981\u67b6 proxy \u55ce\uff1f\u9084\u662f\u7528 SDK \u5c31\u597d\uff1f\u300d<\/li>\n\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u7cfb\u5217\u56de\u9867<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5230\u9019\u88e1\uff0c\u3010LiteLLM \u5b8c\u5168\u5165\u9580\u3011\u56db\u7bc7\u8d70\u5b8c\u4e86\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>#01<\/strong>\uff1aLiteLLM \u662f\u4ec0\u9ebc\u3001<code>completion()<\/code> \u4e00\u884c\u6253\u904d\u5404\u5bb6\u3002<\/li>\n\n\n<li><strong>#02<\/strong>\uff1a\u5207\u63db\u6a21\u578b\u3001\u4e32\u6d41\u3001\u53c3\u6578\u5c0d\u9f4a\u3002<\/li>\n\n\n<li><strong>#03<\/strong>\uff1a\u932f\u8aa4\u8655\u7406\u3001\u91cd\u8a66\u3001fallback \u8b93\u547c\u53eb\u66f4\u7a69\u3002<\/li>\n\n\n<li><strong>#04\uff08\u672c\u7bc7\uff09<\/strong>\uff1a\u5f9e\u300c\u4e00\u652f\u7a0b\u5f0f\u300d\u5347\u7d1a\u5230\u300c\u5168\u5718\u968a\u7d71\u4e00\u9598\u9053\u300d\u2014\u2014Proxy Server \u505a key \u96c6\u4e2d\u3001\u6210\u672c\u63a7\u7ba1\u8207\u89c0\u6e2c\u3002<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5224\u65b7\u539f\u5247\u8a18\u4e00\u53e5\u8a71\u5c31\u597d\uff1a<strong>\u500b\u4eba\uff0f\u55ae\u4e00\u8173\u672c\u7528 SDK\uff0c\u591a\u4eba\uff0f\u591a\u5c08\u6848\uff0f\u8981\u8a18\u5e33\u5c31\u67b6 Proxy\u3002<\/strong> \u770b code \u6642\u6c38\u9060\u5148\u5206\u6e05\u695a\uff0c\u4f60\u9762\u5c0d\u7684\u662f client \u7aef\uff08\u6253 proxy\uff09\u9084\u662f server \u7aef\uff08\u8a2d\u5b9a proxy\uff09\u3002<\/p>\n\n\n\n<div id=\"quiz-993de8e3\">\n<style>\n#quiz-993de8e3 .badge { display: inline-block; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: bold; margin-left: 8px; }#quiz-993de8e3 .badge.scenario { background: #ebf8ff; color: #2b6cb0; }#quiz-993de8e3 .badge.debug { background: #fef3c7; color: #92400e; }#quiz-993de8e3 .question-adv { background: white; border-radius: 10px; padding: 24px; margin: 20px 0; box-shadow: 0 2px 8px rgba(0,0,0,0.08); border-left: 4px solid #ed8936; }#quiz-993de8e3 .question-adv h3 { margin-top: 0; color: #2d3748; }#quiz-993de8e3 .code-block { background: #1e1e1e; color: #d4d4d4; padding: 14px; border-radius: 6px; font-family: \"Menlo\", \"Monaco\", \"Courier New\", monospace; font-size: 0.9em; overflow-x: auto; margin: 12px 0; white-space: pre-wrap; }#quiz-993de8e3 .options-adv { list-style: none; padding: 0; }#quiz-993de8e3 .options-adv li { padding: 14px 16px; margin: 10px 0; border: 2px solid #e2e8f0; border-radius: 8px; cursor: pointer; transition: all 0.2s; }#quiz-993de8e3 .options-adv li:hover:not(.disabled) { border-color: #ed8936; background: #fffaf0; }#quiz-993de8e3 .options-adv li.disabled { cursor: default; opacity: 0.7; }#quiz-993de8e3 .options-adv li.show-answer { border-color: #48bb78; background: #f0fff4; }#quiz-993de8e3 .options-adv li.wrong { border-color: #fc8181; background: #fff5f5; }#quiz-993de8e3 .feedback-adv { margin-top: 16px; padding: 14px; border-radius: 8px; display: none; line-height: 1.6; }#quiz-993de8e3 .feedback-adv.correct { background: #f0fff4; color: #276749; display: block; }#quiz-993de8e3 .feedback-adv.wrong { background: #fff5f5; color: #c53030; display: block; }#quiz-993de8e3 .feedback-adv \n      .score-adv { text-align: center; font-size: 1.4em; padding: 24px; background: white; border-radius: 10px; margin-top: 24px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); }#quiz-993de8e3 .intro { background: #ebf8ff; padding: 16px; border-radius: 8px; margin-bottom: 20px; color: #2c5282; }\n<\/style>\n<h1>\u9032\u968e\u6e2c\u9a57\uff1aProxy Server \u5718\u968a\u7d71\u4e00\u9598\u9053\u8207\u6210\u672c\u63a7\u7ba1<\/h1>\n    <div class=\"intro\">\n      <strong>\u6e2c\u9a57\u76ee\u6a19\uff1a<\/strong>\u9a57\u8b49\u4f60\u662f\u5426\u80fd\u5728\u5be6\u969b\u60c5\u5883\u4e2d\u61c9\u7528\u6240\u5b78\u3002<br \/>\n      \u5171 5 \u984c\uff0c\u5305\u542b\u60c5\u5883\u984c\u8207\u932f\u8aa4\u8a3a\u65b7\u984c\u3002\n    <\/div>\n\n    <div class=\"question-adv\" id=\"qAdv1\">\n      <h3>1. \u4f60\u7684\u5718\u968a\u6709 5 \u4f4d\u5de5\u7a0b\u5e2b\u30013 \u500b\u5c08\u6848\uff0c\u8001\u95c6\u60f3\u77e5\u9053\u6bcf\u500b\u5718\u968a\u6bcf\u6708\u82b1\u591a\u5c11\u3001\u4e26\u8a2d\u4e0a\u9650\uff0c\u540c\u6642\u4e0d\u60f3\u6bcf\u53f0\u6a5f\u5668\u90fd\u8cbc\u771f API key\u3002\u6700\u5408\u9069\u7684\u505a\u6cd5\u662f\uff1f <span class=\"badge scenario\">\u60c5\u5883\u984c<\/span><\/h3>\n      <ul class=\"options-adv\">\n        <li onclick=\"checkAnswerAdv(1, 'A', 'C')\">A. \u6bcf\u500b\u4eba\u5404\u81ea\u7528 SDK\uff0c\u628a key \u653e\u5728\u81ea\u5df1\u7684 .env\uff0c\u6708\u5e95\u624b\u52d5\u52a0\u7e3d<\/li>\n        <li onclick=\"checkAnswerAdv(1, 'B', 'C')\">B. \u5171\u7528\u540c\u4e00\u628a OpenAI key\uff0c\u9760 OpenAI \u5f8c\u53f0\u770b\u7528\u91cf<\/li>\n        <li onclick=\"checkAnswerAdv(1, 'C', 'C')\">C. \u67b6 LiteLLM Proxy\uff0c\u771f key \u96c6\u4e2d\u5728 proxy\uff0c\u767c virtual key \u7d66\u5404\u5718\u968a\u4e26\u8a2d max_budget<\/li>\n        <li onclick=\"checkAnswerAdv(1, 'D', 'C')\">D. \u5beb\u4e00\u500b Python \u8173\u672c\u6bcf\u5929\u722c\u5404\u5bb6\u5e33\u55ae\u9801\u9762<\/li>\n      <\/ul>\n      <div class=\"feedback-adv\" id=\"fbAdv1\"><\/div>\n    <\/div>\n\n    <div class=\"question-adv\" id=\"qAdv2\">\n      <h3>2. \u4f60\u8981\u767c\u4e00\u628a key \u7d66\u5916\u90e8\u5408\u4f5c\u5718\u968a\uff0c\u5e0c\u671b\u300c\u53ea\u80fd\u7528 gpt-4o\u3001\u6bcf\u6708\u6700\u591a 100 \u7f8e\u5143\u300d\u3002\u4e0b\u5217\u54ea\u500b\u8acb\u6c42\u6700\u7b26\u5408\u9700\u6c42\uff1f <span class=\"badge scenario\">\u60c5\u5883\u984c<\/span><\/h3>\n      <ul class=\"options-adv\">\n        <li onclick=\"checkAnswerAdv(2, 'A', 'B')\">A. \u76f4\u63a5\u628a master_key \u4ea4\u7d66\u4ed6\u5011<\/li>\n        <li onclick=\"checkAnswerAdv(2, 'B', 'B')\">B. \u547c\u53eb \/key\/generate\uff0c\u5e36 models=[&#8220;gpt-4o&#8221;]\u3001max_budget=100\u3001budget_duration=&#8221;30d&#8221;<\/li>\n        <li onclick=\"checkAnswerAdv(2, 'C', 'B')\">C. \u5728 config.yaml \u7684 litellm_settings \u52a0\u4e00\u884c max_budget=100<\/li>\n        <li onclick=\"checkAnswerAdv(2, 'D', 'B')\">D. \u628a\u771f OpenAI key \u8a2d\u6bcf\u6708\u4e0a\u9650\u5f8c\u4ea4\u7d66\u4ed6\u5011<\/li>\n      <\/ul>\n      <div class=\"feedback-adv\" id=\"fbAdv2\"><\/div>\n    <\/div>\n\n    <div class=\"question-adv\" id=\"qAdv3\">\n      <h3>3. \u4f60\u53ea\u662f\u8981\u8dd1\u4e00\u652f\u4e00\u6b21\u6027\u7684\u8cc7\u6599\u6e05\u7406\u8173\u672c\uff0c\u81ea\u5df1\u4e00\u500b\u4eba\u7528\u3002AI \u537b\u5efa\u8b70\u4f60\u5148\u67b6\u4e00\u6574\u5957 proxy\u3002\u5408\u7406\u7684\u5224\u65b7\u662f\uff1f <span class=\"badge scenario\">\u60c5\u5883\u984c<\/span><\/h3>\n      <ul class=\"options-adv\">\n        <li onclick=\"checkAnswerAdv(3, 'A', 'A')\">A. \u55ae\u4eba\u55ae\u8173\u672c\u7528 SDK \u5c31\u597d\uff0cproxy \u662f\u591a\u9918\u7684\u7dad\u904b\u8ca0\u64d4\uff0c\u558a\u505c<\/li>\n        <li onclick=\"checkAnswerAdv(3, 'B', 'A')\">B. \u4e00\u5b9a\u8981\u67b6 proxy\uff0c\u5426\u5247\u7121\u6cd5\u547c\u53eb\u6a21\u578b<\/li>\n        <li onclick=\"checkAnswerAdv(3, 'C', 'A')\">C. \u67b6 proxy \u624d\u80fd\u7528\u578b\u5225\u6a19\u8a3b<\/li>\n        <li onclick=\"checkAnswerAdv(3, 'D', 'A')\">D. \u5148\u67b6 proxy \u518d\u8aaa\uff0c\u53cd\u6b63\u4e4b\u5f8c\u7e3d\u6703\u7528\u5230<\/li>\n      <\/ul>\n      <div class=\"feedback-adv\" id=\"fbAdv3\"><\/div>\n    <\/div>\n\n    <div class=\"question-adv\" id=\"qAdv4\">\n      <h3>4. AI \u4ea4\u51fa\u9019\u4efd config.yaml\uff0c\u4f60 review \u6642\u8a72\u63d0\u51fa\u4ec0\u9ebc\u554f\u984c\uff1f <span class=\"badge debug\">\u932f\u8aa4\u8a3a\u65b7<\/span><\/h3>\n      <div class=\"code-block\">model_list:\n  &#8211; model_name: gpt-4o\n    litellm_params:\n      model: openai\/gpt-4o\n      api_key: sk-proj-REAL1234567890abcdef<\/div>\n      <ul class=\"options-adv\">\n        <li onclick=\"checkAnswerAdv(4, 'A', 'C')\">A. model_name \u4e0d\u8a72\u53eb gpt-4o<\/li>\n        <li onclick=\"checkAnswerAdv(4, 'B', 'C')\">B. \u5c11\u4e86 litellm_settings \u5340\u584a\uff0c\u6703\u7121\u6cd5\u555f\u52d5<\/li>\n        <li onclick=\"checkAnswerAdv(4, 'C', 'C')\">C. \u771f key \u88ab\u5beb\u6b7b\u5728\u6a94\u6848\u88e1\uff0c\u61c9\u6539\u6210 os.environ\/OPENAI_API_KEY \u5f9e\u74b0\u5883\u8b8a\u6578\u8b80<\/li>\n        <li onclick=\"checkAnswerAdv(4, 'D', 'C')\">D. model \u61c9\u8a72\u5beb\u6210 gpt-4o\/openai<\/li>\n      <\/ul>\n      <div class=\"feedback-adv\" id=\"fbAdv4\"><\/div>\n    <\/div>\n\n    <div class=\"question-adv\" id=\"qAdv5\">\n      <h3>5. \u5718\u968a\u53cd\u6620\u8d70 proxy \u5f8c\u4ecd\u64d4\u5fc3\u771f key \u5916\u6d29\u3002\u4f60\u6aa2\u67e5 client \u7aef\u767c\u73fe\u4e0b\u5217 code\uff0c\u554f\u984c\u5728\u54ea\uff1f <span class=\"badge debug\">\u932f\u8aa4\u8a3a\u65b7<\/span><\/h3>\n      <div class=\"code-block\">client = OpenAI(\n    base_url=&#8221;http:\/\/localhost:4000&#8243;,\n    api_key=&#8221;sk-proj-REALOPENAIKEY&#8230;&#8221;,\n)<\/div>\n      <ul class=\"options-adv\">\n        <li onclick=\"checkAnswerAdv(5, 'A', 'B')\">A. base_url \u4e0d\u8a72\u6307\u5411 localhost<\/li>\n        <li onclick=\"checkAnswerAdv(5, 'B', 'B')\">B. client \u585e\u4e86\u771f OpenAI key\uff0c\u7b49\u65bc\u767d\u67b6 proxy\uff1b\u61c9\u6539\u7528 proxy \u767c\u7684 virtual key<\/li>\n        <li onclick=\"checkAnswerAdv(5, 'C', 'B')\">C. \u61c9\u8a72\u6539\u7528 import litellm \u624d\u5b89\u5168<\/li>\n        <li onclick=\"checkAnswerAdv(5, 'D', 'B')\">D. \u5c11\u4e86 model \u53c3\u6578\u6240\u4ee5\u6703\u5916\u6d29<\/li>\n      <\/ul>\n      <div class=\"feedback-adv\" id=\"fbAdv5\"><\/div>\n    <\/div>\n\n    <div class=\"score-adv\" id=\"scoreAdv\" style=\"display:none;\"><\/div>\n<script>\n\n      let answeredAdv = 0;\n      let correctAdv = 0;\n      const totalAdv = 5;\n      const explanationsAdv = {\n        1: \"\u591a\u4eba\uff0f\u591a\u5c08\u6848\uff0f\u8981\u8a18\u5e33\u8207\u9650\u984d\uff0c\u6b63\u662f proxy \u7684\u6838\u5fc3\u5834\u666f\uff1a\u771f key \u96c6\u4e2d\u5728 proxy\uff0c\u767c virtual key \u7d66\u5404\u5718\u968a\u7368\u7acb\u8a18\u5e33\u4e26\u8a2d max_budget\u3002\u5404\u81ea .env \u6216\u5171\u7528\u4e00\u628a key \u90fd\u7121\u6cd5\u56de\u7b54\u300c\u8ab0\u82b1\u591a\u5c11\u300d\u4e5f\u96e3\u8a2d\u4e0a\u9650\u3002\",\n        2: \"\u767c\u53d7\u9650 key \u8981\u6253\u7ba1\u7406 API \/key\/generate\uff08\u5e36 master_key \u8a8d\u8b49\uff09\uff0c\u7528 models \u9650\u5b9a\u53ef\u7528\u6a21\u578b\u3001max_budget \u8a2d\u82b1\u8cbb\u4e0a\u9650\u3001budget_duration \u8a2d\u91cd\u7f6e\u9031\u671f\u3002\u5207\u52ff\u628a master_key \u6216\u771f key \u4ea4\u7d66\u5916\u90e8\u3002\",\n        3: \"\u500b\u4eba\u55ae\u4e00\u8173\u672c\u7528 SDK \u5c31\u5920\uff0cproxy \u662f\u7d66\u5718\u968a\u5171\u7528\u3001\u8a18\u5e33\u8207\u9650\u984d\u7528\u7684\u3002\u6c92\u6709\u9019\u4e9b\u9700\u6c42\u6642\u67b6 proxy \u53ea\u662f\u591a\u4e00\u5c64\u8981\u7dad\u904b\u7684\u4f3a\u670d\u5668\uff0c\u770b\u5230 AI \u904e\u5ea6\u8a2d\u8a08\u8981\u80fd\u558a\u505c\u3002\",\n        4: \"api_key \u76f4\u63a5\u5beb\u6b7b\u771f key\uff0c\u4e00\u65e6\u9019\u4efd config \u9032\u7248\u63a7\u5c31\u6703\u5916\u6d29\u3002\u6b63\u78ba\u505a\u6cd5\u662f <code>api_key: os.environ\/OPENAI_API_KEY<\/code> \u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u3002litellm_settings \u662f\u9078\u7528\u7684\uff0c\u7f3a\u5b83\u4e0d\u6703\u7121\u6cd5\u555f\u52d5\u3002\",\n        5: \"\u8d70 proxy \u7684\u610f\u7fa9\u5c31\u662f\u8b93 client \u62ff\u4e0d\u5230\u771f key\u3002\u9019\u88e1 client \u537b\u585e\u4e86\u771f OpenAI key\uff0c\u7b49\u65bc\u767d\u67b6 proxy\u3002\u61c9\u6539\u653e proxy \u767c\u7684 virtual key\uff08\u5982 sk-1234\uff09\uff0c\u771f key \u53ea\u7559\u5728 proxy \u7aef\u3002\",\n      };\n\n      function checkAnswerAdv(qNum, selected, correctAns) {\n        const question = document.getElementById(\"qAdv\" + qNum);\n        if (question.classList.contains(\"answered\")) return;\n        question.classList.add(\"answered\");\n        answeredAdv++;\n        const options = question.querySelectorAll(\".options-adv li\");\n        options.forEach((opt) => {\n          opt.classList.add(\"disabled\");\n          if (opt.textContent.startsWith(correctAns + \".\")) opt.classList.add(\"show-answer\");\n        });\n        const feedback = document.getElementById(\"fbAdv\" + qNum);\n        if (selected === correctAns) {\n          correctAdv++;\n          feedback.className = \"feedback-adv correct\";\n          feedback.innerHTML = \"\u2713 \u6b63\u78ba\uff01\" + explanationsAdv[qNum];\n        } else {\n          feedback.className = \"feedback-adv wrong\";\n          feedback.innerHTML = \"\u2717 \u932f\u8aa4\u3002\u6b63\u78ba\u7b54\u6848\u662f \" + correctAns + \"\u3002\" + explanationsAdv[qNum];\n          options.forEach((opt) => {\n            if (opt.textContent.startsWith(selected + \".\")) opt.classList.add(\"wrong\");\n          });\n        }\n        if (answeredAdv === totalAdv) {\n          const scoreDiv = document.getElementById(\"scoreAdv\");\n          scoreDiv.style.display = \"block\";\n          let msg = \"\";\n          if (correctAdv === totalAdv) msg = \"\ud83c\udfaf \u5b8c\u7f8e\uff01\u4f60\u5df2\u7d93\u6e96\u5099\u597d\u5be6\u6230\u4e86\uff01\";\n          else if (correctAdv >= Math.ceil(totalAdv * 0.8)) msg = \"\ud83d\udcaa \u5f88\u68d2\uff01\u518d\u8907\u7fd2\u4e00\u4e0b\u932f\u7684\u984c\u76ee\";\n          else if (correctAdv >= Math.ceil(totalAdv * 0.6)) msg = \"\ud83d\udcd6 \u5efa\u8b70\u91cd\u8b80\u76f8\u95dc\u6bb5\u843d\u5f8c\u518d\u8a66\u4e00\u6b21\";\n          else msg = \"\ud83d\udd04 \u5efa\u8b70\u91cd\u65b0\u95b1\u8b80\u6587\u4ef6\uff0c\u7279\u5225\u6ce8\u610f\u64cd\u4f5c\u6d41\u7a0b\";\n          scoreDiv.innerHTML = \"\u6e2c\u9a57\u5b8c\u6210\uff01\u5f97\u5206\uff1a\" + correctAdv + \" \/ \" + totalAdv + \"<br>\" + msg;\n        }\n      }\n    \n<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u6e2c\u9a57\uff1aProxy Server \u5718\u968a\u7d71\u4e00\u9598\u9053\u8207\u6210\u672c\u63a7\u7ba1 \u5171 5 \u984c\uff0c\u9ede\u9078\u7b54\u6848\u5f8c\u6703\u7acb\u5373\u986f\u793a\u7d50\u679c 1. \u76f8\u8f03\u65bc\u524d\u4e09 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rolpb_likes":0,"footnotes":""},"categories":[948],"tags":[962,949,961,963,964],"class_list":["post-877","post","type-post","status-publish","format-standard","hentry","category-litellm","tag-config-yaml","tag-litellm","tag-proxy-server","tag-virtual-key","tag-964"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"_links":{"self":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/comments?post=877"}],"version-history":[{"count":0,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/877\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/media?parent=877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/categories?post=877"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/tags?post=877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}