Python FastAPI

介绍

FastAPI 是 Python 里写 API 接口最快、最简单、最强的现代 Web 框架,写后端接口的 "超级工具包"https://fastapi.tiangolo.com/

  • 写接口速度极快
  • 自动生成文档 访问 /docs 自动出漂亮的接口页面
  • 自带数据校验
  • 性能接近 Go / Node
  • 代码超级简洁

FastAPI = Starlette(高性能 Web) + Pydantic(数据校验)

写一个最简单的接口

python 复制代码
# main.py
from fastapi import FastAPI

# 1. 创建 app
app = FastAPI()

# 2. 写接口(路径:/ ,GET请求)
@app.get("/")
def home():
    return {"message": "你好,FastAPI!"}

# 3. 再写一个接口
@app.get("/user")
def get_user():
    return {"name": "张三", "age": 20}

运行,Uvicorn 是 "高性能服务器",负责把接口暴露给别人访问,

  • Python 代码 → 交给 Python 解释器运行
  • FastAPI 应用 → 交给 Uvicorn 服务器运行

自动生成的接口文档地址

python 复制代码
#uvicorn:启动服务器
#main:去找 main.py 文件
#app:去找文件里的 app = FastAPI()
--reload:代码改了自动重启
uvicorn main:app --reload

最常用的写法是加上Pydantic一起用

python 复制代码
from pydantic import BaseModel

# 定义数据格式(你学过的 BaseModel)
class User(BaseModel):
    name: str
    age: int
    email: str

# 接收 JSON
@app.post("/add_user")
def add_user(user: User):
    # 直接用 user.name, user.age, user.email
    return {
        "msg": "添加成功",
        "name": user.name,
        "age": user.age
    }

FastAPI的生命周期

历史用法是,直接加入@app.on_event("startup")装饰器吗,现有的用法被整合到一起使用,

@asynccontextmanager,同时 也支持websocket @app.websocket

python 复制代码
from dotenv import load_dotenv
from fastapi import FastAPI
from langchain.agents import create_agent
from langchain_core.messages import HumanMessage
from langchain_mcp_adapters.client import MultiServerMCPClient
from pydantic import BaseModel
import uvicorn
from contextlib import asynccontextmanager  # 新增

load_dotenv()


agent = None
client = None


@asynccontextmanager
async def lifespan(app: FastAPI):
    global agent, client
    # ====================== 【服务启动时执行】 ======================
    print("🚀 服务启动,初始化 AI 智能体...")

    client = MultiServerMCPClient(
        {
            "math": {
                "transport": "stdio",
                "command": "python",
                "args": [r"D:\project\pyproject\agent\tools\Math.py"],
            },
        }
    )
    tools = await client.get_tools()
    agent = create_agent(model="deepseek-chat", tools=tools)

    # 服务运行中
    yield

    # ====================== 【服务关闭时执行】 ======================
    print("服务关闭,清理资源...")
    if client is not None:
        await client.close()  # 优雅关闭客户端


app = FastAPI(
    title="LangChain Agent API",
    lifespan=lifespan
)


# ====================== 请求模型 ======================
class ChatRequest(BaseModel):
    question: str


# ====================== Java 调用接口 ======================
@app.post("/agent/chat")
async def chat(request: ChatRequest):
    response = await agent.ainvoke({
        "messages": [
            HumanMessage(content=request.question)
        ]
    })
    answer = response["messages"][-1].content
    return {
        "code": 200,
        "message": "success",
        "data": answer
    }


# ====================== 启动服务 ======================
if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=19000)
相关推荐
卷无止境14 小时前
FastAPI 权限管理实战:从 ACL 到 RBAC 的那些门道
后端·python·fastapi
云和数据.ChenGuang1 天前
fastapi的参数剖析
人工智能·深度学习·机器学习·语言模型·状态模式·fastapi
Python私教2 天前
API 输出模型怎么设计:从 model_dump() 到显式展示层
python·fastapi
Python私教2 天前
本地 AI 工具服务该绑定 127.0.0.1 还是 0.0.0.0?
python·fastapi
weixin_471383032 天前
08 Chroma 持久化 + FastAPI 封装
fastapi·chroma
京东云开发者2 天前
【全栈实践】第一个 AI Agent 项目:从零搭建 AI 音频创作助手(进阶篇)
typescript·fastapi·vuex
云和数据.ChenGuang3 天前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
燐妤3 天前
中老年智能健康管理项目
python·ai·pycharm·vue3·fastapi·项目开发·健康
circuitsosk3 天前
构建高可用AI后端服务:REST API设计、数据库交互及异步任务编排经验总结
数据库·人工智能·python·交互·fastapi·数据库连接池·rest api
java1234_小锋4 天前
【免费】基于Python的微信小程序网约车(打车,在线叫车,移动出行)系统(FastAPI+Vue3) 锋哥原创出品,必属精品
微信小程序·小程序·fastapi·网约车系统·在线叫车系统