O código é demonstrar o uso do streaming com API GPT-4, API ChatGPT e Modelos InstructGPT (GPT-3.5.) & Slamlit-App.
A abordagem usa apenas as bibliotecas do OpenAI e do tempo e re-impressa os fluxos usando a impressão (end = '', Flush = true):
!p ip install - - upgrade openai
import openai
import time
openai . api_key = user_secrets . get_secret ( "OPENAI_API_KEY" )
startime = time . time ()Isenção de responsabilidade: A desvantagem do streaming no uso da produção é o controle da Política de Uso apropada: https://beta.openai.com/docs/usage-guidelines, que devem ser revisados com antecedência para cada aplicativo, por isso sugiro dar uma olhada nesta política antes de decidir usar a transmissão.
Execute o arquivo streams.ipnyb Primeira parte.
### STREAM GPT-4 API RESPONSES
delay_time = 0.01 # faster
max_response_length = 8000
answer = ''
# ASK QUESTION
prompt = input ( "Ask a question: " )
start_time = time . time ()
response = openai . ChatCompletion . create (
# GPT-4 API REQQUEST
model = 'gpt-4' ,
messages = [
{ 'role' : 'user' , 'content' : f' { prompt } ' }
],
max_tokens = max_response_length ,
temperature = 0 ,
stream = True , # this time, we set stream=True
)
for event in response :
# STREAM THE ANSWER
print ( answer , end = '' , flush = True ) # Print the response
# RETRIEVE THE TEXT FROM THE RESPONSE
event_time = time . time () - start_time # CALCULATE TIME DELAY BY THE EVENT
event_text = event [ 'choices' ][ 0 ][ 'delta' ] # EVENT DELTA RESPONSE
answer = event_text . get ( 'content' , '' ) # RETRIEVE CONTENT
time . sleep ( delay_time )Depois de inserir a entrada do usuário e pressionar Enter, você deve ver a saída impressa:

Execute o arquivo Streams.ipnyb Second Part. Adicione a entrada do usuário e você deverá ver de forma abaixo:
### STREAM CHATGPT API RESPONSES
delay_time = 0.01 # faster
max_response_length = 200
answer = ''
# ASK QUESTION
prompt = input ( "Ask a question: " )
start_time = time . time ()
response = openai . ChatCompletion . create (
# CHATPG GPT API REQQUEST
model = 'gpt-3.5-turbo' ,
messages = [
{ 'role' : 'user' , 'content' : f' { prompt } ' }
],
max_tokens = max_response_length ,
temperature = 0 ,
stream = True , # this time, we set stream=True
)
for event in response :
# STREAM THE ANSWER
print ( answer , end = '' , flush = True ) # Print the response
# RETRIEVE THE TEXT FROM THE RESPONSE
event_time = time . time () - start_time # CALCULATE TIME DELAY BY THE EVENT
event_text = event [ 'choices' ][ 0 ][ 'delta' ] # EVENT DELTA RESPONSE
answer = event_text . get ( 'content' , '' ) # RETRIEVE CONTENT
time . sleep ( delay_time )
Execute o arquivo Streams.pnyb Terceira parte. Adicione a entrada do usuário e você deverá ver de forma abaixo:
collected_events = []
completion_text = []
speed = 0.05 #smaller is faster
max_response_length = 200
start_time = time . time ()
prompt = input ( "Ask a question: " )
# Generate Answer
response = openai . Completion . create (
model = 'text-davinci-003' ,
prompt = prompt ,
max_tokens = max_response_length ,
temperature = 0 ,
stream = True , # this time, we set stream=True
)
# Stream Answer
for event in response :
event_time = time . time () - start_time # calculate the time delay of the event
collected_events . append ( event ) # save the event response
event_text = event [ 'choices' ][ 0 ][ 'text' ] # extract the text
completion_text += event_text # append the text
time . sleep ( speed )
print ( f" { event_text } " , end = "" , flush = True )
Adicionei um arquivo "App_Streamlit.py", que você pode gastar ao seu repositório com o "requisitos.txt" e implantá-lo no streamlit.

Nas configurações avançadas, adicione o OpenAI_API_KEY-VARIÁVEL Usando o formato:
OPENAI_API_KEY = "INSERT HERE YOUR KEY" Sinta -se à vontade para bifurcar e melhorar ainda mais o código de acordo com a licença. Por exemplo, você pode melhorar ainda mais o chatml para garantir que o fluxo siga as regras desejadas do "sistema". Eu os deixei vazios agora para tornar este script básico muito genérico. Eu recomendo verificar meus artigos específicos para a API ChatGPT sobre respostas de streaming em meio relacionado ao streaming, chatml: orientação de avisos com o tutorial de Introdução do Sistema, Assistente e Usuário e API do ChatGPT.