FastAPI 部署 Ollama 可视化对话界面


一、目录结构

仓库 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 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连接

接受 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

  1. 在目录下 (fastapi_chat_app/);
  2. 运行 app.py 文件。
uvicorn app:app --reload

打开页面。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

后台显示的正常输出。


# 客户端  # 发生了  # 无限量  # 库中  # 应用程序  # 过程中  # 所需  # 错误信息  # 遍历  # 流式  # git  # websocket  # finally  # for  # Static  # pip  # fastapi  # html  # 网络问题  # ai 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: AMD Ryzen 5 2600: 游戏玩家高性价比之选  AI 3D人像视频制作:零成本手机教程,引爆社交媒体  AI电影制作:颠覆传统,引领未来*新纪元  韵律分析:为什么理解音乐歌词的韵式至关重要?  AI电商网站搭建:CSV到WooCommerce全流程指南  斑马AI怎么开启护眼模式_斑马AI护眼设置与使用时长限制【步骤】  豆包 AI 辅助进行家庭装修风格对比分析  ChatGPT官方主页入口 ChatGPT网页版快速进入指南  tofai入口官方网站 tofai网页版入口地址  千问怎么用提示词生成演讲稿_千问演讲稿提示词框架与开场【教程】  农业模拟器25:AI助手与GPS终极指南  E-LabVine:AI赋能的数字化学习平台,提升高中学业表现  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  lumen5怎样从新闻稿生成社交视频_Lumen5新闻稿转社交视频步骤【社媒】  AI绘图软件怎么用_AI绘图软件使用方法详细指南【教程】  斑马AI能否查看孩子学习报告_斑马AI报告查看与数据解读【方法】  ChatGPT 在电商产品描述批量生成中的应用  Motion 教程:AI 驱动的智能日程安排,提高工作效率  如何用文心一言写简历 快速生成高含金量求职简历方法  10平米房间设计终极挑战:人类 vs AI,DIY极简主义胜出!  利用AI在五分钟内高效生成潜在客户:UpLead深度教程  tofai官网正版入口 tofai网页版免费使用  EdrawMax AI:使用人工智能快速创建流程图和图表  即梦AI怎样生成产品描述_即梦AI产品描述生成与卖点提炼【实操】  通义千问怎么找新功能入口_通义千问新功能查找【攻略】  百度网页版ai助手怎么关 百度网页ai对话框屏蔽  提升Fortnite OG游戏性能:NVIDIA控制面板最佳设置  AI心理测试生成工具有哪些_一键生成趣味测评的AI工具推荐  Motion:革新项目管理的智能日历解决方案  GTA Online: 2025最新无限隐形套装防消失技巧  百度AI助手官方入口 文心一言网页版登录入口  文本分类与聚类:网络安全中的自然语言处理应用  Voice AI:下一代AI语音助手,重塑人机交互  智谱AI创意设计怎么用_智谱AI创意设计使用方法详细指南【教程】  11月问界汽车哪里卖的多?成都力压北上广深位居第一  稿定AI智能设计怎样自动生成电商Banner_稿定AI智能设计Banner生成流程【步骤】  快速生成PPT工具怎么用_快速生成PPT工具使用方法详细指南【教程】  泰米尔电影猜谜游戏:挑战你的电影知识极限!  探索贝奥武夫:英雄史诗的起源、故事与文化意义  智谱AI绘画怎么用_智谱AI绘画使用方法详细指南【教程】  3步教你用AI总结会议录音,再也不怕错过重点  Tradie Hub:领先的线索管理系统,助力业务增长  VideoGen教程:AI视频生成器,无需拍摄快速制作视频  探索都市传说:追寻鳄鱼飞机怪物“Bombardino Crocodilo”  AI简历生成器:提升求职效率的智能工具  Orkestra Obsolete: 用古董乐器重塑经典“Blue Monday”  AI同伴的未来:超越工具,迈向情感连接与个人成长  网络安全警钟:揭秘“美足”背后隐藏的危机与防范  告别噪音:使用Adobe Podcast提升录音质量  海外留学资金证明:无银行流水也能成功申请签证的秘诀 

 2025-03-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.