I. Estrutura do catálogo
do notebook do repositório:
fastapi_chat_app/
│
├── app.py
├── websocket_handler.py
static/ │ ├─ static/ │ └─ index.html
│ └── index.html
└─── requisitos.txt
app.py
A configuração e o roteamento principais dos aplicativos FastAPI.websocket_handler.py
Manipula conexões WebSocket e fluxos de mensagens.static/index.html
Página HTML.requisitos.txt
Dependências necessárias, instaladas via pip install -r requirements.txt.
II - Clonagem desse depósito
git clone https://github.com/AXYZdong/handy-ollama
III. instalação de dependências
pip install -r requirements.txt
IV. código principal
app.py
O código principal do arquivo é o seguinte:
importação ollama
from fastapi import WebSocket
async def websocket_endpoint(websocket: WebSocket): await websocket.accept(): # Aceitar conexão WebSocket.
await websocket.accept() # Aceitando a conexão WebSocket
user_input = await websocket.receive_text() # Receber uma mensagem de texto da entrada do usuário
stream = ollama.chat( # Usar a biblioteca ollama para ter uma conversa com o modelo especificado
model='ollama3.1', # Especificar que o modelo usado é o ollama3.1
messages=[{'role': 'user', 'content': user_input}], # Transmitir mensagens de entrada do usuário
stream=True # Ativar o streaming
)
try.
for chunk in stream: # Iterar pelos resultados da transferência de streaming
model_output = chunk['message']['content'] # Obter o conteúdo da saída do modelo
await websocket.send_text(model_output) # Envie o conteúdo da saída do modelo via WebSocket
except Exception as e: # Catch exception
await websocket.send_text(f "Error: {e}") # Envie a mensagem de erro pelo WebSocket
finalmente.
await websocket.close() # Feche a conexão WebSocket.
Aceita uma conexão WebSocket:
aguardar websocket.accept()
Primeiro, a função aceita uma solicitação de conexão WebSocket do cliente e estabelece um canal de comunicação com o cliente.
Receber entrada do usuário:
user_input = await websocket.receive_text()
Mensagem de texto: Recebe uma mensagem de texto do cliente via WebSocket para obter a entrada do usuário.
Inicializar o fluxo de diálogo:
stream = ollama.chat(...)
Chamada do método chat da biblioteca ollama, especificando que o modelo usado é o llama3.1. Passe a entrada do usuário como uma mensagem para o modelo e ative o streaming (stream=True) para obter a resposta gerada pelo modelo de forma incremental.
Processamento da saída do modelo:
para trecho no fluxo
Iteração sobre os blocos de dados transmitidos pelo modelo.model_output = chunk['message']['content']
Extraia o conteúdo textual gerado pelo modelo de cada bloco de dados.await websocket.send_text(model_output)
Resposta do modelo extraído: envia as respostas do modelo extraído de volta ao cliente via WebSocket para diálogo em tempo real.
Tratamento de exceções:
exceto Exception as e
Se ocorrer alguma exceção durante o processamento (por exemplo, problema de rede, erro de modelo etc.), capture a exceção e envie uma mensagem de erro via WebSocket para informar ao cliente que ocorreu um erro.
Feche a conexão WebSocket:
finalmente
Independentemente de ocorrer ou não uma exceção, é garantido que a conexão WebSocket seja fechada para liberar recursos e encerrar a sessão.
V. Executando o aplicativo
- No diretório (
fastapi_chat_app/
); - Execute o arquivo app.py.
uvicorn app:app --reload
Abrir página.
Saída normal exibida em segundo plano.