{"id":1498,"date":"2024-05-17T09:34:30","date_gmt":"2024-05-17T09:34:30","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1498"},"modified":"2024-05-17T09:36:50","modified_gmt":"2024-05-17T09:36:50","slug":"zhaobudaoxiangzhaodetupianbanxiaoshibangnishixianyigeaibantupiansouai","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/zhaobudaoxiangzhaodetupianbanxiaoshibangnishixianyigeaibantupiansouai.html","title":{"rendered":"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d"},"content":{"rendered":"<h1 data-id=\"heading-0\">\u534a\u5c0f\u65f6\u5b9e\u73b0\u4e00\u4e2a&#8221;\u56fe\u7247\u641c\u7d22\u5f15\u64ce&#8221;<\/h1>\n<h1 data-id=\"heading-1\">\u4e00\u3001\u6280\u672f\u65b9\u6848<\/h1>\n<h2 data-id=\"heading-2\">\u4e00\uff09\u6982\u89c8<\/h2>\n<p>\u6211\u4eec\u90fd\u77e5\u9053\u641c\u7d22\u5f15\u64ce\u300c\u767e\u5ea6\u300d\uff0c\u300c\u8c37\u6b4c\u300d\u53ef\u4ee5\u641c\u7d22\u4e92\u8054\u7f51\u4e0a\u7684\u6240\u6709<strong>\u6587\u5b57<\/strong>\u5185\u5bb9\u3002<\/p>\n<p>\u641c\u7d22\u5f15\u64ce\u5bf9<strong>\u7ed3\u6784\u5316<\/strong>\u7684\u6570\u636e\u53ef\u4ee5\u8bc6\u522b\u7684\u975e\u5e38\u7cbe\u51c6\uff0c\u4f46\u662f\u5bf9\u4e8e<strong>\u975e\u7ed3\u6784\u5316<\/strong>\u7684\u6570\u636e\uff0c\u6bd4\u5982\u56fe\u7247\uff0c\u89c6\u9891\uff0c\u97f3\u9891\u5374\u65e0\u80fd\u4e3a\u529b\u3002<\/p>\n<p>\u4e0b\u9762\u8fd9\u4e2a\u767e\u5ea6\u641c\u7d22\u51fa\u7684\u56fe\u7247\u4e5f\u662f\u6839\u636e\u56fe\u7247\u4e0b\u9762\u7684\u6587\u5b57\u6784\u5efa\u7684\u7d22\u5f15\uff0c\u662f\u641c\u4e0d\u51fa\u56fe\u7247\u5185\u7684\u4fe1\u606f\u7684\u3002\u6bd4\u5982\u6211\u662f\u4e2a\u81ea\u5a92\u4f53\u4f5c\u8005\u60f3\u8981\u5f15\u7528\u7535\u5f71\u4e2d\u67d0\u4e2a\u7247\u6bb5\uff0c\u76f4\u63a5\u7528\u4f20\u7edf\u641c\u7d22\u5f15\u64ce\u5b8c\u5168\u4e0d\u884c\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/83339d538c0b7ee3ad217f23b19dc966.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<p>AI\u65f6\u4ee3\u8fd9\u91cc\u5c31\u9700\u8981\u65b0\u4e00\u4ee3\u7684\u641c\u7d22\u5f15\u64ce\u4e86\u3002<strong>Embedding\u767b\u573a<\/strong>\uff0c\u5b83\u53ef\u4ee5\u628a\u6240\u6709\u975e\u7ed3\u6784\u5316\u6570\u636e\u7edf\u4e00\u8f6c\u5316\u4e3a\u5411\u91cf\uff0c\u8fdb\u884c\u5411\u91cf\u641c\u7d22\u8fdb\u884c\u5305\u542b\u8bed\u4e49\u7684\u67e5\u627e\u3002<\/p>\n<p>\u5173\u4e8e\u4ec0\u4e48\u662fRAG\u548cEmbedding\u5c31\u4e0d\u8d58\u8ff0\u4e86\uff0c\u4e4b\u524d\u8fd9\u7bc7\u8bb2\u7684\u5f88\u8be6\u7ec6\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FOnn5AiwZBenvPHxIyYoIXg\" target=\"_blank\" title=\"https:\/\/mp.weixin.qq.com\/s\/Onn5AiwZBenvPHxIyYoIXg\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">mp.weixin.qq.com\/s\/Onn5AiwZB\u2026<\/a><\/p>\n<p>RAG\u641c\u7d22\u5f15\u64ce\u516c\u5f0f\uff1a<\/p>\n<p><strong>\u8bed\u6599+EmbeddingModel+\u5411\u91cf\u5e93+LLM\uff08\u53ef\u9009\uff09=\u641c\u7d22\u5f15\u64ce<\/strong><\/p>\n<p><strong>\u56fe\u7247\u6587\u4ef6+\u56fe\u7247EmbeddingModel+\u5411\u91cf\u5e93=\u56fe\u7247\u641c\u7d22\u5f15\u64ce<\/strong><\/p>\n<p>\u89c6\u9891\u6587\u4ef6+\u89c6\u9891EmbeddingModel+\u5411\u91cf\u5e93=\u89c6\u9891\u641c\u7d22\u5f15\u64ce<\/p>\n<p>\u97f3\u4e50\u6587\u4ef6+\u97f3\u4e50EmbeddingModel+\u5411\u91cf\u5e93=\u97f3\u4e50\u641c\u7d22\u5f15\u64ce<\/p>\n<p>\u5176\u4ed6\u5782\u76f4\u884c\u4e1a\uff0c\u6bd4\u5982\u4eba\u8138\u8bc6\u522b\uff0c\u4e13\u5229\u6587\u4ef6\uff0c\u75c5\u6bd2\u7279\u5f81\uff0c\u53ea\u8981\u8bad\u7ec3\u597d\u5bf9\u5e94\u7684EmbeddingModel\u90fd\u53ef\u4ee5\u5b9e\u5bf9\u5e94\u7684\u641c\u7d22\u5f15\u64ce\u3002<\/p>\n<p>\u672c\u6b21\u5c31\u91c7\u7528\u4e0a\u8ff0\u7684\u6280\u672f\u65b9\u6848\u6765\u5b8c\u6210<strong>\u56fe\u7247\u641c\u7d22\u5f15\u64ce<\/strong>\u7684\u529f\u80fd\u3002<\/p>\n<p>\u62c6\u5206\u6210\u4e0b\u9762\u51e0\u6b65\uff1a\u9009\u578bEmbeddingModel\uff0c\u9009\u578b\u5411\u91cf\u5e93\uff0c\u4ee3\u7801\u7f16\u5199\uff0c\u4ee3\u7801\u793a\u4f8b\u3002<\/p>\n<h2 data-id=\"heading-3\">\u4e8c\uff09Embedding Model\u9009\u578b<\/h2>\n<p><strong>Embedding \u662f\u4e00\u4e2a\u6d6e\u70b9\u6570\u5411\u91cf\uff08\u5217\u8868\uff09\u3002\u4e24\u4e2a\u5411\u91cf\u4e4b\u95f4\u7684\u8ddd\u79bb\u6d4b\u91cf\u5b83\u4eec\u7684\u76f8\u5173\u6027\u3002\u8f83\u5c0f\u7684\u8ddd\u79bb\u8868\u793a\u9ad8\u76f8\u5173\u6027\uff0c\u8f83\u5927\u7684\u8ddd\u79bb\u8868\u793a\u4f4e\u76f8\u5173\u6027\u3002<\/strong><\/p>\n<p><strong>\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u628a\u6240\u6709\u975e\u7ed3\u6784\u5316\u6570\u636e\u8f6c\u5316\u6210\u53ef\u4ee5\u8ba9\u8ba1\u7b97\u673a\u7406\u89e3\u7684\u6709\u8bed\u4e49\u7684\u6570\u636e\u3002<\/strong><\/p>\n<p>\u56fe\u7247Embedding\uff0c\u53ea\u4f1a\u8c03\u7528openai\u63a5\u53e3\u53ef\u641e\u4e0d\u5b9a\u4e86\uff0c\u9700\u8981\u672c\u5730\u8fd0\u884c\u6a21\u578b\u4e86\u3002\u8fd9\u5c31\u4e0d\u5f97\u4e0d\u4e86\u89e3<strong>huggingface<\/strong>\u8fd9\u4e2a\u795e\u5668\u4e86\u3002<\/p>\n<p>huggingface\u56fe\u7247\u5206\u7c7b\u76f8\u5173\u6a21\u578b\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fhuggingface.co%2Fmodels%3Fpipeline_tag%3Dzero-shot-image-classification\" target=\"_blank\" title=\"https:\/\/huggingface.co\/models?pipeline_tag=zero-shot-image-classification\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">huggingface.co\/models?pipe\u2026<\/a><\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/ad4c3e30aeb6917bc4e3bf446b682d2f.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<p>\u6211\u4eec\u8fd8\u662f\u7528\u8001\u5927\u54e5openai\u7684<code>[clip](https:\/\/openai.com\/research\/clip)<\/code>\u6a21\u578b\u8bd5\u8bd5\u6c34\u3002\u6682\u65f6\u5c31\u7528\u6700\u65b0\u7684\uff0c\u4e14\u8d44\u6e90\u5360\u7528\u4e0d\u592a\u591a\u7684<code>[openai\/clip-vit-base-patch16](https:\/\/huggingface.co\/openai\/clip-vit-base-patch16)<\/code>\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/1319522343f9ba14d43f62f75838aab1.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-4\">\u4e09\uff09\u5411\u91cf\u5e93\u6280\u672f\u9009\u578b<\/h2>\n<p><strong>\u5411\u91cf\u6570\u636e\u5e93\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u7528\u6765\u5b58\u50a8\u5411\u91cf\uff0c\u67e5\u8be2\u5411\u91cf\u7684\u6570\u636e\u5e93\u3002<\/strong><\/p>\n<p><strong>1.\u4e13\u7528\u5411\u91cf\u6570\u636e\u5e93<\/strong><\/p>\n<p>\u8fd9\u4e9b\u6570\u636e\u5e93\u4ece\u4e00\u5f00\u59cb\u5c31\u8bbe\u8ba1\u7528\u4e8e\u5904\u7406\u548c\u68c0\u7d22\u5411\u91cf\u6570\u636e\uff0c\u4e13\u95e8\u4e3a\u9ad8\u6548\u7684\u5411\u91cf\u641c\u7d22\u548c\u673a\u5668\u5b66\u4e60\u5e94\u7528\u4f18\u5316\u3002<\/p>\n<p><strong>Milvus<\/strong><\/p>\n<p>\u4f18\u70b9: \u9ad8\u6548\u7684\u5411\u91cf\u68c0\u7d22\uff0c\u9002\u5408\u5927\u89c4\u6a21\u6570\u636e\u96c6\u3002<\/p>\n<p>\u7f3a\u70b9: \u76f8\u5bf9\u8f83\u65b0\uff0c\u793e\u533a\u548c\u8d44\u6e90\u53ef\u80fd\u4e0d\u5982\u6210\u719f\u7684\u4f20\u7edf\u6570\u636e\u5e93\u4e30\u5bcc\u3002<\/p>\n<p><strong>Weaviate<\/strong><\/p>\n<p>\u4f18\u70b9: \u652f\u6301\u56fe\u7ed3\u6784\u548c\u81ea\u7136\u8bed\u8a00\u7406\u89e3\uff0c\u9002\u7528\u4e8e\u590d\u6742\u67e5\u8be2\u3002<\/p>\n<p>\u7f3a\u70b9: \u4f5c\u4e3a\u65b0\u5174\u6280\u672f\uff0c\u53ef\u80fd\u5b58\u5728\u7a33\u5b9a\u6027\u548c\u6210\u719f\u5ea6\u65b9\u9762\u7684\u95ee\u9898\u3002<\/p>\n<p><strong>2.\u4f20\u7edf\u6570\u636e\u5e93\u7684\u5411\u91cf\u6269\u5c55<\/strong><\/p>\n<p>\u8fd9\u4e9b\u662f\u4f20\u7edf\u6570\u636e\u5e93\uff0c\u901a\u8fc7\u6269\u5c55\u6216\u63d2\u4ef6\u652f\u6301\u5411\u91cf\u6570\u636e\u7684\u5b58\u50a8\u548c\u68c0\u7d22\u3002<\/p>\n<p><strong>Elasticsearch<\/strong><\/p>\n<p>\u4f18\u70b9: \u5f3a\u5927\u7684\u5168\u6587\u641c\u7d22\u529f\u80fd\uff0c\u5927\u578b\u793e\u533a\u652f\u6301\u3002<\/p>\n<p>\u7f3a\u70b9: \u5411\u91cf\u641c\u7d22\u53ef\u80fd\u4e0d\u5982\u4e13\u7528\u5411\u91cf\u6570\u636e\u5e93\u90a3\u4e48\u9ad8\u6548\u3002<\/p>\n<p><strong>PostgreSQL (\u4f7f\u7528PGVector\u6216\u5176\u4ed6\u5411\u91cf\u6269\u5c55)<\/strong><\/p>\n<p>\u4f18\u70b9: \u7ed3\u5408\u4e86\u4f20\u7edf\u7684\u5173\u7cfb\u6570\u636e\u5e93\u5f3a\u5927\u529f\u80fd\u548c\u5411\u91cf\u641c\u7d22\u3002<\/p>\n<p>\u7f3a\u70b9: \u5411\u91cf\u641c\u7d22\u7684\u6027\u80fd\u548c\u4f18\u5316\u53ef\u80fd\u4e0d\u53ca\u4e13\u7528\u5411\u91cf\u6570\u636e\u5e93\u3002<\/p>\n<p><strong>Redis<\/strong><\/p>\n<p>\u4f18\u70b9: Redis\u662f\u4e00\u79cd\u975e\u5e38\u6d41\u884c\u7684\u5f00\u6e90\u5185\u5b58\u6570\u636e\u7ed3\u6784\u5b58\u50a8\u7cfb\u7edf\uff0c\u5b83\u4ee5\u5176\u9ad8\u6027\u80fd\u548c\u7075\u6d3b\u6027\u800c\u95fb\u540d\u3002Redis\u901a\u8fc7\u6a21\u5757\u5982RedisAI\u548cRedisVector\u652f\u6301\u5411\u91cf\u6570\u636e\uff0c\u8fd9\u4f7f\u5f97\u5b83\u80fd\u591f\u8fdb\u884c\u9ad8\u901f\u5411\u91cf\u8ba1\u7b97\u548c\u8fd1\u4f3c\u6700\u8fd1\u90bb\uff08ANN\uff09\u641c\u7d22\uff0c\u975e\u5e38\u9002\u5408\u5b9e\u65f6\u5e94\u7528\u3002<\/p>\n<p>\u7f3a\u70b9: \u7531\u4e8eRedis\u4e3b\u8981\u662f\u4f5c\u4e3a\u5185\u5b58\u6570\u636e\u5e93\uff0c\u5927\u89c4\u6a21\u7684\u5411\u91cf\u6570\u636e\u96c6\u53ef\u80fd\u4f1a\u53d7\u5230\u5185\u5b58\u5927\u5c0f\u7684\u9650\u5236\u3002\u6b64\u5916\uff0c\u5b83\u5728\u5904\u7406\u5927\u91cf\u590d\u6742\u7684\u5411\u91cf\u64cd\u4f5c\u65b9\u9762\u53ef\u80fd\u4e0d\u5982\u4e13\u7528\u5411\u91cf\u6570\u636e\u5e93\u90a3\u6837\u9ad8\u6548\u3002<\/p>\n<p><strong>3. \u5411\u91cf\u5e93\u7684\u4e91\u670d\u52a1<\/strong><\/p>\n<p>\u8fd9\u4e9b\u670d\u52a1\u63d0\u4f9b\u4e86\u5411\u91cf\u6570\u636e\u5904\u7406\u548c\u641c\u7d22\u7684\u4e91\u89e3\u51b3\u65b9\u6848\uff0c\u901a\u5e38\u6613\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002<\/p>\n<p><strong>Pinecone<\/strong><\/p>\n<p>\u4f18\u70b9: \u6613\u4e8e\u6269\u5c55\uff0c\u65e0\u9700\u7ba1\u7406\u57fa\u7840\u8bbe\u65bd\uff0c\u9002\u5408\u5feb\u901f\u90e8\u7f72\u3002<\/p>\n<p>\u7f3a\u70b9: \u4f9d\u8d56\u4e8e\u4e91\u63d0\u4f9b\u5546\uff0c\u53ef\u80fd\u5b58\u5728\u6210\u672c\u548c\u6570\u636e\u8fc1\u79fb\u65b9\u9762\u7684\u8003\u8651\u3002<\/p>\n<p><strong>Amazon Elasticsearch Service<\/strong><\/p>\n<p>\u4f18\u70b9: \u5b8c\u5168\u6258\u7ba1\uff0c\u4e0eAWS\u751f\u6001\u7cfb\u7edf\u7d27\u5bc6\u96c6\u6210\u3002<\/p>\n<p>\u7f3a\u70b9: \u53ef\u80fd\u6d89\u53ca\u8f83\u9ad8\u6210\u672c\uff0c\u4e14\u9ad8\u5ea6\u4f9d\u8d56AWS\u670d\u52a1\u3002<\/p>\n<p>\u5bf9\u4e8e\u6211\u6765\u8bf4\u66f4\u503e\u5411\u4e8e\u4f7f\u7528\u4f20\u7edf\u6570\u636e\u5e93\u7684\u5411\u91cf\u6269\u5c55\uff0c\u6bd4\u5982\u8fd9\u91cc\u6211\u4f7f\u7528<strong>Redis+RedisSearch<\/strong>\u6765\u5b9e\u73b0\u5411\u91cf\u5e93\u3002<\/p>\n<p>\u56e0\u4e3a\u4f01\u4e1a\u7ea7\u9879\u76ee\u5f88\u591a\u65f6\u5019\u5df2\u7ecf\u7ef4\u62a4\u4e86\u4e00\u4e2a\u5927\u7684Redis\u96c6\u7fa4\uff0c\u800c\u4e14\u5f88\u591a\u4e91\u5382\u5546\u4e5f\u6682\u65f6\u4e0d\u652f\u6301\u4e13\u7528\u5411\u91cf\u6570\u636e\u5e93\u3002<\/p>\n<p>Redis\u5b98\u65b9\u5bf9\u5411\u91cf\u652f\u6301\u4ecb\u7ecd\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fredis.com%2Fblog%2Frediscover-redis-for-vector-similarity-search%2F\" target=\"_blank\" title=\"https:\/\/redis.com\/blog\/rediscover-redis-for-vector-similarity-search\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">redis.com\/blog\/redisc\u2026<\/a><\/p>\n<h1 data-id=\"heading-5\">\u4e8c\u3001\u4ee3\u7801\u5b9e\u6218<\/h1>\n<h2 data-id=\"heading-6\">\u4e00\uff09\u6280\u672f\u67b6\u6784<\/h2>\n<p>\u5206\u4e3a\u5bfc\u5165\u548c\u641c\u7d22\u4e24\u4e2a\u6d41\u7a0b\u3002<\/p>\n<p>\u5bfc\u5165\u8fc7\u7a0b\uff1a<\/p>\n<p>\u628a\u6211\u4eec\u9700\u8981\u5bfc\u5165\u7684\u4e00\u7bee\u5b50\u56fe\u7247\u96c6\u901a\u8fc7<code>Clip<\/code>\u8f6c\u6210\u5411\u91cf\uff0c\u7136\u540e\u628a\u5411\u91cf\u5bfc\u5165<code>Redis<\/code>\u5b58\u50a8\u8d77\u6765\u3002<\/p>\n<p>\u641c\u7d22\u8fc7\u7a0b\uff1a<\/p>\n<p>\u641c\u7d22\u8fc7\u7a0b\u4e5f\u662f\u7c7b\u4f3c\uff0c\u628a\u6211\u4eec\u60f3\u8981\u641c\u7d22\u7684\u56fe\u7247\u548c\u6587\u672c\u540c\u6837\u4f7f\u7528<code>Clip<\/code>\u4f7f\u7528\u4e5f\u8fdb\u884c\u5411\u91cf\u5316\uff0c\u7136\u540e\u53bb<code>Redis<\/code>\u4e2d\u8fdb\u884c\u5411\u91cf\u68c0\u7d22\uff0c\u5c31\u5b9e\u73b0\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u5566\uff01<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/d018b5bf3416ddc1fe81ef8108893e41.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-7\">\u4e8c\uff09\u51c6\u5907\u56fe\u7247<\/h2>\n<p>\u65e2\u7136\u662f\u56fe\u7247\u641c\u7d22\u5f15\u64ce\uff0c\u5f53\u7136\u5f97\u6709\u6d77\u91cf\u56fe\u7247\u4e86\u3002\u5904\u7406\u591a\u5a92\u4f53\u6587\u4ef6\u7684\u795e\u5668\u767b\u573a\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2FFFmpeg%2FFFmpeg\" target=\"_blank\" title=\"https:\/\/github.com\/FFmpeg\/FFmpeg\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">FFmpeg<\/a><\/p>\n<h3 data-id=\"heading-8\">1\u3001\u5b89\u88c5ffmpeg<\/h3>\n<p>\u5b98\u65b9\u4e0b\u8f7d\u94fe\u63a5\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fffmpeg.org%2Fdownload.html\" target=\"_blank\" title=\"https:\/\/ffmpeg.org\/download.html\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">ffmpeg.org\/download.ht\u2026<\/a><\/p>\n<p>mac\u7cfb\u7edf\u5b89\u88c5\u66f4\u7b80\u5355\uff0c\u76f4\u63a5\u7528homebrew\u5b89\u88c5<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\"><\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs code-block-extension-codeShowNum\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">brew&nbsp;install&nbsp;ffmpeg<\/span>\n<\/code><\/pre>\n<p>\u5176\u4ed6\u64cd\u4f5c\u7cfb\u7edf\uff08linux\uff0cwindow\uff09\u5b89\u88c5\u4e5f\u6bd4\u8f83\u7b80\u5355\uff0c\u53ef\u4ee5\u76f4\u63a5\u53bb\u5b98\u7f51\u4e0b\u8f7d\u3002<\/p>\n<p>\u5b98\u65b9\u4e0b\u8f7d\u94fe\u63a5\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fffmpeg.org%2Fdownload.html\" target=\"_blank\" title=\"https:\/\/ffmpeg.org\/download.html\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">ffmpeg.org\/download.ht\u2026<\/a><\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/a06dea1a23c6dc5a6bd3d0250b0db8bc.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-9\">2\u3001\u751f\u6210\u56fe\u7247<\/h3>\n<p>\u6211\u9009\u4e86\u4e2a\u81ea\u5df1\u6bd4\u8f83\u559c\u6b22\u7684\u7535\u5f71\u300a\u695a\u95e8\u7684\u4e16\u754c\u300b\uff0c\u628a\u89c6\u9891\u6587\u4ef6\u8fdb\u884c\u6bcf\u79d2\u62bd\u5e27\u6765\u751f\u6210\u56fe\u7247\u7d20\u6750\u3002<\/p>\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\">ffmpeg&nbsp;-<span class=\"hljs-selector-tag\">i<\/span>&nbsp;Top022.\u695a\u95e8\u7684\u4e16\u754c<span class=\"hljs-selector-class\">.The<\/span><span class=\"hljs-selector-class\">.Truman<\/span><span class=\"hljs-selector-class\">.Show<\/span>.<span class=\"hljs-number\">1998<\/span><span class=\"hljs-selector-class\">.Bluray<\/span>.<span class=\"hljs-number\">1080<\/span>p<span class=\"hljs-selector-class\">.x265<\/span><span class=\"hljs-selector-class\">.AAC<\/span>(<span class=\"hljs-number\">5.1<\/span>).<span class=\"hljs-number\">2<\/span>Audios<span class=\"hljs-selector-class\">.GREENOTEA<\/span><span class=\"hljs-selector-class\">.mkv<\/span>&nbsp;&nbsp;-r&nbsp;<span class=\"hljs-number\">1<\/span>&nbsp;truman-%<span class=\"hljs-number\">3<\/span>d<span class=\"hljs-selector-class\">.png<\/span><\/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\/c97da0f6b70ca59b64afeb61f55e5d2a.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<p>\u7ecf\u8fc7\u4e00\u6bb5\u65f6\u95f4\u7684cpu\u98de\u901f\u8fd0\u8f6c\uff0c\u5f97\u5230\u4e862000\u591a\u5f20\u56fe\u7247<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/f3f95b8a858e3551e8c036a6583de9f0.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-10\">\u4e09\uff09\u73af\u5883\u51c6\u5907<\/h2>\n<h3 data-id=\"heading-11\">1\u3001\u5b89\u88c5Python<\/h3>\n<p>\u5b89\u88c5python\u7684\u53ef\u4ee5\u76f4\u63a5\u53bb\u5b98\u7f51<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fwww.python.org%2Fdownloads%2F\" target=\"_blank\" title=\"https:\/\/www.python.org\/downloads\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">www.python.org\/downloads\/<\/a><\/p>\n<p>\u82f1\u6587\u4e0d\u592a\u597d\u53ef\u4ee5\u53bb\u770b\u8fd9\u4e2a\u56fd\u4eba\u51fa\u7684\u83dc\u9e1f\u6559\u7a0b<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fwww.runoob.com%2Fpython3%2Fpython3-install.html\" target=\"_blank\" title=\"https:\/\/www.runoob.com\/python3\/python3-install.html\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">www.runoob.com\/python3\/pyt\u2026<\/a><\/p>\n<h3 data-id=\"heading-12\">2\u3001\u5b89\u88c5redis<\/h3>\n<p>\u63a8\u8350\u4f7f\u7528docker\u5b89\u88c5redis\uff0c\u6211\u4eec\u9009\u7528\u4e867.2.0\u7684\u65b0\u7248\u672credis<\/p>\n<p>docker-compose\u6587\u4ef6\u53c2\u8003\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">yaml<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-yaml code-block-extension-codeShowNum\" lang=\"yaml\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-string\">version:<\/span>&nbsp;<span class=\"hljs-string\">\"2.4\"<\/span><\/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-attr\">services:<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;<span class=\"hljs-attr\">redis-server:<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-string\">image:<\/span>&nbsp;<span class=\"hljs-string\">redis\/redis-stack-server:7.2.0-v6<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-string\">container_name:<\/span>&nbsp;<span class=\"hljs-string\">redis-server<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">ports:<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-string\">-<\/span>&nbsp;<span class=\"hljs-number\">6379<\/span><span class=\"hljs-string\">:6379<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">volumes:<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-string\">-<\/span>&nbsp;<span class=\"hljs-string\">.\/redis-data:\/data<\/span><\/span>\n<\/code><\/pre>\n<p>\u542f\u52a8redis<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\"><\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs code-block-extension-codeShowNum\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">docker-compose&nbsp;up&nbsp;-d<\/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\/7fa80302cf29d7acc7584ef17dd2d9cc.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-13\">\u56db\uff09\u56fe\u7247\u5411\u91cf\u5316<\/h2>\n<h3 data-id=\"heading-14\">1\u3001\u5bfc\u5165\u5411\u91cf\u5e93<\/h3>\n<p>\u6307\u5b9a\u6211\u4eec\u56fe\u7247\u7684\u76ee\u5f55\uff0c\u628a\u6bcf\u5f20\u56fe\u7247\u4f7f\u7528clip\u8fdb\u884c\u5411\u91cf\u5316\uff0c\u7136\u540e\u5b58\u5165redis\u5411\u91cf\u5e93\u4e2d\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\">import&nbsp;torch<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">import&nbsp;numpy&nbsp;as&nbsp;np<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from&nbsp;transformers&nbsp;import&nbsp;CLIPProcessor,&nbsp;CLIPModel<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">from&nbsp;PIL&nbsp;import&nbsp;Image<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">import&nbsp;time<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">import&nbsp;os<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">import&nbsp;redis<\/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-comment\">#&nbsp;\u8fde\u63a5&nbsp;Redis&nbsp;\u6570\u636e\u5e93\uff0c\u5730\u5740\u6362\u6210\u4f60\u81ea\u5df1\u7684&nbsp;Redis&nbsp;\u5730\u5740<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">client<\/span>&nbsp;=&nbsp;redis.Redis(host=<span class=\"hljs-string\">\"localhost\"<\/span>,&nbsp;port=<span class=\"hljs-number\">6379<\/span>,&nbsp;decode_responses=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.ping()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">print(\"redis&nbsp;connected:\",&nbsp;res)<\/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-attr\">model_name_or_local_path<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"openai\/clip-vit-base-patch16\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><span class=\"hljs-attr\">model<\/span>&nbsp;=&nbsp;CLIPModel.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-attr\">processor<\/span>&nbsp;=&nbsp;CLIPProcessor.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><span class=\"hljs-comment\">#&nbsp;\u6362\u6210\u4f60\u7684\u56fe\u7247\u76ee\u5f55<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-attr\">image_directory<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"\/Users\/david\/Downloads\/turman\"<\/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\"><span class=\"hljs-attr\">png_files<\/span>&nbsp;=&nbsp;[filename&nbsp;for&nbsp;filename&nbsp;in&nbsp;os.listdir(image_directory)&nbsp;if&nbsp;filename.endswith(<span class=\"hljs-string\">\".png\"<\/span>)]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><span class=\"hljs-attr\">sorted_png_files<\/span>&nbsp;=&nbsp;sorted(png_files,&nbsp;key=lambda&nbsp;x:&nbsp;int(x.split(<span class=\"hljs-string\">'-'<\/span>)[-<span class=\"hljs-number\">1<\/span>].split(<span class=\"hljs-string\">'.'<\/span>)[<span class=\"hljs-number\">0<\/span>]))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><span class=\"hljs-comment\">#&nbsp;\u521d\u59cb\u5316&nbsp;Redis&nbsp;Pipeline<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\"><span class=\"hljs-attr\">pipeline<\/span>&nbsp;=&nbsp;client.pipeline()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">for&nbsp;i,&nbsp;png_file&nbsp;in&nbsp;enumerate(sorted_png_files,&nbsp;<span class=\"hljs-attr\">start<\/span>=<span class=\"hljs-number\">1<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u521d\u59cb\u5316&nbsp;Redis\uff0c\u5148\u4f7f\u7528&nbsp;PNG&nbsp;\u6587\u4ef6\u540d\u4f5c\u4e3a&nbsp;Key&nbsp;\u548c&nbsp;Value\uff0c\u540e\u7eed\u518d\u66f4\u65b0\u4e3a\u56fe\u7247\u7279\u5f81\u5411\u91cf<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;pipeline.json().set(png_file,&nbsp;\"$\",&nbsp;png_file)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\"><span class=\"hljs-attr\">batch_size<\/span>&nbsp;=&nbsp;<span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">with&nbsp;torch.no_grad():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;idx,&nbsp;png_file&nbsp;in&nbsp;enumerate(sorted_png_files,&nbsp;<span class=\"hljs-attr\">start<\/span>=<span class=\"hljs-number\">1<\/span>):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f\"{idx}:&nbsp;{png_file}\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">start<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">image<\/span>&nbsp;=&nbsp;Image.open(f<span class=\"hljs-string\">\"{image_directory}\/{png_file}\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">inputs<\/span>&nbsp;=&nbsp;processor(images=image,&nbsp;return_tensors=<span class=\"hljs-string\">\"pt\"<\/span>,&nbsp;padding=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">image_features<\/span>&nbsp;=&nbsp;model.get_image_features(inputs.pixel_values)[batch_size-<span class=\"hljs-number\">1<\/span>]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">embeddings<\/span>&nbsp;=&nbsp;image_features.numpy().astype(np.float32).tolist()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print('image_features:',&nbsp;embeddings)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">vector_dimension<\/span>&nbsp;=&nbsp;len(embeddings)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print('vector_dimension:',&nbsp;vector_dimension)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">end<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print('%s&nbsp;Seconds'%(end-start))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u66f4\u65b0&nbsp;Redis&nbsp;\u6570\u636e\u5e93\u4e2d\u7684\u6587\u4ef6\u5411\u91cf<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pipeline.json().set(png_file,&nbsp;\"$\",&nbsp;embeddings)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;pipeline.execute()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print('redis&nbsp;set:',&nbsp;res)<\/span>\n<\/code><\/pre>\n<p>\u5bfc\u5165\u5b8c\u6210\u540e\u53ef\u4ee5\u770b\u5230\uff0c\u6211\u4eec\u76842000\u591a\u5f20\u56fe\u7247\u90fd\u4f5c\u4e3akey\u8f6c\u5b58\u50a8\u5230redis\u4e2d\u4e86\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/6d5b2d5fae885f663117738c713f6bf1.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<p>\u6211\u4eec\u770b\u5230\u6bcf\u4e2akey\u7684value\u90fd\u662f<strong>512\u4f4d\u7684\u6d6e\u70b9\u6570\u7ec4<\/strong>\uff0c512\u4f4d\u5c31\u4ee3\u8868\u6211\u4eec\u5411\u91cf\u7684\u7ef4\u5ea6\u662f512\u7ef4\uff0c\u7ef4\u5ea6\u8d8a\u9ad8\u4ee3\u8868\u7740\u5b58\u50a8\u7684\u7279\u5f81\u8d8a\u591a\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\">import&nbsp;redis<\/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-comment\">#&nbsp;\u8fde\u63a5&nbsp;Redis&nbsp;\u6570\u636e\u5e93\uff0c\u5730\u5740\u6362\u6210\u4f60\u81ea\u5df1\u7684&nbsp;Redis&nbsp;\u5730\u5740<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-attr\">client<\/span>&nbsp;=&nbsp;redis.Redis(host=<span class=\"hljs-string\">\"localhost\"<\/span>,&nbsp;port=<span class=\"hljs-number\">6379<\/span>,&nbsp;decode_responses=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.ping()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">print(\"redis&nbsp;connected:\",&nbsp;res)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.json().get(<span class=\"hljs-string\">\"truman-1234.png\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">print(res)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">print(len(res))<\/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\/4d589d68b518393d54311e0f6d1ec6d6.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-15\">2\u3001\u6784\u5efa\u5411\u91cf\u7d22\u5f15<\/h3>\n<p>\u4f7f\u7528RedisSearch\u6765\u628a\u4e0a\u9762\u7684\u5411\u91cf\u6784\u5efa\u7d22\u5f15\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\">import&nbsp;redis<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from&nbsp;redis.commands.search.field&nbsp;import&nbsp;VectorField<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from&nbsp;redis.commands.search.indexDefinition&nbsp;import&nbsp;IndexDefinition,&nbsp;IndexType<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><span class=\"hljs-comment\">#&nbsp;\u8fde\u63a5&nbsp;Redis&nbsp;\u6570\u636e\u5e93\uff0c\u5730\u5740\u6362\u6210\u4f60\u81ea\u5df1\u7684&nbsp;Redis&nbsp;\u5730\u5740<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-attr\">client<\/span>&nbsp;=&nbsp;redis.Redis(host=<span class=\"hljs-string\">\"localhost\"<\/span>,&nbsp;port=<span class=\"hljs-number\">6379<\/span>,&nbsp;decode_responses=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.ping()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">print(\"redis&nbsp;connected:\",&nbsp;res)<\/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-comment\">#&nbsp;\u4e4b\u524d\u6a21\u578b\u5904\u7406\u7684\u5411\u91cf\u7ef4\u5ea6\u662f&nbsp;512<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-attr\">vector_dimension<\/span>&nbsp;=&nbsp;<span class=\"hljs-number\">512<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-comment\">#&nbsp;\u7ed9\u7d22\u5f15\u8d77\u4e2a\u4e0e\u4f17\u4e0d\u540c\u7684\u540d\u5b57<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><span class=\"hljs-attr\">vector_indexes_name<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"idx:truman_indexes\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><span class=\"hljs-comment\">#&nbsp;\u5b9a\u4e49\u5411\u91cf\u6570\u636e\u5e93\u7684&nbsp;Schema<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-attr\">schema<\/span>&nbsp;=&nbsp;(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">&nbsp;&nbsp;&nbsp;&nbsp;VectorField(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"$\",<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"FLAT\",<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"TYPE\":&nbsp;\"FLOAT32\",<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"DIM\":&nbsp;vector_dimension,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"DISTANCE_METRIC\":&nbsp;\"COSINE\",<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">as_name<\/span>=<span class=\"hljs-string\">\"vector\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\"><span class=\"hljs-comment\">#&nbsp;\u8bbe\u7f6e\u4e00\u4e2a\u524d\u7f00\uff0c\u65b9\u4fbf\u540e\u7eed\u67e5\u8be2\uff0c\u4e5f\u4f5c\u4e3a\u547d\u540d\u7a7a\u95f4\u548c\u53ef\u80fd\u7684\u666e\u901a\u6570\u636e\u8fdb\u884c\u9694\u79bb<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\"><span class=\"hljs-comment\">#&nbsp;\u8fd9\u91cc\u8bbe\u7f6e\u4e3a&nbsp;truman-\uff0c\u672a\u6765\u53ef\u4ee5\u901a\u8fc7&nbsp;truman-*&nbsp;\u6765\u67e5\u8be2\u6240\u6709\u6570\u636e<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\"><span class=\"hljs-attr\">definition<\/span>&nbsp;=&nbsp;IndexDefinition(prefix=[<span class=\"hljs-string\">\"truman-\"<\/span>],&nbsp;index_type=IndexType.JSON)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><span class=\"hljs-comment\">#&nbsp;\u4f7f\u7528&nbsp;Redis&nbsp;\u5ba2\u6237\u7aef\u5b9e\u4f8b\u6839\u636e\u4e0a\u9762\u7684&nbsp;Schema&nbsp;\u548c\u5b9a\u4e49\u521b\u5efa\u7d22\u5f15<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.ft(vector_indexes_name).create_index(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">fields<\/span>=schema,&nbsp;definition=definition<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">print(\"create_index:\",&nbsp;res)<\/span>\n<\/code><\/pre>\n<h2 data-id=\"heading-16\">\u4e94\uff09\u4ee5\u56fe\u641c\u56fe<\/h2>\n<p>\u6fc0\u52a8\u4eba\u5fc3\u7684\u65f6\u523b\u5230\u4e86\uff0c\u7ec8\u4e8e\u53ef\u4ee5\u770b\u5230\u7ed3\u679c\u4e86\uff01~<\/p>\n<p>\u8fd0\u884c\u4e0b\u65b9\u4ee3\u7801<\/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\">import&nbsp;torch<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">import&nbsp;numpy&nbsp;as&nbsp;np<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from&nbsp;transformers&nbsp;import&nbsp;CLIPProcessor,&nbsp;CLIPModel<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">from&nbsp;PIL&nbsp;import&nbsp;Image<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">import&nbsp;time<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">import&nbsp;redis<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">from&nbsp;redis.commands.search.query&nbsp;import&nbsp;Query<\/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\">model_name_or_local_path<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"openai\/clip-vit-base-patch16\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">model<\/span>&nbsp;=&nbsp;CLIPModel.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-attr\">processor<\/span>&nbsp;=&nbsp;CLIPProcessor.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><span class=\"hljs-attr\">vector_indexes_name<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"idx:truman_indexes\"<\/span><\/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-attr\">client<\/span>&nbsp;=&nbsp;redis.Redis(host=<span class=\"hljs-string\">\"localhost\"<\/span>,&nbsp;port=<span class=\"hljs-number\">6379<\/span>,&nbsp;decode_responses=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.ping()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">print(\"redis&nbsp;connected:\",&nbsp;res)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-attr\">start<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-attr\">image<\/span>&nbsp;=&nbsp;Image.open(<span class=\"hljs-string\">\"truman-173.png\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-attr\">batch_size<\/span>&nbsp;=&nbsp;<span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">with&nbsp;torch.no_grad():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">inputs<\/span>&nbsp;=&nbsp;processor(images=image,&nbsp;return_tensors=<span class=\"hljs-string\">\"pt\"<\/span>,&nbsp;padding=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">image_features<\/span>&nbsp;=&nbsp;model.get_image_features(inputs.pixel_values)[batch_size-<span class=\"hljs-number\">1<\/span>]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">embeddings<\/span>&nbsp;=&nbsp;image_features.numpy().astype(np.float32).tobytes()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;&nbsp;&nbsp;print('image_features:',&nbsp;embeddings)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\"><span class=\"hljs-comment\">#&nbsp;\u6784\u5efa\u8bf7\u6c42\u547d\u4ee4\uff0c\u67e5\u627e\u548c\u6211\u4eec\u63d0\u4f9b\u56fe\u7247\u6700\u76f8\u8fd1\u7684&nbsp;5&nbsp;\u5f20\u56fe\u7247<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\"><span class=\"hljs-attr\">query_vector<\/span>&nbsp;=&nbsp;embeddings<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><span class=\"hljs-attr\">query<\/span>&nbsp;=&nbsp;(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;Query(\"(*)=&gt;<span class=\"hljs-section\">[KNN&nbsp;5&nbsp;@vector&nbsp;$query_vector&nbsp;AS&nbsp;vector_score]<\/span>\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;.sort_by(\"vector_score\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;&nbsp;&nbsp;.return_fields(\"$\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;&nbsp;&nbsp;.dialect(2)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\"><span class=\"hljs-comment\">#&nbsp;\u5b9a\u4e49\u4e00\u4e2a\u67e5\u8be2\u51fd\u6570\uff0c\u5c06\u6211\u4eec\u67e5\u627e\u7684\u7ed3\u679c\u7684&nbsp;ID&nbsp;\u6253\u5370\u51fa\u6765\uff08\u56fe\u7247\u540d\u79f0\uff09<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">def&nbsp;dump_query(query,&nbsp;query_vector,&nbsp;<span class=\"hljs-attr\">extra_params<\/span>={}):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">result_docs<\/span>&nbsp;=&nbsp;(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.ft(vector_indexes_name)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.search(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"query_vector\":&nbsp;query_vector<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;extra_params,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"49\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.docs<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"50\">&nbsp;&nbsp;&nbsp;&nbsp;)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"51\">&nbsp;&nbsp;&nbsp;&nbsp;print(result_docs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"52\">&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;doc&nbsp;in&nbsp;result_docs:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(doc<span class=\"hljs-section\">['id']<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"54\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"55\">dump_query(query,&nbsp;query_vector,&nbsp;{})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"56\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"57\"><span class=\"hljs-attr\">end<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"58\">print('%s&nbsp;Seconds'%(end-start))<\/span>\n<\/code><\/pre>\n<p>\u6211\u4eec\u641c\u7d22\u8ddf\u8fd9\u5f20\u56fe\u7c7b\u4f3c\u76845\u5f20\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\/0ead207362a28dc9be4380daa007a30a.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/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\/fd1c03f5234159712af484777415eb79.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/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\/9ffdc41923bc579d8faf397db4094ac5.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<p>\u9996\u5148\u539f\u56fe\u662f\u88ab\u641c\u51fa\u6765\u4e86\uff0c\u7136\u540e\u641c\u51fa\u7279\u5f81\u76f8\u4f3c\u7684\u56fe\u7247\u4e86\uff0c\u611f\u89c9\u8fd8\u4e0d\u9519\u7684\u6837\u5b50\u3002<\/p>\n<h2 data-id=\"heading-17\">\u516d\uff09\u6587\u5b57\u8bc6\u56fe<\/h2>\n<p>clip\u8fd8\u5177\u6709\u8bc6\u56fe\u80fd\u529b\uff0c\u53ef\u4ee5\u7b97\u51fa\u7ed9\u51fa\u8bcd\u6570\u7ec4\u548c\u56fe\u7247\u76f8\u4f3c\u5ea6\u7684\u6982\u7387\u5bc6\u5ea6\u3002\u8fd9\u91cc\u7ed9\u4ed6\u4e00\u4e2a\u56fe\u7247\u548c\u4e00\u7ec4\u5355\u8bcd<code>['dog', 'cat', 'night', 'astronaut', 'man', 'smiling', 'wave', 'smiling man wave']<\/code>\uff0c\u8ba9\u4ed6\u7ed9\u6211\u7b97\u7b97\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/9a6450cf40c3ba66a1d92264a9c8f0f5.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/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\">import&nbsp;torch<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from&nbsp;transformers&nbsp;import&nbsp;CLIPProcessor,&nbsp;CLIPModel<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from&nbsp;PIL&nbsp;import&nbsp;Image<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">import&nbsp;time<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-comment\">#&nbsp;\u9ed8\u8ba4\u4ece&nbsp;HuggingFace&nbsp;\u52a0\u8f7d\u6a21\u578b\uff0c\u4e5f\u53ef\u4ee5\u4ece\u672c\u5730\u52a0\u8f7d\uff0c\u9700\u8981\u63d0\u524d\u4e0b\u8f7d\u5b8c\u6bd5<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">model_name_or_local_path<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"openai\/clip-vit-base-patch16\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-comment\">#&nbsp;\u52a0\u8f7d\u6a21\u578b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-attr\">model<\/span>&nbsp;=&nbsp;CLIPModel.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">processor<\/span>&nbsp;=&nbsp;CLIPProcessor.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-comment\">#&nbsp;\u8bb0\u5f55\u5904\u7406\u5f00\u59cb\u65f6\u95f4<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><span class=\"hljs-attr\">start<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><span class=\"hljs-comment\">#&nbsp;\u8bfb\u53d6\u5f85\u5904\u7406\u56fe\u7247<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><span class=\"hljs-attr\">image<\/span>&nbsp;=&nbsp;Image.open(<span class=\"hljs-string\">\"truman-170.png\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-comment\">#&nbsp;\u5904\u7406\u56fe\u7247\u6570\u91cf\uff0c\u8fd9\u91cc\u6bcf\u6b21\u53ea\u5904\u7406\u4e00\u5f20\u56fe\u7247<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><span class=\"hljs-attr\">batch_size<\/span>&nbsp;=&nbsp;<span class=\"hljs-number\">1<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-comment\">#&nbsp;\u8981\u68c0\u6d4b\u662f\u5426\u5728\u56fe\u7247\u4e2d\u51fa\u73b0\u7684\u5185\u5bb9<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-attr\">text<\/span>&nbsp;=&nbsp;[<span class=\"hljs-string\">'dog'<\/span>,&nbsp;<span class=\"hljs-string\">'cat'<\/span>,&nbsp;<span class=\"hljs-string\">'night'<\/span>,&nbsp;<span class=\"hljs-string\">'astronaut'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-string\">'man'<\/span>,&nbsp;<span class=\"hljs-string\">'smiling'<\/span>,&nbsp;<span class=\"hljs-string\">'wave'<\/span>,&nbsp;<span class=\"hljs-string\">'smiling&nbsp;man&nbsp;wave'<\/span>]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">with&nbsp;torch.no_grad():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u5c06\u56fe\u7247\u4f7f\u7528\u6a21\u578b\u52a0\u8f7d\uff0c\u8f6c\u6362\u4e3a&nbsp;PyTorch&nbsp;\u7684&nbsp;Tensor&nbsp;\u6570\u636e\u7c7b\u578b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u76f8\u6bd4\u8f83\u7b2c\u4e00\u7bc7\u6587\u7ae0\u4e2d\u7684\u4f8b\u5b50&nbsp;1.how-to-embededing\/app.py\uff0c\u8fd9\u91cc\u591a\u4e86\u4e00\u4e2a&nbsp;text&nbsp;\u53c2\u6570<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">inputs<\/span>&nbsp;=&nbsp;processor(text=text,&nbsp;images=image,&nbsp;return_tensors=<span class=\"hljs-string\">\"pt\"<\/span>,&nbsp;padding=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u5c06&nbsp;inputs&nbsp;\u4e2d\u7684\u5185\u5bb9\u89e3\u5305\uff0c\u4f20\u9012\u7ed9\u6a21\u578b\uff0c\u8c03\u7528\u6a21\u578b\u5904\u7406\u56fe\u7247\u548c\u6587\u672c<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">outputs<\/span>&nbsp;=&nbsp;model(**inputs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u5c06\u539f\u59cb\u6a21\u578b\u8f93\u51fa\u8f6c\u6362\u4e3a\u7c7b\u522b\u6982\u7387\u5206\u5e03\uff08\u5728\u7c7b\u522b\u7ef4\u5ea6\u4e0a\u6267\u884c&nbsp;softmax&nbsp;\u6fc0\u6d3b\u51fd\u6570\uff09<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">probs<\/span>&nbsp;=&nbsp;outputs.logits_per_image.softmax(dim=<span class=\"hljs-number\">1<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">end<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u8bb0\u5f55\u5904\u7406\u7ed3\u675f\u65f6\u95f4<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;print('%s&nbsp;Seconds'&nbsp;%&nbsp;(end&nbsp;-&nbsp;start))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u6253\u5370\u6240\u6709\u7684\u6982\u7387\u5206\u5e03<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(len(text)):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(text<span class=\"hljs-section\">[i]<\/span>,&nbsp;\":\",&nbsp;probs<span class=\"hljs-section\">[0]<\/span><span class=\"hljs-section\">[i]<\/span>)<\/span>\n<\/code><\/pre>\n<p>\u7ed3\u679c**smiling man wave(<strong>\u5fae\u7b11\u7684\u7537\u4eba\u6325\u624b<\/strong>)**\u8fd9\u4e2a\u8bcd\u7684\u6982\u7387\u6700\u5927\uff0c\u786e\u5b9e\u8ddf\u6211\u4eec\u56fe\u7247\u7684\u7279\u5f81\u4e00\u81f4\u3002<\/p>\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-number\">8<\/span><span class=\"hljs-selector-class\">.use-clip-detect-element<\/span>&nbsp;git:(main)&nbsp;\u2717&nbsp;python&nbsp;app.py<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-number\">0.247056245803833<\/span>&nbsp;Seconds<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">dog&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0072<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">cat&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0011<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">night&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0029<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">astronaut&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0003<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">man&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0200<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">smiling&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0086<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">wave&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.0117<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">smiling&nbsp;man&nbsp;wave&nbsp;:&nbsp;<span class=\"hljs-built_in\">tensor<\/span>(<span class=\"hljs-number\">0.9482<\/span>)<\/span>\n<\/code><\/pre>\n<h2 data-id=\"heading-18\">\u4e03\uff09\u6587\u5b57\u641c\u56fe<\/h2>\n<p>\u628a\u6587\u5b57\u505aEmbedding\uff0c\u53bbredis\u505a\u5411\u91cf\u68c0\u7d22\u5c31\u53ef\u4ee5\u5b9e\u73b0\u6587\u7ae0\u641c\u56fe\u7684\u80fd\u529b\u4e86\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\">import&nbsp;torch<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">import&nbsp;numpy&nbsp;as&nbsp;np<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from&nbsp;transformers&nbsp;import&nbsp;CLIPProcessor,&nbsp;CLIPModel,&nbsp;CLIPTokenizer<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">import&nbsp;time<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">import&nbsp;redis<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">from&nbsp;redis.commands.search.query&nbsp;import&nbsp;Query<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-attr\">model_name_or_local_path<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"openai\/clip-vit-base-patch16\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-attr\">model<\/span>&nbsp;=&nbsp;CLIPModel.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">processor<\/span>&nbsp;=&nbsp;CLIPProcessor.from_pretrained(model_name_or_local_path)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-comment\">#&nbsp;\u5904\u7406\u6587\u672c\u9700\u8981\u5f15\u5165<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-attr\">tokenizer<\/span>&nbsp;=&nbsp;CLIPTokenizer.from_pretrained(model_name_or_local_path)<\/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-attr\">vector_indexes_name<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"idx:truman_indexes\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-attr\">client<\/span>&nbsp;=&nbsp;redis.Redis(host=<span class=\"hljs-string\">\"localhost\"<\/span>,&nbsp;port=<span class=\"hljs-number\">6379<\/span>,&nbsp;decode_responses=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><span class=\"hljs-attr\">res<\/span>&nbsp;=&nbsp;client.ping()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">print(\"redis&nbsp;connected:\",&nbsp;res)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-attr\">start<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><span class=\"hljs-comment\">#&nbsp;\u8c03\u7528\u6a21\u578b\u83b7\u53d6\u6587\u672c\u7684&nbsp;embeddings<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">def&nbsp;get_text_embedding(text):&nbsp;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">inputs<\/span>&nbsp;=&nbsp;tokenizer(text,&nbsp;return_tensors&nbsp;=&nbsp;<span class=\"hljs-string\">\"pt\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">text_embeddings<\/span>&nbsp;=&nbsp;model.get_text_features(**inputs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">embedding_as_np<\/span>&nbsp;=&nbsp;text_embeddings.cpu().detach().numpy()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">embeddings<\/span>&nbsp;=&nbsp;embedding_as_np.astype(np.float32).tobytes()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;embeddings<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">with&nbsp;torch.no_grad():<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;\u83b7\u53d6\u6587\u672c\u7684&nbsp;embeddings<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">text_embeddings<\/span>&nbsp;=&nbsp;get_text_embedding(<span class=\"hljs-string\">'Say&nbsp;hello'<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">#&nbsp;text_embeddings&nbsp;=&nbsp;get_text_embedding('smiling&nbsp;man')<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\"><span class=\"hljs-attr\">query_vector<\/span>&nbsp;=&nbsp;text_embeddings<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\"><span class=\"hljs-attr\">query<\/span>&nbsp;=&nbsp;(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;&nbsp;&nbsp;Query(\"(*)=&gt;<span class=\"hljs-section\">[KNN&nbsp;5&nbsp;@vector&nbsp;$query_vector&nbsp;AS&nbsp;vector_score]<\/span>\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">&nbsp;&nbsp;&nbsp;&nbsp;.sort_by(\"vector_score\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp;&nbsp;&nbsp;&nbsp;.return_fields(\"$\")<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp;&nbsp;&nbsp;&nbsp;.dialect(2)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">def&nbsp;dump_query(query,&nbsp;query_vector,&nbsp;<span class=\"hljs-attr\">extra_params<\/span>={}):<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">result_docs<\/span>&nbsp;=&nbsp;(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.ft(vector_indexes_name)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.search(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"49\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"query_vector\":&nbsp;query_vector<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"50\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"51\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;extra_params,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"52\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.docs<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"54\">&nbsp;&nbsp;&nbsp;&nbsp;)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"55\">&nbsp;&nbsp;&nbsp;&nbsp;print(result_docs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"56\">&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;doc&nbsp;in&nbsp;result_docs:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"57\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(doc<span class=\"hljs-section\">['id']<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"58\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"59\">dump_query(query,&nbsp;query_vector,&nbsp;{})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"60\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"61\"><span class=\"hljs-attr\">end<\/span>&nbsp;=&nbsp;time.time()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"62\">print('%s&nbsp;Seconds'%(end-start))<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u662f\u641c\u7d22<code>smiling man<\/code>\u7684top5\u7ed3\u679c\uff0c\u786e\u5b9e\u662f\u53ef\u4ee5\u5b9e\u73b0\u901a\u8fc7\u6211\u4eec\u7684\u8bed\u4e49\u8fdb\u884c\u641c\u7d22\u56fe\u7247\u4e86\uff01<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/153db95807c99b4cd3e7c851ee476a74.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<p>\u518d\u641c\u7d22<code>Say hello<\/code>\uff0c\u4e5f\u641c\u5230\u4e86\u4e0a\u9762\u5927\u7b11\u6253\u62db\u547c\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\/c55f4c27a25a81ddcfedfacf89702411.png\" alt=\"\u627e\u4e0d\u5230\u60f3\u627e\u7684\u56fe\u7247\uff1f\u534a\u5c0f\u65f6\uff0c\u5e2e\u4f60\u5b9e\u73b0\u4e00\u4e2aAI\u7248\u201c\u56fe\u7247\u641c\u7d22\u5f15\u64ce\u201d\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-19\">\u4e09\u3001\u603b\u7ed3<\/h1>\n<p>\u5b8c\u6574\u4ee3\u7801\u94fe\u63a5\uff1a<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fhehan-wang%2Fsimple-image-search-engine\" target=\"_blank\" title=\"https:\/\/github.com\/hehan-wang\/simple-image-search-engine\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">github.com\/hehan-wang\/\u2026<\/a><\/p>\n<p>AI\u7684\u5feb\u901f\u53d1\u5c55\u53ef\u4ee5\u8ba9\u6211\u4eec\u4e00\u4e2a\u4e0d\u662f\u673a\u5668\u5b66\u4e60\u4e13\u4e1a\u7684\u4e5f\u53ef\u4ee5\u7528\u6a21\u578b\u505a\u51fa\u4e00\u4e2a\u6709\u8da3\u53c8\u6709\u4e00\u4e9b\u4ef7\u503c\u7684AI\u9879\u76ee\u3002<\/p>\n<p>\u4e0b\u9762\u662f\u6211\u7684\u51e0\u4e2a\u542f\u53d1<\/p>\n<p>1.\u5b66\u4e60AI\u4ece\u8c03\u63a5\u53e3\u5f00\u59cb\uff0c\u4f46\u4e0d\u8981\u53ea\u662f\u8c03\u63a5\u53e3\u3002<\/p>\n<p>\u8c03OPENAI\u7684API\u662f\u6bd4\u8f83\u7b80\u5355\uff0c\u4e0a\u624b\u5feb\uff0c\u53ef\u4ee5\u5feb\u901f\u505a\u51fa\u4e00\u4e9b\u6848\u4f8b\u3002\u4f46\u4e0d\u8981\u628a\u601d\u7ef4\u6846\u5728\u8c03\u63a5\u53e3\u91cc\uff0cHuggingface\u4e0a\u8fd8\u6709\u5927\u91cf\u597d\u73a9\u7684\u6a21\u578b\uff0c\u4e5f\u4e0d\u4e00\u5b9a\u9700\u8981gpu\uff0ccpu\u4e0a\u4e5f\u53ef\u4ee5\u73a9\u8d77\u6765\uff0c\u8981\u591a\u4e0a\u624b\u5c1d\u8bd5\uff0c\u5176\u5b9e\u6ca1\u60f3\u8c61\u4e2d\u90a3\u4e48\u96be\u3002<\/p>\n<p>2.\u4ea7\u54c1\u5316<\/p>\n<p>\u6211\u4eec\u8fd9\u91cc\u53ea\u662f\u6295\u5582\u4e86\u4e00\u90e8\u7535\u5f71\uff0c\u5f53\u6211\u4eec\u6295\u5582\u5927\u91cf\u7535\u5f71\uff0c\u5e76\u505a\u51faui\u754c\u9762\u7ed9\u666e\u901a\u7528\u6237\u4f7f\u7528\uff0c\u8fd9\u91cc\u8fd8\u662f\u6709\u5f88\u5927\u5546\u4e1a\u4ef7\u503c\u7684\u3002<\/p>","protected":false},"excerpt":{"rendered":"<p>\u641c\u7d22\u5f15\u64ce\u53ef\u4ee5\u641c\u7d22\u4e92\u8054\u7f51\u4e0a\u7684\u6240\u6709\u6587\u5b57\u5185\u5bb9\uff0c\u5bf9\u7ed3\u6784\u5316\u7684\u6570\u636e\u53ef\u4ee5\u8bc6\u522b\u7684\u975e\u5e38\u7cbe\u51c6\uff0c\u4f46\u662f\u5bf9\u4e8e\u975e\u7ed3\u6784\u5316\u7684\u6570\u636e\uff0c\u6bd4\u5982\u56fe\u7247\uff0c\u89c6\u9891\uff0c\u97f3\u9891\u5374\u65e0\u80fd\u4e3a\u529b\u3002 \u6bd4\u5982\u6211\u662f\u4e2a\u81ea\u5a92\u4f53\u4f5c\u8005\u60f3\u8981\u5f15\u7528\u7535\u5f71\u4e2d\u67d0\u4e2a\u7247\u6bb5\uff0c\u76f4\u63a5\u7528\u4f20\u7edf\u641c\u7d22\u5f15\u64ce\u5b8c\u5168\u4e0d<\/p>\n","protected":false},"author":1,"featured_media":10675,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","views":"3","footnotes":""},"categories":[3],"tags":[126,127,128,129,136],"collection":[],"class_list":["post-1498","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fenlei2","tag-gpt","tag-ai","tag-128","tag-129","tag-136"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1498","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=1498"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media\/10675"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1498"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}