''' | |
1. 原生的ChatGPT的中文输出没问题,但是llama index的版本中文输出有问题,而且也可以“继续这个回答”。 | |
1. 可以在terminal中同时运行2个不同版本的ChatGPT,一个原生,一个定制的。python3 xxx.py。 | |
''' | |
import openai | |
import gradio as gr | |
import os | |
## 这里是huggingface的secret里面存放当前可以用的api key。 | |
openai.api_key = os.environ['my_api_key'] | |
messages = [ | |
{"role": "system", "content": "You are a helpful and kind AI Assistant."}, | |
] | |
def chatbot(input): | |
history = [] | |
try: | |
if input: | |
## no streaming version. | |
# messages.append({"role": "user", "content": input}) | |
# print(input) | |
# chat = openai.ChatCompletion.create( | |
# model="gpt-3.5-turbo", messages=messages | |
# ) | |
# reply = chat.choices[0].message.content | |
# messages.append({"role": "assistant", "content": reply}) | |
## streaming version. typewriter effect, word by word output. | |
messages.append({"role": "user", "content": input}) | |
for resp in openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages, stream=True, max_tokens=2048): | |
# sys.stdout.write(str(resp['choices'][0]['delta'].get('content'))) #! 这个方式仅在terminal中是working的。 | |
# sys.stdout.flush() | |
#! 以下内容在Gradio中是working的。 | |
answer = str(resp['choices'][0]['delta'].get('content')) | |
if answer != "None": | |
history.append(answer) | |
result = "".join(history).strip() #* working! | |
yield result | |
except Exception as e: | |
print(e) | |
pass | |
return None | |
## 如果要优化显示效果,参见: https://gradio.app/theming-guide/ | |
try: | |
inputs = gr.inputs.Textbox(lines=5, label="Prompt提示词") | |
outputs = gr.outputs.Textbox(label="ChatGPT") | |
interface = gr.Interface(fn=chatbot, inputs=inputs, outputs=outputs, title="石博士的极简版ChatGPT", description="请输入你的提示词",theme=gr.themes.Monochrome(), height=300) | |
interface.launch() | |
except Exception as e: | |
print(e) |