当前位置: 首页 > news >正文

使用FastAPI进行可视化部署

文章目录

    • 一、FastAPI介绍
    • 二、环境配置
    • 三、示例代码
      • 1.app.py代码如下
      • 2.websocket_handler.py 代码如下
      • 3.运行app
      • 4.遇到的问题与解决

在这里插入图片描述

一、FastAPI介绍

FastAPI是一个高性能的Python Web框架,它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具有强大功能的Web应用程序。

二、环境配置

依赖库介绍:

Uvicorn 是一个基于 asyncio 开发的轻量级高效的 web 服务器框架

它的设计初衷是为了实现两个主要目标:

首先,使用 uvloophttptools 实现一个极速的 asyncio 服务器;

其次,实现一个基于 ASGI(异步服务器网关接口)的最小应用程序接口。

Uvicorn 目前支持 HTTPWebSocketsPub/Sub 广播,并且可以扩展到其他协议和消息类型。

pip install fastapi uvicorn ollama -i https://pypi.tuna.tsinghua.edu.cn/simple

三、示例代码

示例代码目录结构如下

fastapi_chat_app/
│
├── app.py
├── websocket_handler.py
├── static/
│   └── index.html
  • app.py FastAPI 应用程序的主要设置和路由。

  • websocket_handler.py 处理 WebSocket 连接和消息流。

  • static/index.html HTML页面。

    1.app.py代码如下

    from fastapi import FastAPI
    from fastapi.responses import HTMLResponse
    from fastapi.staticfiles import StaticFiles
    from websocket_handler import websocket_endpoint
    
    app = FastAPI()
    
    app.mount("/static", StaticFiles(directory="static"), name="static")
    
    
    @app.get("/", response_class=HTMLResponse)
    async def get_form():
        with open("static/index.html") as f:
            html_content = f.read()
        return HTMLResponse(content=html_content)
    
    
    app.websocket("/ws")(websocket_endpoint)
    
    if __name__ == "__main__":
        import uvicorn
    
        uvicorn.run("app:app", host="127.0.0.0", port=5001, reload=True) # 如果希望远程服务器调用,可以将host更改为"127.0.0.0"
    

    2.websocket_handler.py 代码如下

    import ollama
    from fastapi import WebSocket
    
    async def websocket_endpoint(websocket: WebSocket):
        await websocket.accept()  # 接受WebSocket连接
        user_input = await websocket.receive_text()  # 接收用户输入的文本消息
    
        stream = ollama.chat(  # 使用ollama库与指定模型进行对话
            model='llama3.1',  # 指定使用的模型为llama3.1
            messages=[{'role': 'user', 'content': user_input}],  # 传入用户的输入消息
            stream=True  # 启用流式传输
        )
    
        try:
            for chunk in stream:  # 遍历流式传输的结果
                model_output = chunk['message']['content']  # 获取模型输出的内容
                await websocket.send_text(model_output)  # 通过WebSocket发送模型输出的内容
        except Exception as e:  # 捕获异常
            await websocket.send_text(f"Error: {e}")  # 通过WebSocket发送错误信息
        finally:
            await websocket.close()  # 关闭WebSocket连接
    

3.运行app

  1. 运行 app.py 文件。
uvicorn app:app --reload

打开页面。
在这里插入图片描述

4.遇到的问题与解决

修改app.py 中host 和port 后,通过uvicorn app:app --reload,修改未生效,远程主机无通过 http://<host>:port进行访问。

解决:
uvicorn运行时指定端口号

$ uvicorn app:app --reload --host 0.0.0.0 --port 8000
INFO:     Will watch for changes in these directories: ['./fastapi_chat_app']
INFO:     Uvicorn running on http://0.0.0.0:8086 (Press CTRL+C to quit)
INFO:     Started reloader process [4230] using StatReload
INFO:     Started server process [4232]
INFO:     Waiting for application startup.
INFO:     Application startup complete.


相关文章:

  • 应用层协议HTTP
  • 理解 预训练、微调、分布式训练
  • EWM 自动补充库存
  • 《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
  • 为什么要学排序?
  • rust学习笔记5-所有权机制
  • C/C++数组的字符串与字符数组习题
  • 【蓝桥杯】第十五届省赛大学真题组真题解析
  • QT闲记-状态栏,模态对话框,非模态对话框
  • DeepSeek 助力 Vue 开发:打造丝滑的滑块(Slider)
  • VulnOSv2 靶机渗透测试
  • 基于 Python Django 的校园互助平台(附源码,文档)
  • python使用httpx_sse调用sse流式接口对响应格式为application/json的错误信息的处理
  • 内网网络安全的解决之道
  • Linux MySQL 8.0.29 忽略表名大小写配置
  • 深入理解 DOM 和 CSSOM:网页渲染的核心
  • PAT甲级 1017 Queueing at Bank
  • easyexcel和poi同时存在版本问题,使用easyexcel导出excel设置日期格式
  • ZJYYC2510. 蓝红球
  • 财务运营域——营收稽核系统设计
  • 视频丨伊朗阿巴斯港一处油罐发生高强度爆炸:造成大面积破坏,伤亡不明
  • 人大法工委:涉核领域还需要有一部统领性的基础法律
  • 百位名人写“茶”字,莫言王蒙贾平凹都写了
  • 生态环境部谈拿手持式仪器到海边测辐射:不能测量水中放射性核素含量
  • 上金所:调整黄金、白银延期部分合约保证金水平和涨跌停板
  • 视频·世界读书日|王弘治:信息轰炸也会让文化体力透支