学习agent日记day2:FastAPI快速上手(上)
引言:为什么大模型应用开发,绕不开 FastAPI 呢?
学 Agent 也是为了把它作为一个服务去给外部调用(对外提供能力的服务),但是要怎么做到给外部调用呢?
这个时候就需要 Python 的 Web 框架了。
常见的主流 Web 框架有 Flask、Django 以及 FastAPI。
为什么会选择 FastAPI?因为它轻量且方便,而 Django 虽然很全但又很重,Flask 也很轻和自由,但是代码容易写乱不好维护。
那就会选择 FastAPI 来作为这一个外壳,来对外提供服务。
学习 FastAPI,我的感受
学到这里,我真的感觉 Python 很像 JavaScript,比如参数类型校验这里
JavaScript 是直接升级为 TypeScript 去做类型规范,当然哈,不能是 AnyScript 哈哈哈
Python 这里呢是直接用 Pydantic,然后如果一个类里面要进行类型规范,就去继承它的 BaseModel
如果是基本类型的话就用下图的方式来规范
写了一下之后感觉这个框架确实要比 Spring 全家桶的 Java Web 框架要轻量很多
只需要写一个初始化一个 app 对象,然后就可以直接上手了
就是从 Java 过来写 Python 感觉有些不适应,很多 API 也不知道,需要多写,而且这个 import 为什么不是 import xxx from xxx 而是反过来的,看着都有点奇怪。
from typing import TypeVar
from typing import Generic, Optional
from fastapi import FastAPI, HTTPException
from enum import Enum
from pydantic import BaseModel
app = FastAPI()
定义运算符号类
class Operation(str, Enum):
add = '+'
sub = '-'
multi = '*'
divide = '/'
定义计算类
class CalRequest(BaseModel):
a: float
b: float
op: Operation
T = TypeVar('T')
class StandardResponse(BaseModel, Generic[T]):
code: int = 200
msg: str = 'Success'
data: Optional[T] = None
@app.post("/calc", response_model=StandardResponse[float])
def calc(calculate: CalRequest):
if calculate.op == Operation.divide and calculate.b == 0:
raise HTTPException(status_code=400, detail="除数不能为0")
result = 0
if calculate.op == Operation.add:
result = calculate.a + calculate.b
elif calculate.op == Operation.sub:
result = calculate.a - calculate.b
elif calculate.op == Operation.multi:
result = calculate.a * calculate.b
elif calculate.op == Operation.divide:
result = calculate.a / calculate.b
return StandardResponse(data=result)
但是我也不知道为什么,看着就是没有 Java 代码优雅,可能是戒断反应吧
感觉这里导包也没有 IDEA 里面好用,怎么 PyCharm 用起来和 IDEA 差距有点大呢,竟然还是一家的产品呢
这里我就不讲解 FastAPI 里面的内容了,网上都有,也可以问豆老师来学
希望大家都一起努力吧
更多推荐




所有评论(0)