{"id":8044,"date":"2024-11-01T23:25:08","date_gmt":"2024-11-01T15:25:08","guid":{"rendered":"https:\/\/www.aisharenet.com\/?p=8044"},"modified":"2024-11-03T15:10:41","modified_gmt":"2024-11-03T07:10:41","slug":"uni-api","status":"publish","type":"post","link":"https:\/\/www.kdjingpai.com\/en\/uni-api\/","title":{"rendered":"uni-api\uff1a\u8f7b\u91cf\u5927\u6a21\u578bAPI\u8f6c\u6362\u4e3aOpenAI\u63a5\u53e3\uff0cYAML\u6587\u4ef6\u914d\u7f6eAPI\u6e20\u9053"},"content":{"rendered":"<p>\u65e0\u524d\u7aef\uff0c\u7eaf\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e API \u6e20\u9053\u3002\u53ea\u8981\u5199\u4e00\u4e2a\u6587\u4ef6\u5c31\u80fd\u8fd0\u884c\u8d77\u4e00\u4e2a\u5c5e\u4e8e\u81ea\u5df1\u7684 API \u7ad9\uff0c\u6587\u6863\u6709\u8be6\u7ec6\u7684\u914d\u7f6e\u6307\u5357\uff0c\u5c0f\u767d\u53cb\u597d\u3002<\/p>\n<p>uni-api \u662f\u4e00\u4e2a\u7edf\u4e00\u7ba1\u7406\u5927\u6a21\u578bAPI\u7684\u9879\u76ee\uff0c\u5141\u8bb8\u901a\u8fc7\u4e00\u4e2a\u7edf\u4e00\u7684API\u63a5\u53e3\u8c03\u7528\u591a\u4e2a\u540e\u7aef\u670d\u52a1\uff0c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3aOpenAI\u683c\u5f0f\uff0c\u652f\u6301\u8d1f\u8f7d\u5747\u8861\u3002\u8be5\u9879\u76ee\u7279\u522b\u9002\u5408\u4e0d\u9700\u8981\u590d\u6742\u524d\u7aef\u754c\u9762\u7684\u4e2a\u4eba\u7528\u6237\uff0c\u652f\u6301\u591a\u79cd\u6a21\u578b\u548c\u670d\u52a1\u63d0\u4f9b\u5546\uff0c\u5305\u62ecOpenAI\u3001Anthropic\u3001Gemini\u3001Vertex\u7b49\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u529f\u80fd\u5217\u8868<\/h2>\n<ul>\n<li><strong>\u7edf\u4e00API\u63a5\u53e3<\/strong>\uff1a\u901a\u8fc7\u4e00\u4e2a\u7edf\u4e00\u7684API\u63a5\u53e3\u8c03\u7528\u591a\u4e2a\u540e\u7aef\u670d\u52a1\u3002<\/li>\n<li><strong>\u683c\u5f0f\u8f6c\u6362<\/strong>\uff1a\u5c06\u4e0d\u540c\u670d\u52a1\u63d0\u4f9b\u5546\u7684API\u8f6c\u6362\u4e3aOpenAI\u683c\u5f0f\u3002<\/li>\n<li><strong>\u8d1f\u8f7d\u5747\u8861<\/strong>\uff1a\u652f\u6301\u591a\u79cd\u8d1f\u8f7d\u5747\u8861\u7b56\u7565\uff0c\u5305\u62ec\u8f6e\u8be2\u3001\u52a0\u6743\u8f6e\u8be2\u7b49\u3002<\/li>\n<li><strong>\u591a\u670d\u52a1\u652f\u6301<\/strong>\uff1a\u652f\u6301OpenAI\u3001Anthropic\u3001Gemini\u3001Vertex\u7b49\u591a\u79cd\u670d\u52a1\u63d0\u4f9b\u5546\u3002<\/li>\n<li><strong>\u914d\u7f6e\u6587\u4ef6\u7ba1\u7406<\/strong>\uff1a\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u7ba1\u7406API\u6e20\u9053\u548c\u6a21\u578b\u3002<\/li>\n<li><strong>\u81ea\u52a8\u91cd\u8bd5<\/strong>\uff1a\u5728API\u8bf7\u6c42\u5931\u8d25\u65f6\u81ea\u52a8\u91cd\u8bd5\u4e0b\u4e00\u4e2a\u6e20\u9053\u3002<\/li>\n<li><strong>\u6743\u9650\u63a7\u5236<\/strong>\uff1a\u652f\u6301\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u63a7\u5236\u548c\u9650\u6d41\u8bbe\u7f6e\u3002<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>\u4f7f\u7528\u5e2e\u52a9<\/h2>\n<h3>\u8f7b\u91cf\u90e8\u7f72<\/h3>\n<p><strong>1. <a href=\"https:\/\/vercel.com\/new\/clone?repository-url=https%3A%2F%2Fgithub.com%2Fyym68686%2Funi-api%2Ftree%2Fmain&amp;env=CONFIG_URL,DISABLE_DATABASE&amp;project-name=uni-api-vercel&amp;repository-name=uni-api-vercel\">Vercel \u90e8\u7f72<\/a><\/strong><\/p>\n<p>\u70b9\u51fb\u4e0a\u9762\u7684\u4e00\u952e\u90e8\u7f72\u6309\u94ae\u540e\uff0c\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u00a0<code>CONFIG_URL<\/code>\u00a0\u4e3a\u914d\u7f6e\u6587\u4ef6\u7684\u76f4\u94fe\uff0c\u00a0<code>DISABLE_DATABASE<\/code>\u00a0\u4e3a true\uff0c\u7136\u540e\u70b9\u51fb Create \u521b\u5efa\u9879\u76ee\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><strong>2.serv00 \u8fdc\u7a0b\u90e8\u7f72<\/strong><\/p>\n<p>\u9996\u5148\u767b\u5f55\u9762\u677f\uff0cAdditional services \u91cc\u9762\u70b9\u51fb\u9009\u9879\u5361 Run your own applications \u5f00\u542f\u5141\u8bb8\u8fd0\u884c\u81ea\u5df1\u7684\u7a0b\u5e8f\uff0c\u7136\u540e\u5230\u9762\u677f Port reservation \u53bb\u968f\u4fbf\u5f00\u4e00\u4e2a\u7aef\u53e3\u3002<\/p>\n<p>\u5982\u679c\u6ca1\u6709\u81ea\u5df1\u7684\u57df\u540d\uff0c\u53bb\u9762\u677f WWW websites \u5220\u6389\u9ed8\u8ba4\u7ed9\u7684\u57df\u540d\uff0c\u518d\u65b0\u5efa\u4e00\u4e2a\u57df\u540d Domain \u4e3a\u521a\u624d\u5220\u6389\u7684\u57df\u540d\uff0c\u70b9\u51fb Advanced settings \u540e\u8bbe\u7f6e Website type \u4e3a Proxy \u57df\u540d\uff0cProxy port \u6307\u5411\u4f60\u521a\u624d\u5f00\u7684\u7aef\u53e3\uff0c\u4e0d\u8981\u9009\u4e2d Use HTTPS\u3002<\/p>\n<p>ssh \u767b\u9646\u5230 serv00 \u670d\u52a1\u5668\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\uff1a<\/p>\n<pre>git clone --depth 1 -b main --quiet https:\/\/github.com\/yym68686\/uni-api.git\r\ncd uni-api\r\npython -m venv uni-api\r\ntmux new -s uni-api\r\nsource uni-api\/bin\/activate\r\nexport CFLAGS=\"-I\/usr\/local\/include\"\r\nexport CXXFLAGS=\"-I\/usr\/local\/include\"\r\nexport CC=gcc\r\nexport CXX=g++\r\nexport MAX_CONCURRENCY=1\r\nexport CPUCOUNT=1\r\nexport MAKEFLAGS=\"-j1\"\r\nCMAKE_BUILD_PARALLEL_LEVEL=1 cpuset -l 0 pip install -vv -r requirements.txt\r\ncpuset -l 0 pip install -r -vv requirements.txt<\/pre>\n<p>ctrl+b d \u9000\u51fa tmux \u7b49\u5f85\u51e0\u4e2a\u5c0f\u65f6\u5b89\u88c5\u5b8c\u6210\uff0c\u5b89\u88c5\u5b8c\u6210\u540e\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\uff1a<\/p>\n<pre>tmux attach -t uni-api\r\nsource uni-api\/bin\/activate\r\nexport CONFIG_URL=http:\/\/file_url\/api.yaml\r\nexport DISABLE_DATABASE=true\r\n# \u4fee\u6539\u7aef\u53e3\uff0cxxx \u4e3a\u7aef\u53e3\uff0c\u81ea\u884c\u4fee\u6539\uff0c\u5bf9\u5e94\u521a\u521a\u5728\u9762\u677f Port reservation \u5f00\u7684\u7aef\u53e3\r\nsed -i '' 's\/port=8000\/port=xxx\/' main.py\r\nsed -i '' 's\/reload=True\/reload=False\/' main.py\r\npython main.py<\/pre>\n<p>\u4f7f\u7528 ctrl+b d \u9000\u51fa tmux\uff0c\u5373\u53ef\u8ba9\u7a0b\u5e8f\u540e\u53f0\u8fd0\u884c\u3002\u6b64\u65f6\u5c31\u53ef\u4ee5\u5728\u5176\u4ed6\u804a\u5929\u5ba2\u6237\u7aef\u4f7f\u7528 uni-api \u4e86\u3002curl \u6d4b\u8bd5\u811a\u672c\uff1a<\/p>\n<pre>curl -X POST https:\/\/xxx.serv00.net\/v1\/chat\/completions \\\r\n-H 'Content-Type: application\/json' \\\r\n-H 'Authorization: Bearer sk-xxx' \\\r\n-d '{\"model\": \"gpt-4o\",\"messages\": [{\"role\": \"user\",\"content\": \"\u4f60\u597d\"}]}'<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>3.Docker \u672c\u5730\u90e8\u7f72<\/strong><\/p>\n<p>\u542f\u52a8\u5bb9\u5668<\/p>\n<pre>docker run --user root -p 8001:8000 --name uni-api -dit \\\r\n-e CONFIG_URL=http:\/\/file_url\/api.yaml \\ # \u5982\u679c\u5df2\u7ecf\u6302\u8f7d\u4e86\u672c\u5730\u914d\u7f6e\u6587\u4ef6\uff0c\u4e0d\u9700\u8981\u8bbe\u7f6e CONFIG_URL\r\n-v .\/api.yaml:\/home\/api.yaml \\ # \u5982\u679c\u5df2\u7ecf\u8bbe\u7f6e CONFIG_URL\uff0c\u4e0d\u9700\u8981\u6302\u8f7d\u914d\u7f6e\u6587\u4ef6\r\n-v .\/uniapi_db:\/home\/data \\ # \u5982\u679c\u4e0d\u60f3\u4fdd\u5b58\u7edf\u8ba1\u6570\u636e\uff0c\u4e0d\u9700\u8981\u6302\u8f7d\u8be5\u6587\u4ef6\u5939\r\nyym68686\/uni-api:latest<\/pre>\n<p>&nbsp;<\/p>\n<p>\u6216\u8005\uff0c\u5982\u679c\u60a8\u60f3\u4f7f\u7528 Docker Compose\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2adocker-compose.yml\u793a\u4f8b\uff1a<\/p>\n<pre>services:\r\nuni-api:\r\ncontainer_name: uni-api\r\nimage: yym68686\/uni-api:latest\r\nenvironment:\r\n- CONFIG_URL=http:\/\/file_url\/api.yaml # \u5982\u679c\u5df2\u7ecf\u6302\u8f7d\u4e86\u672c\u5730\u914d\u7f6e\u6587\u4ef6\uff0c\u4e0d\u9700\u8981\u8bbe\u7f6e CONFIG_URL\r\nports:\r\n- 8001:8000\r\nvolumes:\r\n- .\/api.yaml:\/home\/api.yaml # \u5982\u679c\u5df2\u7ecf\u8bbe\u7f6e CONFIG_URL\uff0c\u4e0d\u9700\u8981\u6302\u8f7d\u914d\u7f6e\u6587\u4ef6\r\n- .\/uniapi_db:\/home\/data # \u5982\u679c\u4e0d\u60f3\u4fdd\u5b58\u7edf\u8ba1\u6570\u636e\uff0c\u4e0d\u9700\u8981\u6302\u8f7d\u8be5\u6587\u4ef6\u5939<\/pre>\n<p>CONFIG_URL \u5c31\u662f\u53ef\u4ee5\u81ea\u52a8\u4e0b\u8f7d\u8fdc\u7a0b\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u6bd4\u5982\u4f60\u5728\u67d0\u4e2a\u5e73\u53f0\u4e0d\u65b9\u4fbf\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\uff0c\u53ef\u4ee5\u628a\u914d\u7f6e\u6587\u4ef6\u4f20\u5230\u67d0\u4e2a\u6258\u7ba1\u670d\u52a1\uff0c\u53ef\u4ee5\u63d0\u4f9b\u76f4\u94fe\u7ed9 uni-api \u4e0b\u8f7d\uff0cCONFIG_URL \u5c31\u662f\u8fd9\u4e2a\u76f4\u94fe\u3002\u5982\u679c\u4f7f\u7528\u672c\u5730\u6302\u8f7d\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u4e0d\u9700\u8981\u8bbe\u7f6e CONFIG_URL\u3002CONFIG_URL \u662f\u5728\u4e0d\u65b9\u4fbf\u6302\u8f7d\u914d\u7f6e\u6587\u4ef6\u7684\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002<\/p>\n<p>\u5728\u540e\u53f0\u8fd0\u884c Docker Compose \u5bb9\u5668<\/p>\n<pre>docker-compose pull\r\ndocker-compose up -d<\/pre>\n<p>Docker \u6784\u5efa<\/p>\n<pre>docker build --no-cache -t uni-api:latest -f Dockerfile --platform linux\/amd64 .\r\ndocker tag uni-api:latest yym68686\/uni-api:latest\r\ndocker push yym68686\/uni-api:latest<\/pre>\n<p>\u4e00\u952e\u91cd\u542f Docker \u955c\u50cf<\/p>\n<pre>set -eu\r\ndocker pull yym68686\/uni-api:latest\r\ndocker rm -f uni-api\r\ndocker run --user root -p 8001:8000 -dit --name uni-api \\\r\n-e CONFIG_URL=http:\/\/file_url\/api.yaml \\\r\n-v .\/api.yaml:\/home\/api.yaml \\\r\n-v .\/uniapi_db:\/home\/data \\\r\nyym68686\/uni-api:latest\r\ndocker logs -f uni-api<\/pre>\n<p>RESTful curl test<\/p>\n<pre>curl -X POST http:\/\/127.0.0.1:8000\/v1\/chat\/completions \\\r\n-H \"Content-Type: application\/json\" \\\r\n-H \"Authorization: Bearer ${API}\" \\\r\n-d '{\"model\": \"gpt-4o\",\"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}],\"stream\": true}'<\/pre>\n<p>&nbsp;<\/p>\n<h3>\u5b89\u88c5\u6d41\u7a0b<\/h3>\n<ol>\n<li><strong>\u51c6\u5907\u914d\u7f6e\u6587\u4ef6<\/strong>\uff1a\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a<code>api.yaml<\/code>\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u586b\u5199\u670d\u52a1\u63d0\u4f9b\u5546\u4fe1\u606f\u3001API\u5730\u5740\u548cAPI\u5bc6\u94a5\u3002<\/li>\n<li><strong>\u4e0a\u4f20\u914d\u7f6e\u6587\u4ef6<\/strong>\uff1a\u5c06\u914d\u7f6e\u6587\u4ef6\u4e0a\u4f20\u5230\u4e91\u76d8\uff0c\u83b7\u53d6\u6587\u4ef6\u7684\u76f4\u63a5\u94fe\u63a5\u3002<\/li>\n<li><strong>\u542f\u52a8Docker\u5bb9\u5668<\/strong>\uff1a\n<ul>\n<li>\u4f7f\u7528<code>CONFIG_URL<\/code>\u73af\u5883\u53d8\u91cf\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u7684URL\u3002<\/li>\n<li>\u8bbe\u7f6e<code>DISABLE_DATABASE<\/code>\u4e3a<code>true<\/code>\u3002<\/li>\n<li>\u4f7f\u7528Docker\u547d\u4ee4\u542f\u52a8\u5bb9\u5668\uff1a<code>docker run -d --name uni-api -e CONFIG_URL=http:\/\/file_url\/api.yaml -e DISABLE_DATABASE=true yym68686\/uni-api:latest<\/code><\/li>\n<\/ul>\n<\/li>\n<li><strong>\u914d\u7f6e\u7aef\u53e3<\/strong>\uff1a\u5728\u9762\u677f\u4e2d\u968f\u673a\u6253\u5f00\u4e00\u4e2a\u7aef\u53e3\uff0c\u5e76\u5c06\u5176\u6307\u5411Docker\u5bb9\u5668\u3002<\/li>\n<\/ol>\n<h3>\u4f7f\u7528\u6d41\u7a0b<\/h3>\n<ol>\n<li><strong>\u8c03\u7528API<\/strong>\uff1a\u4f7f\u7528\u7edf\u4e00\u7684API\u63a5\u53e3\u8c03\u7528\u540e\u7aef\u670d\u52a1\uff0c\u652f\u6301\u591a\u79cd\u6a21\u578b\u548c\u670d\u52a1\u63d0\u4f9b\u5546\u3002<\/li>\n<li><strong>\u8d1f\u8f7d\u5747\u8861<\/strong>\uff1a\u6839\u636e\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u8d1f\u8f7d\u5747\u8861\u7b56\u7565\uff0c\u81ea\u52a8\u5206\u914d\u8bf7\u6c42\u5230\u4e0d\u540c\u7684\u6e20\u9053\u3002<\/li>\n<li><strong>\u6743\u9650\u63a7\u5236<\/strong>\uff1a\u6839\u636e\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u6743\u9650\u8bbe\u7f6e\uff0c\u63a7\u5236API\u5bc6\u94a5\u7684\u4f7f\u7528\u8303\u56f4\u548c\u9650\u6d41\u3002<\/li>\n<li><strong>\u81ea\u52a8\u91cd\u8bd5<\/strong>\uff1a\u5728\u8bf7\u6c42\u5931\u8d25\u65f6\uff0c\u81ea\u52a8\u91cd\u8bd5\u4e0b\u4e00\u4e2a\u53ef\u7528\u7684\u6e20\u9053\uff0c\u786e\u4fdd\u9ad8\u53ef\u7528\u6027\u3002<\/li>\n<\/ol>\n<h3>\u8be6\u7ec6\u64cd\u4f5c\u6b65\u9aa4<\/h3>\n<ol>\n<li><strong>\u914d\u7f6e\u6587\u4ef6\u793a\u4f8b<\/strong>\uff1a\n<pre><code>\r\nproviders:\r\n  - provider: provider_name # \u670d\u52a1\u63d0\u4f9b\u5546\u540d\u79f0, \u5982 openai\u3001anthropic\u3001gemini\u3001openrouter\u3001deepbricks\uff0c\u968f\u4fbf\u53d6\u540d\u5b57\uff0c\u5fc5\u586b\r\n    base_url: https:\/\/api.your.com\/v1\/chat\/completions # \u540e\u7aef\u670d\u52a1\u7684API\u5730\u5740\uff0c\u5fc5\u586b\r\n    api: sk-YgS6GTi0b4bEabc4C # \u63d0\u4f9b\u5546\u7684API Key\uff0c\u5fc5\u586b\r\n    model: # \u9009\u586b\uff0c\u5982\u679c\u4e0d\u914d\u7f6e model\uff0c\u4f1a\u81ea\u52a8\u901a\u8fc7 base_url \u548c api \u901a\u8fc7 \/v1\/models \u7aef\u70b9\u83b7\u53d6\u53ef\u7528\u7684\u6240\u6709\u6a21\u578b\u3002\r\n      - gpt-4o # \u53ef\u4ee5\u4f7f\u7528\u7684\u6a21\u578b\u540d\u79f0\uff0c\u5fc5\u586b\r\n      - claude-3-5-sonnet-20240620: claude-3-5-sonnet # \u91cd\u547d\u540d\u6a21\u578b\uff0cclaude-3-5-sonnet-20240620 \u662f\u670d\u52a1\u5546\u7684\u6a21\u578b\u540d\u79f0\uff0cclaude-3-5-sonnet \u662f\u91cd\u547d\u540d\u540e\u7684\u540d\u5b57\uff0c\u53ef\u4ee5\u4f7f\u7528\u7b80\u6d01\u7684\u540d\u5b57\u4ee3\u66ff\u539f\u6765\u590d\u6742\u7684\u540d\u79f0\uff0c\u9009\u586b\r\n      - dall-e-3\r\n\r\n  - provider: <a href=\"https:\/\/www.kdjingpai.com\/en\/claudeanquanfubai\/\">anthropic<\/a>\r\n    base_url: https:\/\/api.anthropic.com\/v1\/messages\r\n    api: # \u652f\u6301\u591a\u4e2a API Key\uff0c\u591a\u4e2a key \u81ea\u52a8\u5f00\u542f\u8f6e\u8bad\u8d1f\u8f7d\u5747\u8861\uff0c\u81f3\u5c11\u4e00\u4e2a key\uff0c\u5fc5\u586b\r\n      - sk-ant-api03-bNnAOJyA-xQw_twAA\r\n      - sk-ant-api02-bNnxxxx\r\n    model:\r\n      - claude-3-5-sonnet-20240620: claude-3-5-sonnet # \u91cd\u547d\u540d\u6a21\u578b\uff0cclaude-3-5-sonnet-20240620 \u662f\u670d\u52a1\u5546\u7684\u6a21\u578b\u540d\u79f0\uff0cclaude-3-5-sonnet \u662f\u91cd\u547d\u540d\u540e\u7684\u540d\u5b57\uff0c\u53ef\u4ee5\u4f7f\u7528\u7b80\u6d01\u7684\u540d\u5b57\u4ee3\u66ff\u539f\u6765\u590d\u6742\u7684\u540d\u79f0\uff0c\u9009\u586b\r\n    tools: true # \u662f\u5426\u652f\u6301\u5de5\u5177\uff0c\u5982\u751f\u6210\u4ee3\u7801\u3001\u751f\u6210\u6587\u6863\u7b49\uff0c\u9ed8\u8ba4\u662f true\uff0c\u9009\u586b\r\n\r\n  - provider: <a href=\"https:\/\/www.kdjingpai.com\/en\/geminibardgubu\/\">gemini<\/a>\r\n    base_url: https:\/\/generativelanguage.googleapis.com\/v1beta # base_url \u652f\u6301 v1beta\/v1, \u4ec5\u4f9b Gemini \u6a21\u578b\u4f7f\u7528\uff0c\u5fc5\u586b\r\n    api: AIzaSyAN2k6IRdgw\r\n    model:\r\n      - gemini-1.5-pro\r\n      - gemini-1.5-flash-exp-0827: gemini-1.5-flash # \u91cd\u547d\u540d\u540e\uff0c\u539f\u6765\u7684\u6a21\u578b\u540d\u5b57 gemini-1.5-flash-exp-0827 \u65e0\u6cd5\u4f7f\u7528\uff0c\u5982\u679c\u8981\u4f7f\u7528\u539f\u6765\u7684\u540d\u5b57\uff0c\u53ef\u4ee5\u5728 model \u4e2d\u6dfb\u52a0\u539f\u6765\u7684\u540d\u5b57\uff0c\u53ea\u8981\u52a0\u4e0a\u4e0b\u9762\u4e00\u884c\u5c31\u53ef\u4ee5\u4f7f\u7528\u539f\u6765\u7684\u540d\u5b57\u4e86\r\n      - gemini-1.5-flash-exp-0827 # \u52a0\u4e0a\u8fd9\u4e00\u884c\uff0cgemini-1.5-flash-exp-0827 \u548c gemini-1.5-flash \u90fd\u53ef\u4ee5\u88ab\u8bf7\u6c42\r\n    tools: true\r\n\r\n  - provider: vertex\r\n    project_id: gen-lang-client-xxxxxxxxxxxxxx #    \u63cf\u8ff0\uff1a \u60a8\u7684Google Cloud\u9879\u76eeID\u3002\u683c\u5f0f\uff1a \u5b57\u7b26\u4e32\uff0c\u901a\u5e38\u7531\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\u7ec4\u6210\u3002\u83b7\u53d6\u65b9\u5f0f\uff1a \u5728Google Cloud Console\u7684\u9879\u76ee\u9009\u62e9\u5668\u4e2d\u53ef\u4ee5\u627e\u5230\u60a8\u7684\u9879\u76eeID\u3002\r\n    private_key: \"-----BEGIN PRIVATE KEY-----\\nxxxxx\\n-----END PRIVATE\" # \u63cf\u8ff0\uff1a Google Cloud Vertex AI\u670d\u52a1\u8d26\u53f7\u7684\u79c1\u94a5\u3002\u683c\u5f0f\uff1a \u4e00\u4e2a JSON \u683c\u5f0f\u7684\u5b57\u7b26\u4e32\uff0c\u5305\u542b\u670d\u52a1\u8d26\u53f7\u7684\u79c1\u94a5\u4fe1\u606f\u3002\u83b7\u53d6\u65b9\u5f0f\uff1a \u5728 Google Cloud Console \u4e2d\u521b\u5efa\u670d\u52a1\u8d26\u53f7\uff0c\u751f\u6210JSON\u683c\u5f0f\u7684\u5bc6\u94a5\u6587\u4ef6\uff0c\u7136\u540e\u5c06\u5176\u5185\u5bb9\u8bbe\u7f6e\u4e3a\u6b64\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002\r\n    client_email: xxxxxxxxxx@xxxxxxx.gserviceaccount.com # \u63cf\u8ff0\uff1a Google Cloud Vertex AI \u670d\u52a1\u8d26\u53f7\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002\u683c\u5f0f\uff1a \u901a\u5e38\u662f\u5f62\u5982 \"service-account-name@project-id.iam.gserviceaccount.com\" \u7684\u5b57\u7b26\u4e32\u3002\u83b7\u53d6\u65b9\u5f0f\uff1a \u5728\u521b\u5efa\u670d\u52a1\u8d26\u53f7\u65f6\u751f\u6210\uff0c\u4e5f\u53ef\u4ee5\u5728 Google Cloud Console \u7684\"IAM\u4e0e\u7ba1\u7406\"\u90e8\u5206\u67e5\u770b\u670d\u52a1\u8d26\u53f7\u8be6\u60c5\u83b7\u5f97\u3002\r\n    model:\r\n      - gemini-1.5-pro\r\n      - gemini-1.5-flash\r\n      - claude-3-5-sonnet@20240620: claude-3-5-sonnet\r\n      - claude-3-opus@20240229: claude-3-opus\r\n      - claude-3-sonnet@20240229: claude-3-sonnet\r\n      - claude-3-haiku@20240307: claude-3-haiku\r\n    tools: true\r\n    notes: https:\/\/xxxxx.com\/ # \u53ef\u4ee5\u653e\u670d\u52a1\u5546\u7684\u7f51\u5740\uff0c\u5907\u6ce8\u4fe1\u606f\uff0c\u5b98\u65b9\u6587\u6863\uff0c\u9009\u586b\r\n\r\n  - provider: cloudflare\r\n    api: f42b3xxxxxxxxxxq4aoGAh # Cloudflare API Key\uff0c\u5fc5\u586b\r\n    cf_account_id: 8ec0xxxxxxxxxxxxe721 # Cloudflare Account ID\uff0c\u5fc5\u586b\r\n    model:\r\n      - '@cf\/meta\/llama-3.1-8b-instruct': llama-3.1-8b # \u91cd\u547d\u540d\u6a21\u578b\uff0c@cf\/meta\/llama-3.1-8b-instruct \u662f\u670d\u52a1\u5546\u7684\u539f\u59cb\u7684\u6a21\u578b\u540d\u79f0\uff0c\u5fc5\u987b\u4f7f\u7528\u5f15\u53f7\u5305\u88f9\u6a21\u578b\u540d\uff0c\u5426\u5219yaml\u8bed\u6cd5\u9519\u8bef\uff0cllama-3.1-8b \u662f\u91cd\u547d\u540d\u540e\u7684\u540d\u5b57\uff0c\u53ef\u4ee5\u4f7f\u7528\u7b80\u6d01\u7684\u540d\u5b57\u4ee3\u66ff\u539f\u6765\u590d\u6742\u7684\u540d\u79f0\uff0c\u9009\u586b\r\n      - '@cf\/meta\/llama-3.1-8b-instruct' # \u5fc5\u987b\u4f7f\u7528\u5f15\u53f7\u5305\u88f9\u6a21\u578b\u540d\uff0c\u5426\u5219yaml\u8bed\u6cd5\u9519\u8bef\r\n\r\n  - provider: other-provider\r\n    base_url: https:\/\/api.xxx.com\/v1\/messages\r\n    api: sk-bNnAOJyA-xQw_twAA\r\n    model:\r\n      - causallm-35b-beta2ep-q6k: causallm-35b\r\n      - anthropic\/claude-3-5-sonnet\r\n    tools: false\r\n    engine: <a href=\"https:\/\/www.kdjingpai.com\/en\/openrouterjichenga\/\">openrouter<\/a> # \u5f3a\u5236\u4f7f\u7528\u67d0\u4e2a\u6d88\u606f\u683c\u5f0f\uff0c\u76ee\u524d\u652f\u6301 gpt\uff0cclaude\uff0cgemini\uff0copenrouter \u539f\u751f\u683c\u5f0f\uff0c\u9009\u586b\r\n\r\napi_keys:\r\n  - api: sk-KjjI60Yf0JFWxfgRmXqFWyGtWUd9GZnmi3KlvowmRWpWpQRo # API Key\uff0c\u7528\u6237\u4f7f\u7528\u672c\u670d\u52a1\u9700\u8981 API key\uff0c\u5fc5\u586b\r\n    model: # \u8be5 API Key \u53ef\u4ee5\u4f7f\u7528\u7684\u6a21\u578b\uff0c\u5fc5\u586b\u3002\u9ed8\u8ba4\u5f00\u542f\u6e20\u9053\u7ea7\u8f6e\u8be2\u8d1f\u8f7d\u5747\u8861\uff0c\u6bcf\u6b21\u8bf7\u6c42\u6a21\u578b\u6309\u7167 model \u914d\u7f6e\u7684\u987a\u5e8f\u4f9d\u6b21\u8bf7\u6c42\u3002\u4e0e providers \u91cc\u9762\u539f\u59cb\u7684\u6e20\u9053\u987a\u5e8f\u65e0\u5173\u3002\u56e0\u6b64\u4f60\u53ef\u4ee5\u8bbe\u7f6e\u6bcf\u4e2a API key \u8bf7\u6c42\u987a\u5e8f\u4e0d\u4e00\u6837\u3002\r\n      - gpt-4o # \u53ef\u4ee5\u4f7f\u7528\u7684\u6a21\u578b\u540d\u79f0\uff0c\u53ef\u4ee5\u4f7f\u7528\u6240\u6709\u63d0\u4f9b\u5546\u63d0\u4f9b\u7684 gpt-4o \u6a21\u578b\r\n      - claude-3-5-sonnet # \u53ef\u4ee5\u4f7f\u7528\u7684\u6a21\u578b\u540d\u79f0\uff0c\u53ef\u4ee5\u4f7f\u7528\u6240\u6709\u63d0\u4f9b\u5546\u63d0\u4f9b\u7684 claude-3-5-sonnet \u6a21\u578b\r\n      - gemini\/* # \u53ef\u4ee5\u4f7f\u7528\u7684\u6a21\u578b\u540d\u79f0\uff0c\u4ec5\u53ef\u4ee5\u4f7f\u7528\u540d\u4e3a gemini \u63d0\u4f9b\u5546\u63d0\u4f9b\u7684\u6240\u6709\u6a21\u578b\uff0c\u5176\u4e2d gemini \u662f provider \u540d\u79f0\uff0c* \u4ee3\u8868\u6240\u6709\u6a21\u578b\r\n    role: admin\r\n\r\n  - api: sk-pkhf60Yf0JGyJxgRmXqFQyTgWUd9GZnmi3KlvowmRWpWqrhy\r\n    model:\r\n      - anthropic\/claude-3-5-sonnet # \u53ef\u4ee5\u4f7f\u7528\u7684\u6a21\u578b\u540d\u79f0\uff0c\u4ec5\u53ef\u4ee5\u4f7f\u7528\u540d\u4e3a anthropic \u63d0\u4f9b\u5546\u63d0\u4f9b\u7684 claude-3-5-sonnet \u6a21\u578b\u3002\u5176\u4ed6\u63d0\u4f9b\u5546\u7684 claude-3-5-sonnet \u6a21\u578b\u4e0d\u53ef\u4ee5\u4f7f\u7528\u3002\u8fd9\u79cd\u5199\u6cd5\u4e0d\u4f1a\u5339\u914d\u5230other-provider\u63d0\u4f9b\u7684\u540d\u4e3aanthropic\/claude-3-5-sonnet\u7684\u6a21\u578b\u3002\r\n      - &lt;anthropic\/claude-3-5-sonnet&gt; # \u901a\u8fc7\u5728\u6a21\u578b\u540d\u4e24\u4fa7\u52a0\u4e0a\u5c16\u62ec\u53f7\uff0c\u8fd9\u6837\u5c31\u4e0d\u4f1a\u53bb\u540d\u4e3aanthropic\u7684\u6e20\u9053\u4e0b\u53bb\u5bfb\u627eclaude-3-5-sonnet\u6a21\u578b\uff0c\u800c\u662f\u5c06\u6574\u4e2a anthropic\/claude-3-5-sonnet \u4f5c\u4e3a\u6a21\u578b\u540d\u79f0\u3002\u8fd9\u79cd\u5199\u6cd5\u53ef\u4ee5\u5339\u914d\u5230other-provider\u63d0\u4f9b\u7684\u540d\u4e3a anthropic\/claude-3-5-sonnet \u7684\u6a21\u578b\u3002\u4f46\u4e0d\u4f1a\u5339\u914d\u5230anthropic\u4e0b\u9762\u7684claude-3-5-sonnet\u6a21\u578b\u3002\r\n      - openai-test\/text-moderation-latest # \u5f53\u5f00\u542f\u6d88\u606f\u9053\u5fb7\u5ba1\u67e5\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528\u540d\u4e3a openai-test \u6e20\u9053\u4e0b\u7684 text-moderation-latest \u6a21\u578b\u8fdb\u884c\u9053\u5fb7\u5ba1\u67e5\u3002\r\n    preferences:\r\n      SCHEDULING_ALGORITHM: fixed_priority # \u5f53 SCHEDULING_ALGORITHM \u4e3a fixed_priority \u65f6\uff0c\u4f7f\u7528\u56fa\u5b9a\u4f18\u5148\u7ea7\u8c03\u5ea6\uff0c\u6c38\u8fdc\u6267\u884c\u7b2c\u4e00\u4e2a\u62e5\u6709\u8bf7\u6c42\u7684\u6a21\u578b\u7684\u6e20\u9053\u3002\u9ed8\u8ba4\u5f00\u542f\uff0cSCHEDULING_ALGORITHM \u7f3a\u7701\u503c\u4e3a fixed_priority\u3002SCHEDULING_ALGORITHM \u53ef\u9009\u503c\u6709\uff1afixed_priority\uff0cround_robin\uff0cweighted_round_robin, lottery, random\u3002\r\n      # \u5f53 SCHEDULING_ALGORITHM \u4e3a random \u65f6\uff0c\u4f7f\u7528\u968f\u673a\u8f6e\u8bad\u8d1f\u8f7d\u5747\u8861\uff0c\u968f\u673a\u8bf7\u6c42\u62e5\u6709\u8bf7\u6c42\u7684\u6a21\u578b\u7684\u6e20\u9053\u3002\r\n      # \u5f53 SCHEDULING_ALGORITHM \u4e3a round_robin \u65f6\uff0c\u4f7f\u7528\u8f6e\u8bad\u8d1f\u8f7d\u5747\u8861\uff0c\u6309\u7167\u987a\u5e8f\u8bf7\u6c42\u7528\u6237\u4f7f\u7528\u7684\u6a21\u578b\u7684\u6e20\u9053\u3002\r\n      AUTO_RETRY: true # \u662f\u5426\u81ea\u52a8\u91cd\u8bd5\uff0c\u81ea\u52a8\u91cd\u8bd5\u4e0b\u4e00\u4e2a\u63d0\u4f9b\u5546\uff0ctrue \u4e3a\u81ea\u52a8\u91cd\u8bd5\uff0cfalse \u4e3a\u4e0d\u81ea\u52a8\u91cd\u8bd5\uff0c\u9ed8\u8ba4\u4e3a true\r\n      RATE_LIMIT: 2\/min # \u652f\u6301\u9650\u6d41\uff0c\u6bcf\u5206\u949f\u6700\u591a\u8bf7\u6c42\u6b21\u6570\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\u6574\u6570\uff0c\u5982 2\/min\uff0c2 \u6b21\u6bcf\u5206\u949f\u30015\/hour\uff0c5 \u6b21\u6bcf\u5c0f\u65f6\u300110\/day\uff0c10 \u6b21\u6bcf\u5929\uff0c10\/month\uff0c10 \u6b21\u6bcf\u6708\uff0c10\/year\uff0c10 \u6b21\u6bcf\u5e74\u3002\u9ed8\u8ba460\/min\uff0c\u9009\u586b\r\n      ENABLE_MODERATION: true # \u662f\u5426\u5f00\u542f\u6d88\u606f\u9053\u5fb7\u5ba1\u67e5\uff0ctrue \u4e3a\u5f00\u542f\uff0cfalse \u4e3a\u4e0d\u5f00\u542f\uff0c\u9ed8\u8ba4\u4e3a false\uff0c\u5f53\u5f00\u542f\u540e\uff0c\u4f1a\u5bf9\u7528\u6237\u7684\u6d88\u606f\u8fdb\u884c\u9053\u5fb7\u5ba1\u67e5\uff0c\u5982\u679c\u53d1\u73b0\u4e0d\u5f53\u7684\u6d88\u606f\uff0c\u4f1a\u8fd4\u56de\u9519\u8bef\u4fe1\u606f\u3002\r\n\r\n  # \u6e20\u9053\u7ea7\u52a0\u6743\u8d1f\u8f7d\u5747\u8861\u914d\u7f6e\u793a\u4f8b\r\n  - api: sk-KjjI60Yd0JFWtxxxxxxxxxxxxxxwmRWpWpQRo\r\n    model:\r\n      - gcp1\/*: 5 # \u5192\u53f7\u540e\u9762\u5c31\u662f\u6743\u91cd\uff0c\u6743\u91cd\u4ec5\u652f\u6301\u6b63\u6574\u6570\u3002\r\n      - gcp2\/*: 3 # \u6570\u5b57\u7684\u5927\u5c0f\u4ee3\u8868\u6743\u91cd\uff0c\u6570\u5b57\u8d8a\u5927\uff0c\u8bf7\u6c42\u7684\u6982\u7387\u8d8a\u5927\u3002\r\n      - gcp3\/*: 2 # \u5728\u8be5\u793a\u4f8b\u4e2d\uff0c\u6240\u6709\u6e20\u9053\u52a0\u8d77\u6765\u4e00\u5171\u6709 10 \u4e2a\u6743\u91cd\uff0c\u53ca 10 \u4e2a\u8bf7\u6c42\u91cc\u9762\u6709 5 \u4e2a\u8bf7\u6c42\u4f1a\u8bf7\u6c42 gcp1\/* \u6a21\u578b\uff0c2 \u4e2a\u8bf7\u6c42\u4f1a\u8bf7\u6c42 gcp2\/* \u6a21\u578b\uff0c3 \u4e2a\u8bf7\u6c42\u4f1a\u8bf7\u6c42 gcp3\/* \u6a21\u578b\u3002\r\n\r\n    preferences:\r\n      SCHEDULING_ALGORITHM: weighted_round_robin # \u4ec5\u5f53 SCHEDULING_ALGORITHM \u4e3a weighted_round_robin \u5e76\u4e14\u4e0a\u9762\u7684\u6e20\u9053\u5982\u679c\u6709\u6743\u91cd\uff0c\u4f1a\u6309\u7167\u52a0\u6743\u540e\u7684\u987a\u5e8f\u8bf7\u6c42\u3002\u4f7f\u7528\u52a0\u6743\u8f6e\u8bad\u8d1f\u8f7d\u5747\u8861\uff0c\u6309\u7167\u6743\u91cd\u987a\u5e8f\u8bf7\u6c42\u62e5\u6709\u8bf7\u6c42\u7684\u6a21\u578b\u7684\u6e20\u9053\u3002\u5f53 SCHEDULING_ALGORITHM \u4e3a lottery \u65f6\uff0c\u4f7f\u7528\u62bd\u5956\u8f6e\u8bad\u8d1f\u8f7d\u5747\u8861\uff0c\u6309\u7167\u6743\u91cd\u968f\u673a\u8bf7\u6c42\u62e5\u6709\u8bf7\u6c42\u7684\u6a21\u578b\u7684\u6e20\u9053\u3002\u6ca1\u8bbe\u7f6e\u6743\u91cd\u7684\u6e20\u9053\u81ea\u52a8\u56de\u9000\u5230 round_robin \u8f6e\u8bad\u8d1f\u8f7d\u5747\u8861\u3002\r\n      AUTO_RETRY: true\r\n\r\npreferences: # \u5168\u5c40\u914d\u7f6e\r\n  model_timeout: # \u6a21\u578b\u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff0c\u9ed8\u8ba4 100 \u79d2\uff0c\u9009\u586b\r\n    gpt-4o: 10 # \u6a21\u578b gpt-4o \u7684\u8d85\u65f6\u65f6\u95f4\u4e3a 10 \u79d2,gpt-4o \u662f\u6a21\u578b\u540d\u79f0\uff0c\u5f53\u8bf7\u6c42 gpt-4o-2024-08-06 \u7b49\u6a21\u578b\u65f6\uff0c\u8d85\u65f6\u65f6\u95f4\u4e5f\u662f 10 \u79d2\r\n    claude-3-5-sonnet: 10 # \u6a21\u578b claude-3-5-sonnet \u7684\u8d85\u65f6\u65f6\u95f4\u4e3a 10 \u79d2\uff0c\u5f53\u8bf7\u6c42 claude-3-5-sonnet-20240620 \u7b49\u6a21\u578b\u65f6\uff0c\u8d85\u65f6\u65f6\u95f4\u4e5f\u662f 10 \u79d2\r\n    default: 10 # \u6a21\u578b\u6ca1\u6709\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\uff0c\u4f7f\u7528\u9ed8\u8ba4\u7684\u8d85\u65f6\u65f6\u95f4 10 \u79d2\uff0c\u5f53\u8bf7\u6c42\u7684\u4e0d\u5728 model_timeout \u91cc\u9762\u7684\u6a21\u578b\u65f6\uff0c\u8d85\u65f6\u65f6\u95f4\u9ed8\u8ba4\u662f 10 \u79d2\uff0c\u4e0d\u8bbe\u7f6e default\uff0cuni-api \u4f1a\u4f7f\u7528 \u73af\u5883\u53d8\u91cf TIMEOUT \u8bbe\u7f6e\u7684\u9ed8\u8ba4\u8d85\u65f6\u65f6\u95f4\uff0c\u9ed8\u8ba4\u8d85\u65f6\u65f6\u95f4\u662f 100 \u79d2\r\n    o1-mini: 30 # \u6a21\u578b o1-mini \u7684\u8d85\u65f6\u65f6\u95f4\u4e3a 30 \u79d2\uff0c\u5f53\u8bf7\u6c42\u540d\u5b57\u662f o1-mini \u5f00\u5934\u7684\u6a21\u578b\u65f6\uff0c\u8d85\u65f6\u65f6\u95f4\u662f 30 \u79d2\r\n    o1-preview: 100 # \u6a21\u578b o1-preview \u7684\u8d85\u65f6\u65f6\u95f4\u4e3a 100 \u79d2\uff0c\u5f53\u8bf7\u6c42\u540d\u5b57\u662f o1-preview \u5f00\u5934\u7684\u6a21\u578b\u65f6\uff0c\u8d85\u65f6\u65f6\u95f4\u662f 100 \u79d2\r\n  cooldown_period: 300 # \u6e20\u9053\u51b7\u5374\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff0c\u9ed8\u8ba4 300 \u79d2\uff0c\u9009\u586b\u3002\u5f53\u6a21\u578b\u8bf7\u6c42\u5931\u8d25\u65f6\uff0c\u4f1a\u81ea\u52a8\u5c06\u8be5\u6e20\u9053\u6392\u9664\u51b7\u5374\u4e00\u6bb5\u65f6\u95f4\uff0c\u4e0d\u518d\u8bf7\u6c42\u8be5\u6e20\u9053\uff0c\u51b7\u5374\u65f6\u95f4\u7ed3\u675f\u540e\uff0c\u4f1a\u81ea\u52a8\u5c06\u8be5\u6a21\u578b\u6062\u590d\uff0c\u76f4\u5230\u518d\u6b21\u8bf7\u6c42\u5931\u8d25\uff0c\u4f1a\u91cd\u65b0\u51b7\u5374\u3002\u5f53 cooldown_period \u8bbe\u7f6e\u4e3a 0 \u65f6\uff0c\u4e0d\u542f\u7528\u51b7\u5374\u673a\u5236\u3002\r\n<\/code><\/pre>\n<\/li>\n<li><strong>\u542f\u52a8\u5bb9\u5668<\/strong>\uff1a\n<pre><code>docker run -d --name uni-api -e CONFIG_URL=http:\/\/file_url\/api.yaml -e DISABLE_DATABASE=true yym68686\/uni-api:latest\r\n<\/code><\/pre>\n<\/li>\n<li><strong>\u8c03\u7528API<\/strong>\uff1a\n<pre><code>curl -X POST https:\/\/api.your.com\/v1\/chat\/completions -H \"Authorization: Bearer sk-Pkj60Yf8JFWxfgRmXQFWyGtWUddGZnmi3KlvowmRWpWpQxx\" -d '{\"model\": \"gpt-4o\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]}'\r\n<\/code><\/pre>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u65e0\u524d\u7aef\uff0c\u7eaf\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e API \u6e20\u9053\u3002\u53ea\u8981\u5199\u4e00\u4e2a\u6587\u4ef6\u5c31\u80fd\u8fd0\u884c\u8d77\u4e00\u4e2a\u5c5e\u4e8e\u81ea\u5df1\u7684 API \u7ad9\uff0c\u6587\u6863\u6709\u8be6\u7ec6\u7684\u914d\u7f6e\u6307\u5357\uff0c\u5c0f\u767d\u53cb\u597d\u3002 uni-api \u662f\u4e00\u4e2a\u7edf\u4e00\u7ba1\u7406\u5927\u6a21\u578bAPI\u7684\u9879\u76ee\uff0c\u5141\u8bb8\u901a\u8fc7\u4e00\u4e2a\u7edf\u4e00\u7684API\u63a5\u53e3\u8c03\u7528\u591a\u4e2a\u540e\u7aef\u670d\u52a1\uff0c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3aOpen&#8230;<\/p>\n","protected":false},"author":1,"featured_media":61182,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[230],"class_list":["post-8044","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tool","tag-aikaiyuanxiangmu"],"_links":{"self":[{"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/posts\/8044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/comments?post=8044"}],"version-history":[{"count":0,"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/posts\/8044\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/media\/61182"}],"wp:attachment":[{"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/media?parent=8044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/categories?post=8044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/en\/wp-json\/wp\/v2\/tags?post=8044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}