<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>FastAPI on Chang Luo</title>
		<link>https://www.luochang.ink/tags/fastapi/</link>
		<description>Recent content in FastAPI on Chang Luo</description>
		<generator>Hugo</generator>
		<language>zh-CN</language>
		
		
		
		
			<lastBuildDate>Sun, 29 Dec 2024 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://www.luochang.ink/tags/fastapi/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>搭建一款简单的『以文搜图』应用</title>
				<link>https://www.luochang.ink/posts/clip_app/</link>
				<pubDate>Sun, 29 Dec 2024 00:00:00 +0000</pubDate>
				<guid>https://www.luochang.ink/posts/clip_app/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;在手机相册搜索框中输入“笔记本电脑”时，即使照片本身并未包含“笔记本电脑”这几个字，相关图片依然能够被精准地检索出来。这说明现代相册 APP 不仅使用图片 OCR 文本来召回搜索结果。它综合使用了多种技术，包括多模态技术。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文使用多模态模型 CLIP 搭建一个简单的『以文搜图』应用，实现与相册 APP 类似的搜索效果。&lt;/p&gt;&#xA;&lt;p&gt;GitHub 项目地址：&lt;a href=&#34;https://github.com/luochang212/clip-app&#34; target=&#34;_blank&#34;&gt;clip-app&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;本文涉及的内容包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用 FastAPI 搭建图文向量生成服务&lt;/li&gt;&#xA;&lt;li&gt;用 FastAPI 搭建 Faiss 向量搜索服务&lt;/li&gt;&#xA;&lt;li&gt;集成以上两个服务，实现『以文搜图』应用&lt;/li&gt;&#xA;&lt;li&gt;使用 &lt;code&gt;@torch.inference_mode()&lt;/code&gt; 装饰器，优化推理性能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;✨ 如果你对多模态模型的效果有更高的要求，可以尝试 &lt;a href=&#34;https://huggingface.co/docs/transformers/en/model_doc/blip-2&#34; target=&#34;_blank&#34;&gt;BLIP-2&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一加载-clip-模型&#34;&gt;一、加载 CLIP 模型&lt;/h2&gt;&#xA;&lt;p&gt;加载 CLIP 模型，生成图文 Embedding。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;获取文本 Embedding&lt;/li&gt;&#xA;&lt;li&gt;获取图像 Embedding&lt;/li&gt;&#xA;&lt;li&gt;多条文本对一张图片&lt;/li&gt;&#xA;&lt;li&gt;一条文本对多张图片&lt;/li&gt;&#xA;&lt;li&gt;多条文本对多张图片&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;br&gt;&#xA;&lt;center&gt;&#xA;&lt;button class=&#34;demo-btn&#34; onclick=&#34;window_on(&#39;https://nbviewer.org/github/luochang212/clip-app/blob/main/1.clip_model.ipynb&#39;)&#34;&gt;查看笔记&lt;/button&gt;&#xA;&lt;/center&gt;&#xA;&lt;br&gt;&#xA;&lt;h2 id=&#34;二faiss-向量搜索&#34;&gt;二、Faiss 向量搜索&lt;/h2&gt;&#xA;&lt;p&gt;用 FastAPI + Faiss 写一个向量检索服务 &lt;a href=&#34;https://github.com/luochang212/clip-app/blob/main/faiss/server.py&#34; target=&#34;_blank&#34;&gt;faiss/server.py&lt;/a&gt;，该服务提供两个接口：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;路由名&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;描述&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;add&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;用于向索引中添加新的 Embedding&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;search&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;用于从索引中取回给定 Embedding 的最近邻 Embedding&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;br&gt;&#xA;&lt;center&gt;&#xA;&lt;button class=&#34;demo-btn&#34; onclick=&#34;window_on(&#39;https://nbviewer.org/github/luochang212/clip-app/blob/main/2.faiss_client.ipynb&#39;)&#34;&gt;查看笔记&lt;/button&gt;&#xA;&lt;/center&gt;&#xA;&lt;br&gt;&#xA;&lt;h2 id=&#34;三clip-向量生成&#34;&gt;三、CLIP 向量生成&lt;/h2&gt;&#xA;&lt;p&gt;用 FastAPI 写一个简单的 CLIP Embedding 生成服务 &lt;a href=&#34;https://github.com/luochang212/clip-app/blob/main/embedding/server.py&#34; target=&#34;_blank&#34;&gt;embedding/server.py&lt;/a&gt;。接口输入是图片、文本，输出是图文 Embedding。该服务提供 3 个 API 接口：&lt;/p&gt;</description>
			</item>
			<item>
				<title>FastAPI 初见</title>
				<link>https://www.luochang.ink/posts/fastapi/</link>
				<pubDate>Sat, 21 Nov 2020 00:00:00 +0000</pubDate>
				<guid>https://www.luochang.ink/posts/fastapi/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;什么是 API？如何从零开始，搭建自己的第一个API？本文带你搭建一个 API 小应用以了解 FastAPI 的使用细节&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;!-- &gt; 什么是 API？API 有什么用？本文从零开始教你搭建 API，认识 API 服务中的组件和 FastAPI 的使用细节。 --&gt;&#xA;&lt;p&gt;GitHub 项目地址：&lt;a href=&#34;https://github.com/luochang212/calendar-api&#34; target=&#34;_blank&#34;&gt;calendar-api&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;什么是 API？&lt;/p&gt;&#xA;&lt;p&gt;简单来说，&lt;a href=&#34;https://en.wikipedia.org/wiki/API&#34;&gt;API&lt;/a&gt; &lt;!-- (application programming interface, 应用编程接口)  --&gt;是软件间相互传输数据的接口。它在生活中十分常见，比如博物馆订票系统中就使用了 API. 当你在手机应用上订票时，手机实际上发送了一个 HTTP 请求给远程服务器。远程服务器解析该请求。当确认所有字段信息均准确无误后，它才会把你的订票信息录入数据库，并回调成功标识。只有当上述操作全都被正确执行时，你的手机才会显示订票成功。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.luochang.ink/img/fastapi-2.PNG&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;API 程序通常运行在服务端 (server) 上。&lt;strong&gt;客户端&lt;/strong&gt; (client) 通过向 API 提供的网络接口发送请求，以实现对&lt;strong&gt;服务端&lt;/strong&gt;的通信。服务端收到请求后，对请求进行解析。如果请求是合法的，则执行该请求，并将请求结果回调给客户端。一次典型的 API 请求大体上是这么个过程。&lt;/p&gt;&#xA;&lt;p&gt;在业务中，有时需要记录每次请求产生的中间状态、运行结果和日志数据。这时就需要 &lt;strong&gt;服务端&lt;/strong&gt; 调用 &lt;strong&gt;数据库&lt;/strong&gt; (database) 以存储业务中产生的各种信息。&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-rest-api&#34;&gt;1. REST API&lt;/h3&gt;&#xA;&lt;p&gt;API 本身是高度个性化的，软件间可以用任意数据类型进行通信。但如果 API 缺少规范、各行其是，就会导致软件间沟通成本高企。&lt;a href=&#34;https://restfulapi.net/&#34;&gt;REST API&lt;/a&gt; 就是其中一种规范。REST API 提出了六项指导原则，只要 API 符合这六项指导原则，就可称之为“符合 REST 风格的 API”。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;REST API 提出的六项指导原则分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Client–server&lt;/li&gt;&#xA;&lt;li&gt;Stateless&lt;/li&gt;&#xA;&lt;li&gt;Cacheable&lt;/li&gt;&#xA;&lt;li&gt;Uniform interface&lt;/li&gt;&#xA;&lt;li&gt;Layered system&lt;/li&gt;&#xA;&lt;li&gt;Code on demand (optional)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;[&lt;a href=&#34;https://restfulapi.net/&#34;&gt;了解更多&lt;/a&gt;]&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
