Развертывание FastAPI Визуальный диалоговый интерфейс Ollama
I. Структура каталога
Блокнот хранилища находится в папке 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.
II. Клонирование этого склада
git clone https://github.com/AXYZdong/handy-ollama
III. Установка зависимостей
pip install -r requirements.txt
IV. Основной код
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(...)
: Вызовите метод chat из библиотеки ollama, указав, что используется модель 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 будет закрыто, чтобы освободить ресурсы и завершить сеанс.
V. Запуск приложения
- В каталоге (
fastapi_chat_app/
); - Запустите файл app.py.
uvicorn app:app --reload
Открыть страницу.

Нормальный вывод, отображаемый в фоновом режиме.

© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...