{"id":1302,"date":"2024-05-02T05:32:25","date_gmt":"2024-05-02T05:32:25","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1302"},"modified":"2024-05-02T05:35:50","modified_gmt":"2024-05-02T05:35:50","slug":"jinghuabijiwuendaxhuggingfaceshiyonggradiogoujianshengchengshiaiyingyong","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/jinghuabijiwuendaxhuggingfaceshiyonggradiogoujianshengchengshiaiyingyong.html","title":{"rendered":"\u7cbe\u534e\u7b14\u8bb0 &#8211; \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b"},"content":{"rendered":"<p>\u4f60\u662f\u5426\u6709\u8fc7\u5f00\u53d1\u4e00\u4e2aAI\u5e94\u7528\u7684\u60f3\u6cd5\uff0c\u5e76\u4e14\u8feb\u4e0d\u53ca\u5f85\u5730\u60f3\u8981\u9a8c\u8bc1\u5176\u662f\u5426\u53ef\u884c\u5462\uff1f<\/p>\n<p>\u4f60\u53ef\u80fd\u5df2\u7ecf\u5199\u597d\u4e86AI\u90e8\u5206\u7684\u4ee3\u7801\u903b\u8f91\uff0c\u4f46\u662f\u8fd8\u9700\u8981\u4e00\u4e2a\u80fd\u591f\u5411\u4ed6\u4eba\u5c55\u793a\u4f60\u7684\u521b\u610f\uff0c\u5e76\u8ba9\u4ed6\u4eec\u80fd\u591f\u4eb2\u8eab\u4f53\u9a8c\u7684\u7528\u6237\u754c\u9762\u3002\u8fd9\u6837\uff0c\u4f60\u624d\u80fd\u66f4\u6709\u6548\u5730\u9a8c\u8bc1\u4f60\u7684\u60f3\u6cd5\uff0c\u5e76\u6536\u96c6\u7528\u6237\u7684\u53cd\u9988\u52a0\u4ee5\u6539\u8fdb\uff0c\u4ece\u800c\u63d0\u5347\u4f60\u7684\u7cfb\u7edf\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/70a9a4b52c30537b9385cc907a0db47a.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u5982\u679c\u4f60\u6b63\u5728\u5bfb\u627e\u8fd9\u6837\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u90a3\u4e48<code>Gradio<\/code>\u5c31\u662f\u4f60\u7684\u7406\u60f3\u9009\u62e9\u3002<\/p>\n<p><strong>Gradio\u662f\u4e00\u4e2a\u53ef\u4ee5\u8ba9\u4f60\u8f7b\u677e\u3001\u65b9\u4fbf\u5730\u4f7f\u7528Python\u4ee3\u7801\u6784\u5efa\u4e00\u4e2a\u53cb\u597dWeb\u4ea4\u4e92\u754c\u9762\u7684UI\u6846\u67b6\u3002\u5b83\u53ef\u4ee5\u652f\u6301\u5404\u79cd\u6570\u636e\u7c7b\u578b\u7684\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u8fd8\u53ef\u4ee5\u65b9\u4fbf\u5730\u4e0eHugging Face\u4e0a\u7684\u5404\u79cd\u5f00\u6e90\u6a21\u578b\u96c6\u6210<\/strong>\u3002<\/p>\n<p>\u5728\u8fd9\u95e8\u8bfe\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u5411\u4f60\u5c55\u793a\u5982\u4f55\u901a\u8fc7Gradio\uff0c\u4ec5\u7528\u51e0\u884c\u4ee3\u7801\u642d\u5efa\u4e00\u4e2a\u4ea4\u4e92\u7a0b\u5e8f\uff0c\u5e76\u5229\u7528Hugging Face\u4e0a\u63d0\u4f9b\u7684\u4e00\u4e9b\u73b0\u6709\u6a21\u578b\uff0c\u5b8c\u6210\u4ee5\u4e0b\u4e94\u4e2a\u6709\u8da3\u7684\u4efb\u52a1\uff1a<\/p>\n<ul>\n<li><strong>\u751f\u6210\u6587\u672c\u6458\u8981<\/strong>\uff1a\u4ece\u4e00\u7bc7\u957f\u6587\u672c\u4e2d\u62bd\u53d6\u51fa\u6838\u5fc3\u4fe1\u606f\uff0c\u751f\u6210\u4e00\u4e2a\u7b80\u6d01\u3001\u7cbe\u786e\u7684\u6458\u8981\u3002<\/li>\n<li><strong>\u547d\u540d\u5b9e\u4f53\u8bc6\u522b<\/strong>\uff1a\u4ece\u6587\u672c\u4e2d\u8bc6\u522b\u51fa\u4eba\u540d\u3001\u5730\u540d\u3001\u7ec4\u7ec7\u540d\u7b49\u5b9e\u4f53\uff0c\u5e76\u7ed9\u5b83\u4eec\u5206\u7c7b\u3002<\/li>\n<li><strong>\u8bc6\u522b\u56fe\u50cf\u5185\u5bb9<\/strong>\uff1a\u4ece\u4e00\u5f20\u56fe\u7247\u4e2d\u8bc6\u522b\u51fa\u7269\u4f53\u3001\u573a\u666f\u3001\u52a8\u4f5c\u7b49\u5185\u5bb9\uff0c\u5e76\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u51fa\u6765\u3002<\/li>\n<li><strong>\u6587\u672c\u751f\u6210\u56fe\u50cf<\/strong>\uff1a\u6839\u636e\u4e00\u6bb5\u63cf\u8ff0\u6027\u7684\u6587\u672c\uff0c\u751f\u6210\u4e00\u5f20\u4e0e\u4e4b\u76f8\u7b26\u5408\u7684\u56fe\u7247\u3002<\/li>\n<li><strong>\u642d\u5efa\u57fa\u4e8eLLM\u7684\u804a\u5929\u673a\u5668\u4eba<\/strong>\uff1a\u521b\u5efa\u4e00\u4e2a\u80fd\u591f\u4e0e\u7528\u6237\u8fdb\u884c\u81ea\u7136\u5bf9\u8bdd\u7684\u804a\u5929\u673a\u5668\u4eba\uff0c\u5e76\u6839\u636e\u7528\u6237\u63d0\u4f9b\u7684\u4fe1\u606f\u751f\u6210\u4e2a\u6027\u5316\u7684\u56de\u7b54\u3002<\/li>\n<\/ul>\n<p>\u5982\u679c\u4f60\u5bf9\u8fd9\u4e9b\u4efb\u52a1\u611f\u5174\u8da3\uff0c\u90a3\u4e48\u8bf7\u7ee7\u7eed\u9605\u8bfb\u672c\u8bfe\u7a0b\uff0c\u4e00\u8d77\u63a2\u7d22Gradio\u548cHugging Face\u7684\u9b45\u529b\u5427\uff01<\/p>\n<h1 data-id=\"heading-0\">NLP\u4efb\u52a1\u63a5\u53e3<\/h1>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/88e11e3eeaa5b5e7871556bff3057b8c.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u5728<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FL3yj7suL7Z_opEsk9lqeMA\" target=\"_blank\" title=\"https:\/\/mp.weixin.qq.com\/s\/L3yj7suL7Z_opEsk9lqeMA\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u524d\u9762\u7684\u8bfe\u7a0b<\/a>\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u7684\u90fd\u662fChatGPT\u4e00\u7c7b\u7684\u901a\u7528\u5927\u578b\u8bed\u8a00\u6a21\u578b\uff0c\u4f46\u5bf9\u4e8e\u67d0\u4e9b\u7279\u5b9a\u4efb\u52a1\uff08\u5982\u751f\u6210\u6587\u672c\u6458\u8981\uff09\u6765\u8bf4\uff0c<strong>\u4f7f\u7528\u4e00\u4e2a\u4e13\u95e8\u9488\u5bf9\u8be5\u4efb\u52a1\u8bbe\u8ba1\u7684\u5c0f\u578b\u4e13\u5bb6\u6a21\u578b\uff08Small specialist model\uff09\uff0c\u4e5f\u53ef\u4ee5\u8868\u73b0\u5f97\u4e0e\u901a\u7528\u5927\u578b\u8bed\u8a00\u6a21\u578b\u4e00\u6837\u51fa\u8272<\/strong>\u3002<\/p>\n<p>\u53e6\u4e00\u65b9\u9762\uff0c<strong>\u5c0f\u578b\u4e13\u5bb6\u6a21\u578b\u53ef\u80fd\u8fd8\u66f4\u4fbf\u5b9c\u5730\u8fd0\u884c\uff0c\u4ee5\u53ca\u66f4\u5feb\u5730\u54cd\u5e94\u7528\u6237<\/strong>\u3002<\/p>\n<p>\u5728\u5f00\u59cb\u6211\u4eec\u7684\u4efb\u52a1\u4e4b\u524d\uff0c\u6211\u4eec\u4ecd\u9700\u5b8c\u6210\u4ee5\u4e0b\u4e24\u4e2a\u524d\u7f6e\u6b65\u9aa4\uff1a<\/p>\n<h3 data-id=\"heading-1\">\u52a0\u8f7d API \u5bc6\u94a5<\/h3>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">import<\/span> os<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-comment\"># \u9996\u6b21\u8fd0\u884c\uff0c\u9700\u6267\u884c\u4ee5\u4e0b\u6307\u4ee4\uff1apip install python-dotenv<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">from<\/span> dotenv <span class=\"hljs-keyword\">import<\/span> load_dotenv, find_dotenv<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">load_dotenv(find_dotenv()) <span class=\"hljs-comment\"># \u8bfb\u53d6\u672c\u5730.env\u6587\u4ef6<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">hf_api_key = os.environ[<span class=\"hljs-string\">'HF_API_KEY'<\/span>]<\/span>\n<\/code><\/pre>\n<p><code>HF_API_KEY<\/code> \u6307\u7684\u662f Hugging Face API \u7684\u8bbf\u95ee\u5bc6\u94a5\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u6b65\u9aa4\u83b7\u53d6\uff1a<\/p>\n<ol>\n<li>\u8bbf\u95ee Hugging Face \u5b98\u7f51\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fhuggingface.co%2F\" target=\"_blank\" title=\"https:\/\/huggingface.co\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">huggingface.co\/<\/a><\/li>\n<li>\u9f20\u6807\u79fb\u81f3\u53f3\u4e0a\u89d2\u7528\u6237\u540d-\u70b9\u51fb\u201cSettings\u201d\u3002<\/li>\n<li>\u70b9\u51fb\u201cAPI tokens\u201d\u9009\u9879\u3002<\/li>\n<li>\u70b9\u51fb\u201cNew token\u201d\u6309\u94ae\u3002<\/li>\n<li>\u8f93\u5165\u81ea\u5b9a\u4e49\u7684 API token \u540d\u79f0\u3002<\/li>\n<li>\u70b9\u51fb\u201cCreate new API token\u201d\uff0c\u4ee5\u751f\u6210\u4e00\u4e2a\u65b0\u7684 API token\u3002<\/li>\n<li>\u590d\u5236 API token \u5e76\u4fdd\u5b58\u5230.env\u6587\u4ef6\u3002<\/li>\n<\/ol>\n<h3 data-id=\"heading-2\">\u7f16\u5199\u8f85\u52a9\u51fd\u6570<\/h3>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">import<\/span> requests, json<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">get_completion<\/span>(<span class=\"hljs-params\">inputs, parameters=<span class=\"hljs-literal\">None<\/span>,ENDPOINT_URL=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    headers = {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">      <span class=\"hljs-string\">\"Authorization\"<\/span>: <span class=\"hljs-string\">f\"Bearer <span class=\"hljs-subst\">{hf_api_key}<\/span>\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">      <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    }<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    data = { <span class=\"hljs-string\">\"inputs\"<\/span>: inputs }<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">    <span class=\"hljs-keyword\">if<\/span> parameters <span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">None<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">        data.update({<span class=\"hljs-string\">\"parameters\"<\/span>: parameters})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    response = requests.request(<span class=\"hljs-string\">\"POST\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">                                ENDPOINT_URL, headers=headers,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">                                data=json.dumps(data)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">                               )<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    <span class=\"hljs-keyword\">return<\/span> json.loads(response.content.decode(<span class=\"hljs-string\">\"utf-8\"<\/span>))<\/span>\n<\/code><\/pre>\n<p>\u8be5\u8f85\u52a9\u51fd\u6570\u662f\u7528\u4e8e\u4ee5API\u8bf7\u6c42\u7684\u65b9\u5f0f\u8bbf\u95ee\u6307\u5b9a\u7aef\u70b9\u8fdb\u884c\u63a8\u7406\uff0c\u4ee5\u5b8c\u6210\u7279\u5b9a\u4efb\u52a1\u7684\u3002<\/p>\n<p><strong>Hugging Face \u63d0\u4f9b\u4e86\u4e00\u4e2a<code>Inference API<\/code>\uff0c\u5141\u8bb8\u901a\u8fc7\u7b80\u5355\u7684 HTTP \u8bf7\u6c42\uff0c\u514d\u8d39\u6d4b\u8bd5\u548c\u8bc4\u4f30\u8d85\u8fc7 80,000 \u4e2a\u53ef\u516c\u5f00\u8bbf\u95ee\u7684\u673a\u5668\u5b66\u4e60\u6a21\u578b\u6216\u6211\u4eec\u81ea\u5df1\u7684\u79c1\u6709\u6a21\u578b\uff0c\u4f46\u6709\u901f\u7387\u9650\u5236<\/strong>\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">ENDPOINT_URL<\/span> = https:\/\/api-inference.huggingface.co\/models\/&lt;MODEL_ID&gt;<\/span>\n<\/code><\/pre>\n<p><code>&lt;MODEL_ID&gt;<\/code> \u8868\u793a\u6211\u4eec\u8981\u8fd0\u884c\u7684\u6a21\u578b\uff0c\u53ef\u4ee5\u5230 Hugging Face \u7684\u6a21\u578b\u4e2d\u5fc3\u81ea\u7531\u6311\u9009\u9002\u5408\u6211\u4eec\u5e94\u7528\u4e1a\u52a1\u573a\u666f\u7684\u6a21\u578b\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/f580465c8d5254828bdd0120d0852ef8.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u9664\u4e86\u5c0f\u578b\u4e13\u5bb6\u6a21\u578b\u5916\uff0c\u53e6\u5916\u4e00\u4e2a\u964d\u4f4e\u6210\u672c\u5e76\u63d0\u9ad8\u901f\u5ea6\u7684\u65b9\u6cd5\uff0c\u5c31\u662f<strong>\u57fa\u4e8e\u5927\u578b\u6a21\u578b\u6765\u8bad\u7ec3\u4e00\u4e2a\u6027\u80fd\u975e\u5e38\u76f8\u4f3c\u7684\u8f83\u5c0f\u6a21\u578b<\/strong>\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u79f0\u4e3a\u300c\u84b8\u998f\uff08Distillation\uff09\u300d\u3002<\/p>\n<p>\u6bd4\u5982\u6211\u4eec\u63a5\u4e0b\u6765\u5c06\u4f7f\u7528\u7684 <code>shleifer\/distilbart-cnn-12-6<\/code> \uff0c\u5c31\u662f\u4e00\u4e2a\u6765\u81ea\u4e8e <code>facebook\/bart-large-cnn<\/code> \u7684\u62e5\u6709 306M \u53c2\u6570\u7684\u84b8\u998f\u6a21\u578b\u3002<\/p>\n<p><code>bart-large-cnn<\/code>\u662f\u6587\u672c\u6458\u8981\u9886\u57df\u6700\u5148\u8fdb\u7684\u6a21\u578b\u4e4b\u4e00\uff0c\u7531 Facebook \u8bad\u7ec3\u800c\u6210\u3002<\/p>\n<h2 data-id=\"heading-3\">\u751f\u6210\u6587\u672c\u6458\u8981<\/h2>\n<p>\u5728\u8fd9\u4e00\u90e8\u5206\u91cc\uff0c\u6211\u4eec\u5c06\u4ece\u4e00\u7bc7\u957f\u6587\u672c\u4e2d\u62bd\u53d6\u51fa\u6838\u5fc3\u4fe1\u606f\uff0c\u751f\u6210\u4e00\u4e2a\u7b80\u6d01\u3001\u7cbe\u786e\u7684\u6458\u8981\u3002<\/p>\n<h4 data-id=\"heading-4\">\u6b65\u9aa41\uff1a\u5b9a\u4e49 summarise \u7684\u51fd\u6570\uff0c\u63a5\u53d7\u8f93\u5165\uff0c\u8c03\u7528 getCompletion \u51fd\u6570\uff0c\u5e76\u8fd4\u56de\u6458\u8981\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">API_URL = <span class=\"hljs-string\">\"https:\/\/api-inference.huggingface.co\/models\/sshleifer\/distilbart-cnn-12-6\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">summarize<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">input<\/span><\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    output = get_completion(<span class=\"hljs-built_in\">input<\/span>, parameters = <span class=\"hljs-literal\">None<\/span>, ENDPOINT_URL = API_URL)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-keyword\">return<\/span> output[<span class=\"hljs-number\">0<\/span>][<span class=\"hljs-string\">'summary_text'<\/span>]<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-5\">\u6b65\u9aa42\uff1a\u4f7f\u7528 Gradio \u7684 interface \u51fd\u6570\uff0c\u4f20\u5165 summarise \u51fd\u6570 \uff0c\u5e76\u5c06\u5176\u8f93\u5165\u548c\u8f93\u51fa\u5747\u8bbe\u7f6e\u4e3a\u6587\u672c\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-comment\"># \u9996\u6b21\u8fd0\u884c\uff0c\u9700\u6267\u884c\u4ee5\u4e0b\u6307\u4ee4\uff1apip install gradio<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">import gradio as gr<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-attr\">demo<\/span> = gr.Interface(fn=summarize, inputs=<span class=\"hljs-string\">\"text\"<\/span>, outputs=<span class=\"hljs-string\">\"text\"<\/span>)<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-6\">\u6b65\u9aa43\uff1a\u8c03\u7528 demo.launch \u521b\u5efa\u7528\u6237\u754c\u9762\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">demo<span class=\"hljs-selector-class\">.launch<\/span>()<\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/fec83828c2b2d87817cb6e123c15e80a.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-7\">\uff08\u53ef\u9009\uff09\u6b65\u9aa44\uff1a\u8fdb\u4e00\u6b65\u4f18\u5316\u7528\u6237\u754c\u9762\uff0c\u5982\u6dfb\u52a0\u6807\u7b7e\u3001\u5236\u5b9a\u884c\u6570\u3001\u589e\u52a0\u6807\u9898\u548c\u63cf\u8ff0\u7b49\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">demo<\/span> = gr.Interface(fn=summarize, <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">                    <span class=\"hljs-attr\">inputs<\/span>=[gr.Textbox(label=<span class=\"hljs-string\">\"Text to summarize\"<\/span>, lines=<span class=\"hljs-number\">6<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">                    <span class=\"hljs-attr\">outputs<\/span>=[gr.Textbox(label=<span class=\"hljs-string\">\"Result\"<\/span>, lines=<span class=\"hljs-number\">3<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">                    <span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"Text summarization with distilbart-cnn\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">                    <span class=\"hljs-attr\">description<\/span>=<span class=\"hljs-string\">\"Summarize any text using the `shleifer\/distilbart-cnn-12-6` model under the hood!\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">                   )<\/span>\n<\/code><\/pre>\n<p>\u4f18\u5316\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/57d32962c7f19ea3b2694c7bb53f11e8.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-8\">\u547d\u540d\u5b9e\u4f53\u8bc6\u522b<\/h2>\n<p>\u5728\u8fd9\u4e00\u90e8\u5206\u91cc\uff0c\u6211\u4eec\u5c06\u4ece\u6587\u672c\u4e2d\u8bc6\u522b\u51fa\u4eba\u540d\u3001\u5730\u540d\u3001\u7ec4\u7ec7\u540d\u7b49\u5b9e\u4f53\uff0c\u5e76\u7ed9\u5b83\u4eec\u5206\u7c7b\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/3a92720695a28a7a0da309d02119d918.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u8fd9\u91cc\u4f7f\u7528\u5230\u7684\u662f <code>dslim\/bert-base-NER<\/code> \u6a21\u578b\uff0c\u8fd9\u662f\u4e00\u4e2a\u9488\u5bf9 NER (Named Entity Recognition\uff0c\u547d\u540d\u5b9e\u4f53\u8bc6\u522b) \u4efb\u52a1\u5fae\u8c03\u7684\u5305\u542b 108M \u53c2\u6570 \u7684 <code>BERT<\/code> \u6a21\u578b\u3002<\/p>\n<p><strong>BERT \u6a21\u578b\u662f\u4e00\u4e2a\u7528\u4e8e\u81ea\u7136\u8bed\u8a00\u5904\u7406\u7684\u673a\u5668\u5b66\u4e60\u6a21\u578b\uff0c\u8be5\u6a21\u578b\u5728\u89e3\u6790\u4e00\u6bb5\u6587\u672c\u65f6\uff0c\u53ef\u4ee5\u8bc6\u522b\u51fa\u6587\u672c\u4e2d\u5305\u542b\u7684\u4eba\u540d\u3001\u7ec4\u7ec7\u540d\u3001\u5730\u540d\u7b49\u7279\u5b9a\u5b9e\u4f53\u3002<\/strong><\/p>\n<p>\u6bd4\u5982\uff0c\u5f53\u6211\u4eec\u8fd0\u884c\u4ee5\u4e0b\u4ee3\u7801\u540e\uff0c\u5b83\u5c31\u4f1a\u8f93\u51fa\u4e00\u4e2a\u5305\u542b\u591a\u4e2a\u5b57\u5178\u7684\u5217\u8868\uff0c\u6bcf\u4e2a\u5b57\u5178\u90fd\u5305\u542b\u4e00\u4e2a\u5b9e\u4f53\u7684\u4fe1\u606f\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">API_URL<\/span> = <span class=\"hljs-string\">\"https:\/\/api-inference.huggingface.co\/models\/dslim\/bert-base-NER\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-attr\">text<\/span> = <span class=\"hljs-string\">\"My name is Andrew, I'm building DeepLearningAI and I live in California\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">get_completion(text, <span class=\"hljs-attr\">parameters<\/span>=None, ENDPOINT_URL= API_URL)<\/span>\n<\/code><\/pre>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">css<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-css code-block-extension-codeShowNum\" lang=\"css\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-selector-attr\">[{\t<span class=\"hljs-string\">'entity_group'<\/span>: <span class=\"hljs-string\">'PER'<\/span>,\t<span class=\"hljs-string\">'score'<\/span>: 0.9990624785423279,\t<span class=\"hljs-string\">'word'<\/span>: <span class=\"hljs-string\">'Andrew'<\/span>,\t<span class=\"hljs-string\">'start'<\/span>: 11,\t<span class=\"hljs-string\">'end'<\/span>: 17}, {\t<span class=\"hljs-string\">'entity_group'<\/span>: <span class=\"hljs-string\">'ORG'<\/span>,\t<span class=\"hljs-string\">'score'<\/span>: 0.896050214767456,\t<span class=\"hljs-string\">'word'<\/span>: <span class=\"hljs-string\">'DeepLearningAI'<\/span>,\t<span class=\"hljs-string\">'start'<\/span>: 32,\t<span class=\"hljs-string\">'end'<\/span>: 46}, {\t<span class=\"hljs-string\">'entity_group'<\/span>: <span class=\"hljs-string\">'LOC'<\/span>,\t<span class=\"hljs-string\">'score'<\/span>: 0.999692440032959,\t<span class=\"hljs-string\">'word'<\/span>: <span class=\"hljs-string\">'California'<\/span>,\t<span class=\"hljs-string\">'start'<\/span>: 61,\t<span class=\"hljs-string\">'end'<\/span>: 71}]<\/span><\/span>\n<\/code><\/pre>\n<p>\u5176\u4e2d\uff0centity_group\u952e\u8868\u793a\u7684\u542b\u4e49\u5206\u522b\u662f\uff1a<\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>\u952e\u503c<\/th><th>\u542b\u4e49<\/th><\/tr><\/thead><tbody><tr><td>PER<\/td><td>\u4eba\u7269<\/td><\/tr><tr><td>ORG<\/td><td>\u7ec4\u7ec7\u673a\u6784<\/td><\/tr><tr><td>LOC<\/td><td>\u4f4d\u7f6e<\/td><\/tr><\/tbody><\/table>\n<p>\u6211\u4eec\u53ef\u4ee5\u7528 Gradio \u8ba9\u8f93\u51fa\u66f4\u52a0\u76f4\u89c2\u6613\u61c2\uff1a<\/p>\n<h4 data-id=\"heading-9\">\u6b65\u9aa41\uff1a\u5b9a\u4e49 ner \u7684\u51fd\u6570\uff0c\u63a5\u53d7\u8f93\u5165\uff0c\u8c03\u7528 getCompletion \u51fd\u6570\uff0c\u5e76\u8fd4\u56de\u5b9e\u4f53\u5217\u8868\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">lua<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-lua code-block-extension-codeShowNum\" lang=\"lua\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def ner(<span class=\"hljs-built_in\">input<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    <span class=\"hljs-built_in\">output<\/span> = get_completion(<span class=\"hljs-built_in\">input<\/span>, parameters=None, ENDPOINT_URL=API_URL)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-keyword\">for<\/span> entity <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-built_in\">output<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">        entity[<span class=\"hljs-string\">\"entity\"<\/span>] = entity[<span class=\"hljs-string\">'entity_group'<\/span>]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-keyword\">return<\/span> {<span class=\"hljs-string\">\"text\"<\/span>: <span class=\"hljs-built_in\">input<\/span>, <span class=\"hljs-string\">\"entities\"<\/span>: <span class=\"hljs-built_in\">output<\/span>}<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-10\">\u6b65\u9aa42\uff1a\u4f7f\u7528 Gradio \u7684 interface \u51fd\u6570\uff0c\u4f20\u5165 ner \u51fd\u6570 \uff0c\u5c06\u8f93\u5165\u8bbe\u7f6e\u4e3a\u6587\u672c\uff0c\u8f93\u51fa\u8bbe\u7f6e\u4e3a\u9ad8\u4eae\u6587\u672c\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">demo<\/span> = gr.Interface(fn=ner,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">                    <span class=\"hljs-attr\">inputs<\/span>=[gr.Textbox(label=<span class=\"hljs-string\">\"Text to find entities\"<\/span>, lines=<span class=\"hljs-number\">2<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">                    <span class=\"hljs-attr\">outputs<\/span>=[gr.HighlightedText(label=<span class=\"hljs-string\">\"Text with entities\"<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">                    <span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"NER with dslim\/bert-base-NER\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">                    <span class=\"hljs-attr\">description<\/span>=<span class=\"hljs-string\">\"Find entities using the `dslim\/bert-base-NER` model under the hood!\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">                    <span class=\"hljs-attr\">allow_flagging<\/span>=<span class=\"hljs-string\">\"never\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">                    <span class=\"hljs-attr\">examples<\/span>=[<span class=\"hljs-string\">\"My name is Andrew and I live in California\"<\/span>, <span class=\"hljs-string\">\"My name is Poli and work at HuggingFace\"<\/span>])<\/span>\n<\/code><\/pre>\n<p><code>HighlightedText<\/code> \u7ec4\u4ef6\u7684\u4f5c\u7528\u662f\u63a5\u6536\u5e76\u9ad8\u4eae\u663e\u793aNER\u6a21\u578b\u8f93\u51fa\u7684\u7684\u5b9e\u4f53\u3002<\/p>\n<p><code>examples<\/code> \u53c2\u6570\u7528\u4e8e\u63d0\u4f9b\u793a\u4f8b\uff0c\u5e2e\u52a9\u7528\u6237\u901a\u5feb\u901f\u4e86\u89e3\u7a0b\u5e8f\u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002<\/p>\n<h4 data-id=\"heading-11\">\u6b65\u9aa43\uff1a\u8c03\u7528 demo.launch \u521b\u5efa\u7528\u6237\u754c\u9762\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">demo<span class=\"hljs-selector-class\">.launch<\/span>()<\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/ab9c3f6b1b3ff679395ac9d5710023b0.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/b4786856565e60652dc371935990c1fa.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-12\">\uff08\u53ef\u9009\uff09\u6b65\u9aa44\uff1a\u5c06\u88ab\u62c6\u5206\u6210\u591a\u4e2a\u6807\u8bb0\u7684\u5b57\u7b26\u91cd\u7ec4\u4e3a\u4e00\u4e2a\u5b8c\u6574\u7684\u5355\u8bcd\u3002<\/h4>\n<p>\u540c\u6837\u5728<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2F7MCc8QFihLSW5mJ9NyHZ3A\" target=\"_blank\" title=\"https:\/\/mp.weixin.qq.com\/s\/7MCc8QFihLSW5mJ9NyHZ3A\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u524d\u9762\u7684\u8bfe\u7a0b<\/a>\u4e2d\u6211\u4eec\u6709\u4ecb\u7ecd\u8fc7\uff0c<strong>LLM\u7684\u5904\u7406\u5355\u5143\u4e0d\u662f\u4e00\u4e2a\u4e2a\u300c\u5355\u8bcd\u300d\uff0c\u800c\u662f\u4e00\u4e2a\u4e2a\u300c\u6807\u8bb0\uff08Token\uff09\u300d\u3002\u5b83\u4f1a\u63a5\u6536\u4e00\u7cfb\u5217\u7684\u5b57\u7b26\uff0c\u5e76\u5c06\u5b57\u7b26\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u5f62\u6210\u4ee3\u8868\u5e38\u89c1\u5b57\u7b26\u5e8f\u5217\u7684\u6807\u8bb0\u3002\u6bcf\u4e2a\u6807\u8bb0\u53ef\u80fd\u5bf9\u5e94\u4e00\u4e2a\u5355\u8bcd\uff0c\u6216\u8005\u7a7a\u683c\uff0c\u6216\u8005\u6807\u70b9\u7b26\u53f7\u3002<\/strong><\/p>\n<p>\u5f53\u6211\u4eec\u9009\u7528\u53e6\u5916\u4e00\u4e2a\u793a\u4f8b\u65f6\u53ef\u4ee5\u770b\u5230\uff0cHuggingFace\u8fd9\u4e2a\u5355\u8bcd\u4f1a\u88ab\u5206\u89e3\u4e3a\u591a\u4e2a\u5757\uff0c\u4e5f\u5373\u591a\u4e2a\u6807\u8bb0\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/58047ccd86401b57368a2dcbc940d8c8.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u4f46\u662f\uff0c\u7531\u4e8e\u6211\u4eec\u53ef\u4ee5\u4ece\u5b9e\u4f53\u6807\u7b7e\u7684\u5f00\u5934\u5b57\u6bcd\u5224\u65ad\u5355\u8bcd\u7684\u5f00\u5934\u548c\u4e2d\u95f4\u90e8\u5206\uff1a<\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>\u5b57\u6bcd<\/th><th>\u542b\u4e49<\/th><\/tr><\/thead><tbody><tr><td>B<\/td><td>\u5f00\u59cb\u6807\u8bb0<\/td><\/tr><tr><td>I<\/td><td>\u4e2d\u95f4\u6807\u8bb0<\/td><\/tr><\/tbody><\/table>\n<p>\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2a <code>merge_tokens<\/code> \u51fd\u6570\uff0c\u8ba9\u6bcf\u4e2a\u6807\u8bb0\u5728\u53ef\u89c6\u5316\u65f6\u5408\u5e76\u4e3a\u4e00\u4e2a\u5b8c\u6574\u5355\u8bcd\u663e\u793a\uff0c\u539f\u7406\u5176\u5b9e\u5c31\u662f\u68c0\u67e5\u6807\u7b7e\u7684\u5f00\u5934\u5b57\u6bcd\uff0c\u5e76\u8fdb\u884c\u5408\u5e76\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">less<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-less code-block-extension-codeShowNum\" lang=\"less\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-selector-tag\">def<\/span> <span class=\"hljs-selector-tag\">merge_tokens<\/span>(tokens):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    <span class=\"hljs-selector-tag\">merged_tokens<\/span> = <span class=\"hljs-selector-attr\">[]<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-selector-tag\">for<\/span> <span class=\"hljs-selector-tag\">token<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">tokens<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">        <span class=\"hljs-selector-tag\">if<\/span> <span class=\"hljs-selector-tag\">merged_tokens<\/span> <span class=\"hljs-selector-tag\">and<\/span> <span class=\"hljs-selector-tag\">token<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'entity'<\/span>]<\/span><span class=\"hljs-selector-class\">.startswith<\/span>(<span class=\"hljs-string\">'I-'<\/span>) <span class=\"hljs-selector-tag\">and<\/span> <span class=\"hljs-selector-tag\">merged_tokens<\/span><span class=\"hljs-selector-attr\">[-1]<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'entity'<\/span>]<\/span><span class=\"hljs-selector-class\">.endswith<\/span>(token[<span class=\"hljs-string\">'entity'<\/span>][<span class=\"hljs-number\">2<\/span>:]):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">            # \u5982\u679c\u5f53\u524d <span class=\"hljs-selector-tag\">token<\/span> \u5ef6\u7eed\u4e86\u4e0a\u4e00\u4e2a <span class=\"hljs-selector-tag\">token<\/span> \u7684\u5b9e\u4f53\uff0c\u5219\u5c06\u5b83\u4eec\u5408\u5e76<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">            <span class=\"hljs-selector-tag\">last_token<\/span> = <span class=\"hljs-selector-tag\">merged_tokens<\/span><span class=\"hljs-selector-attr\">[-1]<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">            <span class=\"hljs-selector-tag\">last_token<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'word'<\/span>]<\/span> += <span class=\"hljs-selector-tag\">token<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'word'<\/span>]<\/span><span class=\"hljs-selector-class\">.replace<\/span>(<span class=\"hljs-string\">'##'<\/span>, <span class=\"hljs-string\">''<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">            <span class=\"hljs-selector-tag\">last_token<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'end'<\/span>]<\/span> = <span class=\"hljs-selector-tag\">token<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'end'<\/span>]<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">            <span class=\"hljs-selector-tag\">last_token<\/span><span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">'score'<\/span>]<\/span> = (last_token[<span class=\"hljs-string\">'score'<\/span>] + token[<span class=\"hljs-string\">'score'<\/span>]) \/ <span class=\"hljs-number\">2<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">        <span class=\"hljs-selector-tag\">else<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">            # \u5426\u5219\uff0c\u5c06 <span class=\"hljs-selector-tag\">token<\/span> \u6dfb\u52a0\u5230\u5217\u8868\u4e2d<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">            <span class=\"hljs-selector-tag\">merged_tokens<\/span><span class=\"hljs-selector-class\">.append<\/span>(token)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">    <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">merged_tokens<\/span><\/span>\n<\/code><\/pre>\n<p>\u518d\u6b21\u8fd0\u884c\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u6b63\u786e\u7684\u7ed3\u679c\u4e86\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">ner<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">input<\/span><\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    output = get_completion(<span class=\"hljs-built_in\">input<\/span>, parameters=<span class=\"hljs-literal\">None<\/span>, ENDPOINT_URL=API_URL)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    merged_tokens = merge_tokens(output)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-keyword\">return<\/span> {<span class=\"hljs-string\">\"text\"<\/span>: <span class=\"hljs-built_in\">input<\/span>, <span class=\"hljs-string\">\"entities\"<\/span>: merged_tokens}<\/span>\n<\/code><\/pre>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/4ab0ef47149a0888528eaa3b5f439d89.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-13\">\u56fe\u50cf\u63cf\u8ff0\u5e94\u7528<\/h1>\n<p>\u5728\u8fd9\u4e00\u90e8\u5206\u91cc\uff0c\u6211\u4eec\u5c06\u4ece\u4e00\u5f20\u56fe\u7247\u4e2d\u8bc6\u522b\u51fa\u7269\u4f53\u3001\u573a\u666f\u3001\u52a8\u4f5c\u7b49\u5185\u5bb9\uff0c\u5e76\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u51fa\u6765\u3002<\/p>\n<p>\u8fd9\u91cc\u4f7f\u7528\u5230\u7684\u662f<code>Salesforce\/blip-image-captioning-base<\/code>\u6a21\u578b\uff0c\u8fd9\u662f\u4e00\u4e2a\u56fe\u50cf\u63cf\u8ff0\u6a21\u578b\uff0c\u53ef\u4ee5\u5c06\u56fe\u50cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u5e76\u8f93\u51fa\u8be5\u56fe\u50cf\u7684\u63cf\u8ff0\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/40971822051e4bf7fba5f8ae9c81019b.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u4f7f\u7528\u7684\u514d\u8d39\u56fe\u50cf\u6765\u6e90\u4e8e: <a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Ffree-images.com%2F\" target=\"_blank\" title=\"https:\/\/free-images.com\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">free-images.com\/<\/a><\/p>\n<h4 data-id=\"heading-14\">\u6b65\u9aa41\uff1a\u5b9a\u4e49 captioner \u7684\u51fd\u6570\uff0c\u63a5\u53d7\u56fe\u50cf\uff0c\u8c03\u7528 getCompletion \u51fd\u6570\uff0c\u5e76\u8fd4\u56de\u56fe\u50cf\u63cf\u8ff0\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">import io<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">import base64 <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-comment\"># \u5c06\u56fe\u50cf\u8f6c\u4e3aAPI\u6240\u9700\u7684Base64\u683c\u5f0f<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">def image_to_base64_str(pil_image):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-attr\">byte_arr<\/span> = io.BytesIO()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">    pil_image.save(byte_arr, <span class=\"hljs-attr\">format<\/span>=<span class=\"hljs-string\">'PNG'<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    <span class=\"hljs-attr\">byte_arr<\/span> = byte_arr.getvalue()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    return str(base64.b64encode(byte_arr).decode('utf-8'))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">API_URL<\/span> = <span class=\"hljs-string\">\"https:\/\/api-inference.huggingface.co\/models\/Salesforce\/blip-image-captioning-base\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">def captioner(image):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    <span class=\"hljs-attr\">base64_image<\/span> = image_to_base64_str(image)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    <span class=\"hljs-attr\">result<\/span> = get_completion(base64_image, parameters=None, ENDPOINT_URL=API_URL)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">    return result<span class=\"hljs-section\">[0]<\/span><span class=\"hljs-section\">['generated_text']<\/span><\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-15\">\u6b65\u9aa42\uff1a\u4f7f\u7528 Gradio \u7684 interface \u51fd\u6570\uff0c\u4f20\u5165 captioner \u51fd\u6570 \uff0c\u5c06\u8f93\u5165\u8bbe\u7f6e\u4e3a\u56fe\u50cf\uff0c\u8f93\u51fa\u8bbe\u7f6e\u4e3a\u6587\u672c\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">demo<\/span> = gr.Interface(fn=captioner,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">                    <span class=\"hljs-attr\">inputs<\/span>=[gr.Image(label=<span class=\"hljs-string\">\"Upload image\"<\/span>, type=<span class=\"hljs-string\">\"pil\"<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">                    <span class=\"hljs-attr\">outputs<\/span>=[gr.Textbox(label=<span class=\"hljs-string\">\"Caption\"<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">                    <span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"Image Captioning with BLIP\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">                    <span class=\"hljs-attr\">description<\/span>=<span class=\"hljs-string\">\"Caption any image using the BLIP model\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">                    <span class=\"hljs-attr\">allow_flagging<\/span>=<span class=\"hljs-string\">\"never\"<\/span>)<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-16\">\u6b65\u9aa43\uff1a\u8c03\u7528 demo.launch \u521b\u5efa\u7528\u6237\u754c\u9762\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">demo<span class=\"hljs-selector-class\">.launch<\/span>()<\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/0ab81c6cdcf21ee1a7e53191cfdf0191.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/672298d28421dc34b2562c5d21a15393.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-17\">\u56fe\u50cf\u751f\u6210\u5e94\u7528<\/h1>\n<p>\u5728\u8fd9\u4e00\u90e8\u5206\u91cc\uff0c\u6211\u4eec\u5c06\u6839\u636e\u4e00\u6bb5\u63cf\u8ff0\u6027\u7684\u6587\u672c\uff0c\u751f\u6210\u4e00\u5f20\u4e0e\u4e4b\u76f8\u7b26\u5408\u7684\u56fe\u7247\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/ebfbc2ae427ca895333caf8f5789ada3.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u8fd9\u91cc\u4f7f\u7528\u5230\u7684\u662f<code>runwayml\/stable-diffusion-v1-5<\/code>\u6a21\u578b\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u719f\u77e5\u7684<code>Stable Diffusion<\/code>\u56fe\u50cf\u751f\u6210\u6a21\u578b\uff0c\u6211\u4eec\u4f7f\u7528API URL\u8fde\u63a5\u5230\u4e86\u8fd9\u4e2a\u6a21\u578b\u7684\u670d\u52a1\u5668\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/859b030250060e87ab7fabe8d84fc7d0.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-18\">\u6b65\u9aa41\uff1a\u5b9a\u4e49 generate \u7684\u51fd\u6570\uff0c\u63a5\u53d7\u6587\u672c\u63cf\u8ff0\uff0c\u8c03\u7528 getCompletion \u51fd\u6570\uff0c\u5e76\u8fd4\u56de\u56fe\u50cf\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-comment\"># \u5c06PIL\u56fe\u50cf\u8f6c\u6362\u4e3abase64\u7684\u8f85\u52a9\u51fd\u6570<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-comment\"># \u8fd9\u6837\u4f60\u5c31\u53ef\u4ee5\u5c06\u5176\u53d1\u9001\u5230API<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">def base64_to_pil(img_base64):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-attr\">base64_decoded<\/span> = base64.b64decode(img_base64)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-attr\">byte_stream<\/span> = io.BytesIO(base64_decoded)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">    <span class=\"hljs-attr\">pil_image<\/span> = Image.open(byte_stream)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    return pil_image<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-attr\">API_URL<\/span> = <span class=\"hljs-string\">\"https:\/\/api-inference.huggingface.co\/models\/Salesforce\/blip-image-captioning-base\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">def generate(prompt):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    <span class=\"hljs-attr\">output<\/span> = get_completion(prompt\uff0cparameters=None, ENDPOINT_URL=API_URL)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    <span class=\"hljs-attr\">result_image<\/span> = base64_to_pil(output)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    return result_image<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-19\">\u6b65\u9aa42\uff1a\u4f7f\u7528 Gradio \u7684 interface \u51fd\u6570\uff0c\u4f20\u5165 generate \u51fd\u6570 \uff0c\u5c06\u8f93\u5165\u8bbe\u7f6e\u4e3a\u6587\u672c\uff0c\u8f93\u51fa\u8bbe\u7f6e\u4e3a\u56fe\u50cf\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">demo<\/span> = gr.Interface(fn=generate,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">                    <span class=\"hljs-attr\">inputs<\/span>=[gr.Textbox(label=<span class=\"hljs-string\">\"Your prompt\"<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">                    <span class=\"hljs-attr\">outputs<\/span>=[gr.Image(label=<span class=\"hljs-string\">\"Result\"<\/span>)],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">                    <span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"Image Generation with Stable Diffusion\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">                    <span class=\"hljs-attr\">description<\/span>=<span class=\"hljs-string\">\"Generate any image with Stable Diffusion\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">                    <span class=\"hljs-attr\">allow_flagging<\/span>=<span class=\"hljs-string\">\"never\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">                    <span class=\"hljs-attr\">examples<\/span>=[<span class=\"hljs-string\">\"a dog in a park\"<\/span>,<span class=\"hljs-string\">\"a mecha robot in a favela\"<\/span>])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-20\">\u6b65\u9aa43\uff1a\u8c03\u7528 demo.launch \u521b\u5efa\u7528\u6237\u754c\u9762\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">demo<span class=\"hljs-selector-class\">.launch<\/span>()<\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/62faa390da8bf5a15cda818e500d787c.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/45038de392c22f8a5ec3eef3a8244aee.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/a2b6746e9ed158a3882be4d96c063046.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-21\">\uff08\u53ef\u9009\uff09\u6b65\u9aa44\uff1a\u589e\u52a0\u66f4\u591a\u8f93\u5165\u9009\u9879\uff0c\u4ee5\u6784\u5efa\u4e00\u4e2a\u66f4\u9ad8\u7ea7\u7684\u754c\u9762\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">with gr.Blocks() as demo:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    gr.Markdown(\"<span class=\"hljs-comment\"># Image Generation with Stable Diffusion\")<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    with gr.Row(): <span class=\"hljs-comment\"># gr.Row()\u7528\u4e8e\u5c06\u7ec4\u4ef6\u6c34\u5e73\u6392\u5217<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">        with gr.Column(<span class=\"hljs-attr\">scale<\/span>=<span class=\"hljs-number\">4<\/span>): <span class=\"hljs-comment\"># scale\u503c\u7528\u4e8e\u8c03\u6574\u6240\u5360\u5bbd\u5ea6\u6bd4\u4f8b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">            <span class=\"hljs-attr\">prompt<\/span> = gr.Textbox(label=<span class=\"hljs-string\">\"Your prompt\"<\/span>) <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">        with gr.Column(<span class=\"hljs-attr\">scale<\/span>=<span class=\"hljs-number\">1<\/span>, min_width=<span class=\"hljs-number\">50<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">            <span class=\"hljs-attr\">btn<\/span> = gr.Button(<span class=\"hljs-string\">\"Submit\"<\/span>) <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    with gr.Accordion(\"Advanced options\", <span class=\"hljs-attr\">open<\/span>=<span class=\"hljs-literal\">False<\/span>): <span class=\"hljs-comment\"># open=false\u8868\u793a\u9ed8\u8ba4\u6298\u53e0\u9690\u85cf<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">            <span class=\"hljs-attr\">negative_prompt<\/span> = gr.Textbox(label=<span class=\"hljs-string\">\"Negative prompt\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">            with gr.Row():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">                with gr.Column(): <span class=\"hljs-comment\"># gr.Column()\u7528\u4e8e\u5c06\u7ec4\u4ef6\u5782\u76f4\u6392\u5217<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">                    <span class=\"hljs-attr\">steps<\/span> = gr.Slider(label=<span class=\"hljs-string\">\"Inference Steps\"<\/span>, minimum=<span class=\"hljs-number\">1<\/span>, maximum=<span class=\"hljs-number\">100<\/span>, value=<span class=\"hljs-number\">25<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">                      <span class=\"hljs-attr\">info<\/span>=<span class=\"hljs-string\">\"In many steps will the denoiser denoise the image?\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">                    <span class=\"hljs-attr\">guidance<\/span> = gr.Slider(label=<span class=\"hljs-string\">\"Guidance Scale\"<\/span>, minimum=<span class=\"hljs-number\">1<\/span>, maximum=<span class=\"hljs-number\">20<\/span>, value=<span class=\"hljs-number\">7<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">                      <span class=\"hljs-attr\">info<\/span>=<span class=\"hljs-string\">\"Controls how much the text prompt influences the result\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">                with gr.Column(): <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">                    <span class=\"hljs-attr\">width<\/span> = gr.Slider(label=<span class=\"hljs-string\">\"Width\"<\/span>, minimum=<span class=\"hljs-number\">64<\/span>, maximum=<span class=\"hljs-number\">512<\/span>, step=<span class=\"hljs-number\">64<\/span>, value=<span class=\"hljs-number\">512<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">                    <span class=\"hljs-attr\">height<\/span> = gr.Slider(label=<span class=\"hljs-string\">\"Height\"<\/span>, minimum=<span class=\"hljs-number\">64<\/span>, maximum=<span class=\"hljs-number\">512<\/span>, step=<span class=\"hljs-number\">64<\/span>, value=<span class=\"hljs-number\">512<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">    <span class=\"hljs-attr\">output<\/span> = gr.Image(label=<span class=\"hljs-string\">\"Result\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">            <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">    btn.click(<span class=\"hljs-attr\">fn<\/span>=generate, inputs=[prompt,negative_prompt,steps,guidance,width,height], outputs=[output])<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u4e9b\u989d\u5916\u8f93\u5165\u9009\u9879\u7684\u4f5c\u7528\u5982\u4e0b\uff1a<\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>\u6807\u7b7e<\/th><th>\u542b\u4e49<\/th><th>\u7c7b\u578b<\/th><th>\u4f5c\u7528<\/th><\/tr><\/thead><tbody><tr><td>Your prompt<\/td><td>\u63d0\u793a<\/td><td>\u6587\u672c\u6846<\/td><td>\u63cf\u8ff0\u60f3\u8981\u751f\u6210\u7684\u56fe\u7247\u5185\u5bb9<\/td><\/tr><tr><td>Negative prompt<\/td><td>\u8d1f\u63d0\u793a<\/td><td>\u6587\u672c\u6846<\/td><td>\u63cf\u8ff0\u4e0d\u60f3\u751f\u6210\u7684\u56fe\u7247\u5185\u5bb9<\/td><\/tr><tr><td>Inference Steps<\/td><td>\u63a8\u7406\u6b65\u9aa4<\/td><td>\u6ed1\u5757\u63a7\u4ef6<\/td><td>\u63a7\u5236\u63a8\u7406\u8fc7\u7a0b\u7684\u6267\u884c\u6b65\u6570\uff0c\u6b65\u6570\u8d8a\u591a\u7ed3\u679c\u8d8a\u7cbe\u7ec6<\/td><\/tr><tr><td>Guidance Scale<\/td><td>\u6307\u5bfc\u5c3a\u5ea6<\/td><td>\u6ed1\u5757\u63a7\u4ef6<\/td><td>\u63a7\u5236\u6587\u672c\u63d0\u793a\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\u7a0b\u5ea6\uff0c\u503c\u8d8a\u5927\u751f\u6210\u7ed3\u679c\u8d8a\u8d34\u5408\u63d0\u793a\u5185\u5bb9<\/td><\/tr><tr><td>Width<\/td><td>\u5bbd\u5ea6<\/td><td>\u6ed1\u5757\u63a7\u4ef6<\/td><td>\u8bbe\u7f6e\u56fe\u7247\u5bbd\u5ea6\uff0c\u5355\u4f4d\uff1a\u50cf\u7d20<\/td><\/tr><tr><td>Height<\/td><td>\u9ad8\u5ea6<\/td><td>\u6ed1\u5757\u63a7\u4ef6<\/td><td>\u8bbe\u7f6e\u56fe\u7247\u9ad8\u5ea6\uff0c\u5355\u4f4d\uff1a\u50cf\u7d20<\/td><\/tr><\/tbody><\/table>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/9ae948cac738113556bfc3a74cbbf688.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-22\">\u201c\u63cf\u8ff0\u4e0e\u751f\u6210\u201d\u6e38\u620f<\/h1>\n<p>\u5728\u8fd9\u4e00\u90e8\u5206\u91cc\uff0c\u6211\u4eec\u5c06\u7ed3\u5408\u524d\u9762\u4e24\u8282\u7684\u5185\u5bb9\u505a\u4e00\u4e2a\u6e38\u620f\u5e94\u7528\uff0c\u9996\u5148\u8bc6\u522b\u4e00\u5f20\u56fe\u50cf\u7684\u5185\u5bb9\uff0c\u518d\u5c06\u8bc6\u522b\u51fa\u7684\u5185\u5bb9\u4f5c\u4e3a\u63cf\u8ff0\u751f\u6210\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u3002<\/p>\n<h4 data-id=\"heading-23\">\u6b65\u9aa41\uff1a\u5f15\u5165\u7b2c3\u8bfe\u548c\u7b2c4\u8bfe\u7684\u51fd\u6570\uff0ccaptioner \u51fd\u6570\u7528\u4e8e\u63a5\u53d7\u56fe\u50cf\u5e76\u8fd4\u56de\u56fe\u50cf\u63cf\u8ff0\uff1bgenerate \u7684\u51fd\u6570\u7528\u4e8e\u63a5\u6536\u56fe\u50cf\u63cf\u8ff0\u5e76\u8fd4\u56de\u56fe\u50cf\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def image_to_base64_str(pil_image):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    <span class=\"hljs-attr\">byte_arr<\/span> = io.BytesIO()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    pil_image.save(byte_arr, <span class=\"hljs-attr\">format<\/span>=<span class=\"hljs-string\">'PNG'<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-attr\">byte_arr<\/span> = byte_arr.getvalue()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    return str(base64.b64encode(byte_arr).decode('utf-8'))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">def base64_to_pil(img_base64):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    <span class=\"hljs-attr\">base64_decoded<\/span> = base64.b64decode(img_base64)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">    <span class=\"hljs-attr\">byte_stream<\/span> = io.BytesIO(base64_decoded)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">    <span class=\"hljs-attr\">pil_image<\/span> = Image.open(byte_stream)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    return pil_image<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">def captioner(image):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">    <span class=\"hljs-attr\">base64_image<\/span> = image_to_base64_str(image)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    <span class=\"hljs-attr\">result<\/span> = get_completion(base64_image, None, ITT_ENDPOINT)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">    return result<span class=\"hljs-section\">[0]<\/span><span class=\"hljs-section\">['generated_text']<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">def generate(prompt):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">    <span class=\"hljs-attr\">output<\/span> = get_completion(prompt, None, TTI_ENDPOINT)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">    <span class=\"hljs-attr\">result_image<\/span> = base64_to_pil(output)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">    return result_image<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-24\">\u6b65\u9aa42\uff1a\u4f7f\u7528 Gradio \u7684 interface \u51fd\u6570\uff0c\u4f20\u5165\u5408\u5e76\u4e86\u4e24\u4e2a\u6b65\u9aa4\u7684 caption_and_generate \u51fd\u6570 \uff0c\u5c06\u8f93\u5165\u8bbe\u7f6e\u4e3a\u56fe\u50cf\uff0c\u8f93\u51fa\u5206\u522b\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u6587\u672c\u548c\u4e00\u4e2a\u56fe\u50cf\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def caption_and_generate(image):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    <span class=\"hljs-attr\">caption<\/span> = captioner(image)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-attr\">image<\/span> = generate(caption)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    return <span class=\"hljs-section\">[caption, image]<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">with gr.Blocks() as demo:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    gr.Markdown(\"<span class=\"hljs-comment\"># Describe-and-Generate game \ud83d\udd8d\ufe0f\")<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    <span class=\"hljs-attr\">image_upload<\/span> = gr.Image(label=<span class=\"hljs-string\">\"Your first image\"<\/span>,type=<span class=\"hljs-string\">\"pil\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">    <span class=\"hljs-attr\">btn_all<\/span> = gr.Button(<span class=\"hljs-string\">\"Caption and generate\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">    <span class=\"hljs-attr\">caption<\/span> = gr.Textbox(label=<span class=\"hljs-string\">\"Generated caption\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    <span class=\"hljs-attr\">image_output<\/span> = gr.Image(label=<span class=\"hljs-string\">\"Generated Image\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    btn_all.click(<span class=\"hljs-attr\">fn<\/span>=caption_and_generate, inputs=[image_upload], outputs=[caption, image_output])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">gr.close_all()<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-25\">\u6b65\u9aa43\uff1a\u8c03\u7528 demo.launch \u521b\u5efa\u7528\u6237\u754c\u9762\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">demo<span class=\"hljs-selector-class\">.launch<\/span>()<\/span>\n<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/0e1294f644d101d8408090e367a57af9.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/5c8b14ab07412901189c28d1ebca9c71.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-26\">\u4e0e\u4efb\u610fLLM\u804a\u5929<\/h1>\n<p>\u5728\u8fd9\u4e00\u90e8\u5206\u91cc\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u80fd\u591f\u4e0e\u7528\u6237\u8fdb\u884c\u81ea\u7136\u5bf9\u8bdd\u7684\u804a\u5929\u673a\u5668\u4eba\uff0c\u5e76\u6839\u636e\u7528\u6237\u63d0\u4f9b\u7684\u4fe1\u606f\u751f\u6210\u4e2a\u6027\u5316\u7684\u56de\u7b54\u3002<\/p>\n<p>\u8fd9\u91cc\u4f7f\u7528\u7684\u5230\u662f<code>falcon-40b-instruct<\/code>\u6a21\u578b\uff0c\u8fd9\u662f\u5728<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fhuggingface.co%2Fspaces%2FHuggingFaceH4%2Fopen_llm_leaderboard\" target=\"_blank\" title=\"https:\/\/huggingface.co\/spaces\/HuggingFaceH4\/open_llm_leaderboard\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">Open LLM Leaderboard<\/a>\u4e0a\u6392\u540d\u6700\u9ad8\u7684\u5f00\u6e90LLM\u4e4b\u4e00\u3002<\/p>\n<h4 data-id=\"heading-27\">\u6b65\u9aa41\uff1a\u521d\u59cb\u5316Client\uff0c\u4ee5\u501f\u52a9text_generation\u5e93\u8bbf\u95eeFalcomLM-instruct\u63a8\u7406\u7aef\u70b9\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">import<\/span> requests, json<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">from<\/span> text_generation <span class=\"hljs-keyword\">import<\/span> Client<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">client = Client(os.environ[<span class=\"hljs-string\">'HF_API_FALCOM_BASE'<\/span>], headers={<span class=\"hljs-string\">\"Authorization\"<\/span>: <span class=\"hljs-string\">f\"Basic <span class=\"hljs-subst\">{hf_api_key}<\/span>\"<\/span>}, timeout=<span class=\"hljs-number\">120<\/span>)<\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-28\">\u6b65\u9aa42\uff1a\u5b9a\u4e49 format_chat_prompt \u51fd\u6570\uff0c\u4ee5\u683c\u5f0f\u5316\u63d0\u793a\u53ca\u5bf9\u8bdd\u5386\u53f2<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">format_chat_prompt<\/span>(<span class=\"hljs-params\">message, chat_history, instruction<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    prompt = <span class=\"hljs-string\">f\"System:<span class=\"hljs-subst\">{instruction}<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-keyword\">for<\/span> turn <span class=\"hljs-keyword\">in<\/span> chat_history:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">        user_message, bot_message = turn<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">        prompt = <span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{prompt}<\/span>nUser: <span class=\"hljs-subst\">{user_message}<\/span>nAssistant: <span class=\"hljs-subst\">{bot_message}<\/span>\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">    prompt = <span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{prompt}<\/span>nUser: <span class=\"hljs-subst\">{message}<\/span>nAssistant:\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    <span class=\"hljs-keyword\">return<\/span> prompt<\/span>\n<\/code><\/pre>\n<p>\u5176\u4e2d\u6d89\u53ca\u5230\u4e09\u79cd\u89d2\u8272\u6d88\u606f\u6211\u4eec\u4e5f\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u5f88\u591a\u6b21\u4e86\uff1a<\/p>\n<ul>\n<li>\u7cfb\u7edf\u6d88\u606f\uff08System\uff09\uff1a\u8d1f\u8d23\u6307\u5b9aLLM\u6574\u4f53\u7684\u8bed\u8a00\u98ce\u683c\u6216\u8005\u52a9\u624b\u7684\u884c\u4e3a\uff1b<\/li>\n<li>\u52a9\u624b\u6d88\u606f\uff08Assistant\uff09\uff1a\u8d1f\u8d23\u6839\u636e\u7528\u6237\u6d88\u606f\u8981\u6c42\u5185\u5bb9\uff0c\u4ee5\u53ca\u7cfb\u7edf\u6d88\u606f\u7684\u8bbe\u5b9a\uff0c\u8f93\u51fa\u4e00\u4e2a\u5408\u9002\u7684\u56de\u5e94\uff1b<\/li>\n<li>\u7528\u6237\u6d88\u606f\uff08User\uff09\uff1a\u7ed9\u51fa\u4e00\u4e2a\u5177\u4f53\u7684\u6307\u4ee4\u3002<\/li>\n<\/ul>\n<p>\u800c\u8fd9\u4e00\u6b65\u9aa4\u7684\u76ee\u7684\u662f\u4e3a\u6a21\u578b\u63d0\u4f9b\u8bb0\u5fc6\u529f\u80fd\uff0c\u4f7f\u6a21\u578b\u80fd\u591f\u5728\u7406\u89e3\u4e0a\u4e0b\u6587\u7684\u524d\u63d0\u4e0b\uff0c\u56de\u7b54\u540e\u7eed\u95ee\u9898\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">vbnet<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-vbnet code-block-extension-codeShowNum\" lang=\"vbnet\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-symbol\">User:<\/span> what <span class=\"hljs-built_in\">is<\/span> the meaning <span class=\"hljs-keyword\">of<\/span> life?<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-symbol\">Assistant:<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-symbol\">User:<\/span> what <span class=\"hljs-built_in\">is<\/span> the meaning <span class=\"hljs-keyword\">of<\/span> life?<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-symbol\">Assistant:<\/span> I<span class=\"hljs-comment\">'m sorry, I cannot provide a definitive answer to that question.It is a philosophical question<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-symbol\">User:<\/span> but why?<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-symbol\">Assistant:<\/span><\/span>\n<\/code><\/pre>\n<h4 data-id=\"heading-29\">\u6b65\u9aa43\uff1a\u5b9a\u4e49 respond \u51fd\u6570\uff0c\u4ee5\u8c03\u7528 Client \u7684 generate \u51fd\u6570\uff0c\u5c06\u6d88\u606f\u53d1\u9001\u7ed9\u6a21\u578b\uff0c\u5e76\u5c06\u54cd\u5e94\u8ffd\u52a0\u5230\u5bf9\u8bdd\u5386\u53f2\u3002<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def respond(message, chat_history):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">        <span class=\"hljs-attr\">formatted_prompt<\/span> = format_chat_prompt(message, chat_history)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">        <span class=\"hljs-attr\">bot_message<\/span> = client.generate(formatted_prompt,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">                                     <span class=\"hljs-attr\">max_new_tokens<\/span>=<span class=\"hljs-number\">1024<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">                                     <span class=\"hljs-attr\">stop_sequences<\/span>=[<span class=\"hljs-string\">\"nUser:\"<\/span>, <span class=\"hljs-string\">\"&lt;|endoftext|&gt;\"<\/span>]).generated_text<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">        chat_history.append((message, bot_message))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">        return \"\", chat_history<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u91cc\u6709\u4e00\u4e2a\u95ee\u9898\u3002<\/p>\n<p>\u968f\u7740\u8fd9\u4e2a\u8fc7\u7a0b\u7684\u6301\u7eed\u8fdb\u884c\uff0c\u6211\u4eec\u53d1\u9001\u7ed9\u6a21\u578b\u7684\u5bf9\u8bdd\u5386\u53f2\u4f1a\u8d8a\u6765\u8d8a\u591a\uff0c\u76f4\u5230\u6a21\u578b\u8fbe\u5230\u4e00\u6b21\u5bf9\u8bdd\u4e2d\u53ef\u4ee5\u5904\u7406\u7684\u6700\u5927\u6807\u8bb0\u6570\u9650\u5236\u3002<\/p>\n<p>\u56e0\u6b64\uff0c\u6211\u4eec\u9009\u62e9\u5728\u8fd9\u91cc\u5c06\u6700\u5927\u6807\u8bb0\u6570\uff08max_new_tokens\uff09\u53c2\u6570\u8bbe\u7f6e\u4e3a1024\uff0c\u8fd9\u5c06\u4fdd\u7559\u6700\u540e1024\u4e2a\u6807\u8bb0\u7684\u5bf9\u8bdd\u5386\u53f2\u3002<\/p>\n<p>\u8981\u60f3\u8be6\u7ec6\u8fd9\u4e2a\u53c2\u6570\u7684\u7279\u70b9\uff0c\u53ef\u4ee5\u53c2\u8003\u4e4b\u524d<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FKrFV-fuP2MI3HQGmEM1sUA\" target=\"_blank\" title=\"https:\/\/mp.weixin.qq.com\/s\/KrFV-fuP2MI3HQGmEM1sUA\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u300a\u7cbe\u534e\u7b14\u8bb0\uff1a\u5434\u6069\u8fbe x LangChain\u300a\u57fa\u4e8eLangChain\u7684\u5927\u8bed\u8a00\u6a21\u578b\u5e94\u7528\u5f00\u53d1\u300b(\u4e0a)\n\u300b<\/a>\u4e00\u6587\u4e2d\u7684<code>ConversationalTokenBufferMemory<\/code>\u3002<\/p>\n<p>\u800c\u53e6\u5916\u4e00\u4e2a\u505c\u6b62\u5e8f\u5217\uff08stop_sequences\uff09\u53c2\u6570\u7684\u4f5c\u7528\uff0c\u5219\u662f\u4e3a\u4e86\u9884\u9632\u52a9\u624b\u6d88\u606f\u5192\u8ba4\u7528\u6237\u6d88\u606f\uff0c\u786e\u4fdd\u5bf9\u8bdd\u5386\u53f2\u4e2d\u7684\u7528\u6237\u6d88\u606f\u6765\u81ea\u4e8e\u771f\u6b63\u7684\u7528\u6237\u800c\u4e0d\u662f\u6765\u81ea\u4e8e\u6a21\u578b\u3002<\/p>\n<p>\u6bd4\u5982\uff0c\u5f53\u6211\u4eec\u53ea\u5411\u6a21\u578b\u63d0\u95ee\u4e86\u8fd9\u4e00\u53e5\u65f6\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/5f1ee5b1cf6a81168733868a5a20a34d.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<p>\u6a21\u578b\u53ef\u80fd\u4f1a\u5728\u56de\u7b54\u7684\u540c\u65f6\uff0c\u6784\u9020\u591a\u4e86\u4e00\u4e2a\u865a\u5047\u7684\u63d0\u95ee\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/b1832d627c3495409a02999c97a92f50.png\" alt=\"\u7cbe\u534e\u7b14\u8bb0 - \u5434\u6069\u8fbe x Hugging Face\u300a\u4f7f\u7528Gradio\u6784\u5efa\u751f\u6210\u5f0fAI\u5e94\u7528\u300b\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-30\">\u6b65\u9aa44\uff1a\u4f7f\u7528 Gradio \u7684 Chatbot \u51fd\u6570\uff0c\u5feb\u901f\u6784\u5efa\u4e00\u4e2a\u804a\u5929\u673a\u5668\u4eba\u7ec4\u4ef6<\/h4>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">with gr.Blocks() as demo:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    <span class=\"hljs-attr\">chatbot<\/span> = gr.Chatbot(height=<span class=\"hljs-number\">240<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-attr\">msg<\/span> = gr.Textbox(label=<span class=\"hljs-string\">\"Prompt\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    with gr.Accordion(<span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"Advanced options\"<\/span>,open=<span class=\"hljs-literal\">False<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">        <span class=\"hljs-attr\">system<\/span> = gr.Textbox(label=<span class=\"hljs-string\">\"System message\"<\/span>, lines=<span class=\"hljs-number\">2<\/span>, value=<span class=\"hljs-string\">\"A conversation between a user and an LLM-based AI assistant. The assistant gives helpful and honest answers.\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">        <span class=\"hljs-attr\">temperature<\/span> = gr.Slider(label=<span class=\"hljs-string\">\"temperature\"<\/span>, minimum=<span class=\"hljs-number\">0.1<\/span>, maximum=<span class=\"hljs-number\">1<\/span>, value=<span class=\"hljs-number\">0.7<\/span>, step=<span class=\"hljs-number\">0.1<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    <span class=\"hljs-attr\">btn<\/span> = gr.Button(<span class=\"hljs-string\">\"Submit\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    <span class=\"hljs-attr\">clear<\/span> = gr.ClearButton(components=[msg, chatbot], value=<span class=\"hljs-string\">\"Clear console\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">    btn.click(respond, <span class=\"hljs-attr\">inputs<\/span>=[msg, chatbot, system], outputs=[msg, chatbot])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    msg.submit(respond, <span class=\"hljs-attr\">inputs<\/span>=[msg, chatbot, system], outputs=[msg, chatbot]) <span class=\"hljs-comment\">#Press enter to submit<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<\/code><\/pre>\n<p>\u804a\u5929\u673a\u5668\u4eba\u7ec4\u4ef6\u53ef\u4ee5\u7b80\u5316\u6211\u4eec\u53d1\u9001\u5bf9\u8bdd\u5386\u53f2\u7ed9\u6a21\u578b\u7684\u8fc7\u7a0b\u3002<\/p>\n<p>\u5176\u4e2d\u63d0\u4f9b\u7684\u4e00\u4e9b\u989d\u5916\u8f93\u5165\u9009\u9879\u7684\u4f5c\u7528\u5982\u4e0b\uff1a<\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>\u6807\u7b7e<\/th><th>\u542b\u4e49<\/th><th>\u7c7b\u578b<\/th><th>\u4f5c\u7528<\/th><\/tr><\/thead><tbody><tr><td>System message<\/td><td>\u7cfb\u7edf\u6d88\u606f<\/td><td>\u6587\u672c\u6846<\/td><td>\u544a\u8bc9LLM\u5982\u4f55\u4e0e\u4f60\u4ea4\u6d41\uff0c\u6bd4\u5982\u8bbe\u5b9a\u89d2\u8272\u6216\u8c03\u6574\u8bed\u6c14<\/td><\/tr><tr><td>temperature<\/td><td>\u6e29\u5ea6<\/td><td>\u6ed1\u5757\u63a7\u4ef6<\/td><td>\u4e3a0\u65f6\uff0c\u6a21\u578b\u5bf9\u4e8e\u76f8\u540c\u8f93\u5165\u4f1a\u59cb\u7ec8\u505a\u51fa\u76f8\u540c\u56de\u7b54\uff1b\u503c\u8d8a\u5927\uff0c\u6a21\u578b\u7ed9\u51fa\u7684\u56de\u7b54\u53d8\u5316\u8d8a\u5927\u3002<\/td><\/tr><\/tbody><\/table>\n<h4 data-id=\"heading-31\">\uff08\u53ef\u9009\uff09\u6b65\u9aa45\uff1a\u8ba9\u6a21\u578b\u6539\u7528\u5b9e\u65f6\u6d41\u5f0f\u7684\u65b9\u5f0f\u4f20\u8f93\u7b54\u6848<\/h4>\n<p>\u5728\u8fd9\u79cd\u65b9\u5f0f\u4e0b\uff0c\u6211\u4eec\u4f1a\u5c06\u6807\u8bb0\u9010\u4e2a\u53d1\u9001\uff0c\u5e76\u5b9e\u65f6\u5730\u770b\u5230\u5b83\u7684\u5b8c\u6574\u56de\u7b54\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u7b49\u5f85\u6574\u4e2a\u7b54\u6848\u51c6\u5907\u597d\uff0c\u6700\u7ec8\u5448\u73b0\u7684\u6548\u679c\u5c31\u662f\u4e0eChatGPT\u4e00\u6837\u9010\u8bcd\u8f93\u51fa\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">def respond(message, chat_history, instruction, <span class=\"hljs-attr\">temperature<\/span>=<span class=\"hljs-number\">0.7<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">    <span class=\"hljs-attr\">prompt<\/span> = format_chat_prompt(message, chat_history, instruction)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-attr\">chat_history<\/span> = chat_history + [[message, <span class=\"hljs-string\">\"\"<\/span>]]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    <span class=\"hljs-attr\">stream<\/span> = client.generate_stream(prompt,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">                                      <span class=\"hljs-attr\">max_new_tokens<\/span>=<span class=\"hljs-number\">1024<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">                                      <span class=\"hljs-attr\">stop_sequences<\/span>=[<span class=\"hljs-string\">\"nUser:\"<\/span>, <span class=\"hljs-string\">\"&lt;|endoftext|&gt;\"<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">                                      <span class=\"hljs-attr\">temperature<\/span>=temperature)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">                                      <span class=\"hljs-comment\">#stop_sequences to not generate the user answer<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">    <span class=\"hljs-attr\">acc_text<\/span> = <span class=\"hljs-string\">\"\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">    <span class=\"hljs-comment\">#Streaming the tokens<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    for idx, response in enumerate(stream):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">            <span class=\"hljs-attr\">text_token<\/span> = response.token.text<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">            if response.details:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">                return<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">            if <span class=\"hljs-attr\">idx<\/span> == <span class=\"hljs-number\">0<\/span> and text_token.startswith(<span class=\"hljs-string\">\" \"<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">                <span class=\"hljs-attr\">text_token<\/span> = text_token[<span class=\"hljs-number\">1<\/span>:]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">            acc_text += text_token<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">            <span class=\"hljs-attr\">last_turn<\/span> = list(chat_history.pop(-<span class=\"hljs-number\">1<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">            last_turn<span class=\"hljs-section\">[-1]<\/span> += acc_text<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">            <span class=\"hljs-attr\">chat_history<\/span> = chat_history + [last_turn]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">            yield \"\", chat_history<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">            <span class=\"hljs-attr\">acc_text<\/span> = <span class=\"hljs-string\">\"\"<\/span><\/span>\n<\/code><\/pre>\n<h1 data-id=\"heading-32\">\u53c2\u8003<\/h1>\n<p>Inference API-(<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fhuggingface.co%2Fdocs%2Fapi-inference%2Findex\" target=\"_blank\" title=\"https:\/\/huggingface.co\/docs\/api-inference\/index\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">huggingface.co\/docs\/api-in\u2026<\/a>)<\/p>","protected":false},"excerpt":{"rendered":"<p>Gradio\u662f\u4e00\u4e2a\u53ef\u4ee5\u8ba9\u4f60\u8f7b\u677e\u3001\u65b9\u4fbf\u5730\u4f7f\u7528Python\u4ee3\u7801\u6784\u5efa\u4e00\u4e2a\u53cb\u597dWeb\u4ea4\u4e92\u754c\u9762\u7684UI\u6846\u67b6\u3002\u5b83\u53ef\u4ee5\u652f\u6301\u5404\u79cd\u6570\u636e\u7c7b\u578b\u7684\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u8fd8\u53ef\u4ee5\u65b9\u4fbf\u5730\u4e0eHugging Face\u4e0a\u7684\u5404\u79cd\u5f00\u6e90\u6a21\u578b\u96c6\u6210\u3002<\/p>\n","protected":false},"author":1,"featured_media":5089,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"\u6a21\u578b | \u590d\u5236 | \u4ee3\u7801 - \u5948\u65af\u79d1\u6280\u793e\u533a","rank_math_description":"\u5948\u65af\u79d1\u6280\u793e\u533a\u4e13\u6ce8\u4e8e\u6a21\u578b\u3001\u590d\u5236\u3001\u4ee3\u7801\u3001\u6b65\u9aa4\u3001\u51fd\u6570\uff0c\u63d0\u4f9b\u4e13\u4e1a\u7684\u5206\u4eab\u548c\u8ba8\u8bba\u5e73\u53f0\u3002","rank_math_focus_keyword":"\u6a21\u578b,\u590d\u5236,\u4ee3\u7801,\u6b65\u9aa4,\u51fd\u6570","views":"16","footnotes":""},"categories":[3],"tags":[136,126,127,128,129],"collection":[],"class_list":["post-1302","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fenlei2","tag-136","tag-gpt","tag-ai","tag-128","tag-129"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/comments?post=1302"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1302\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media\/5089"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1302"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}