I. Aufbau des Katalogs
Das Repository-Notebook befindet sich im Ordner C6:
fastapi_chat_app/
│
├── app.py
├── websocket_handler.py
├── static/
│ └── index.html
└── requirements.txt
app.py
Die wichtigste Einrichtung und Weiterleitung von FastAPI-Anwendungen.websocket_handler.py
Verarbeitet WebSocket-Verbindungen und Nachrichtenströme.static/index.html
HTML-Seite.requirements.txt
Erforderliche Abhängigkeiten, installiert über pip install -r requirements.txt.
II. das Klonen dieses Lagers
git clone https://github.com/AXYZdong/handy-ollama
III. die Installation von Abhängigkeiten
pip install -r requirements.txt
IV. grundlegender Code
app.py
Der Hauptcode in der Datei lautet wie folgt:
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连接
Akzeptiert eine WebSocket-Verbindung:
await websocket.accept()
Die Funktion nimmt zunächst eine WebSocket-Verbindungsanfrage vom Client entgegen und baut einen Kommunikationskanal mit dem Client auf.
Empfangen Sie Benutzereingaben:
user_input = await websocket.receive_text()
Textnachricht: Empfängt eine Textnachricht vom Client über WebSocket, um die Benutzereingabe zu erhalten.
Initialisieren Sie den Dialogstrom:
stream = ollama.chat(...)
Aufruf der Chat-Methode aus der ollama-Bibliothek mit der Angabe, dass das verwendete Modell llama3.1 ist. Übergeben Sie die Benutzereingabe als Nachricht an das Modell und aktivieren Sie Streaming (stream=True), um die vom Modell erzeugte Antwort inkrementell zu erhalten.
Verarbeitung der Modellausgabe:
for chunk in stream
Iterieren über die vom Modell gestreamten Datenblöcke.model_output = chunk['message']['content']
Extrahieren des modellgenerierten Textinhalts aus jedem Datenblock.await websocket.send_text(model_output)
Senden Sie die extrahierten Modellantworten über WebSocket für einen Echtzeitdialog an den Client zurück.
Behandlung von Ausnahmen:
except Exception as e
Wenn während der Verarbeitung eine Ausnahme auftritt (z. B. ein Netzwerkproblem, ein Modellfehler usw.), fangen Sie die Ausnahme ab und senden Sie eine Fehlermeldung über WebSocket, um den Client darüber zu informieren, dass ein Fehler aufgetreten ist.
Schließen Sie die WebSocket-Verbindung:
finally
Unabhängig davon, ob eine Ausnahme auftritt oder nicht, wird letztendlich sichergestellt, dass die WebSocket-Verbindung geschlossen wird, um Ressourcen freizugeben und die Sitzung zu beenden.
V. Ausführen der Anwendung
- In dem Verzeichnis (
fastapi_chat_app/
); - Führen Sie die Datei app.py aus.
uvicorn app:app --reload
Seite öffnen.
Die normale Ausgabe wird im Hintergrund angezeigt.