FastAPI 部署 Ollama 可视化对话界面
时间:2025-03-18 | 作者: | 阅读:0一、目录结构
仓库 notebook 的 c6 文件夹下:
fastapi_chat_app/│├── app.py├── websocket_handler.py├── static/│ └── index.html└── requirements.txt登录后复制
- app.py?FastAPI 应用程序的主要设置和路由。
- websocket_handler.py?处理 WebSocket 连接和消息流。
- static/index.html?HTML页面。
- requirements.txt?所需依赖,通过 pip install -r requirements.txt 安装。
?
二、克隆本仓库
git clone https://github.com/AXYZdong/handy-ollama登录后复制
?
三、安装依赖
pip install -r requirements.txt登录后复制
?
四、核心代码
app.py?文件中的核心代码如下:
import ollamafrom fastapi import WebSocketasync def websocket_endpoint(websocket: WebSocket):await websocket.accept() # 接受WebSocket连接user_input = await websocket.receive_text() # 接收用户输入的文本消息stream = ollama.chat( # 使用ollama库与指定模型进行对话model='llama3.1', # 指定使用的模型为llama3.1messages=[{'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连接登录后复制
接受 WebSocket 连接:
- await websocket.accept():首先,函数接受来自客户端的 WebSocket 连接请求,建立与客户端的通信通道。
接收用户输入:
- user_input = await websocket.receive_text():通过 WebSocket 从客户端接收一条文本消息,获取用户输入的内容。
初始化对话流:
- stream = ollama.chat(...):调用 ollama 库中的 chat 方法,指定使用的模型为 llama3.1。将用户的输入作为消息传递给模型,并启用流式传输(stream=True),以便逐步获取模型生成的回复。
处理模型输出:
- for chunk in stream:遍历从模型中流式传输过来的数据块。
- model_output = chunk['message']['content']:从每个数据块中提取出模型生成的文本内容。
- await websocket.send_text(model_output):通过 WebSocket 将提取出的模型回复发送回客户端,实现实时对话。
异常处理:
- except Exception as e:如果在处理过程中出现任何异常(例如,网络问题、模型错误等),捕获异常并通过 WebSocket 发送一条错误信息,告知客户端发生了错误。
关闭 WebSocket 连接:
- finally:无论是否发生异常,最终都确保关闭 WebSocket 连接,以释放资源并结束会话。
?
五、运行app
- 在目录下 (fastapi_chat_app/);
- 运行 app.py 文件。
uvicorn app:app --reload登录后复制
打开页面。
后台显示的正常输出。
来源:https://www.php.cn/faq/1257039.html
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 主板bios设置大全
- 时间:2026-04-27
-
- 烤面包机的使用和操作为什么卡住?
- 时间:2026-04-27
-
- 按摩椅力度调小后还有效果吗
- 时间:2026-04-27
-
- Super爆冷逼平TTJ延续争冠悬念
- 时间:2026-04-27
-
- poe交换机测试好坏能用普通测线仪吗
- 时间:2026-04-27
-
- 运动耳机切换内存卡模式要配APP吗
- 时间:2026-04-27
-
- 制冰机怎么清洗最省时?
- 时间:2026-04-27
-
- 松下传真机调时间显示要关机吗
- 时间:2026-04-27
精选合集
更多大家都在玩
热门话题
大家都在看
更多-
- 《灵魂面甲》铁血守卫面具介绍
- 时间:2026-04-27
-
- 《灵魂面甲》深渊之主面具介绍
- 时间:2026-04-27
-
- 《吸血鬼爬行者》攻击类属性介绍
- 时间:2026-04-27
-
- oppo手机怎么设置省电模式_oppo手机省电优化延长续航方法【实用】
- 时间:2026-04-27
-
- vivo手机怎么查看WiFi密码 vivo手机扫码连接WiFi分享教程【实用】
- 时间:2026-04-27
-
- OPPO Find N3 Flip如何使用外屏拍照 Find N3外屏自拍教程
- 时间:2026-04-27
-
- vivo手机怎么设置默认应用_vivo手机默认浏览器播放器设置方法【简单】
- 时间:2026-04-27
-
- 三星Z Flip4屏幕中间黑块怎么办 三星漏液屏幕维修及数据导出
- 时间:2026-04-27

