OpenAI API
是OpenAI
提供的一种人工智能接口,可以通过向API
发送请求来调用OpenAI
的强大模型。使用OpenAI
API
可以实现各种人工智能应用,包括自然语言处理、文本生成、图像识别等。
命令行输入以下命令
pip install openai
python
脚本中导入openai
import openai
终端terminal
输出结果
默认模型:gpt-3.5-turbo
import openai
openai.api_key = '第一步申请到的key'
# MODEL_NAME = "gpt-4"
MODEL_NAME = "gpt-3.5-turbo"
def test_openai_api(question):
rsp = openai.ChatCompletion.create(
model = MODEL_NAME,
messages=[
{"role": "system", "content": "你是一个资深算法工程师"},
{"role": "user", "content": quesiton}
]
)
print(rsp)
# 返回内容
print(rsp.get("choices")[0]["message"]["content"])
# 回答总token数
print(rsp.get("usage")["total_tokens"])
question = "唐宋八大家是谁?"
test_openai_api(question)
print(rsp.get("choices")[0]["message"]["content"])
token
数print(rsp.get("usage")["total_tokens"])
4000
, 单位是token
; **一个英文算1个token
, 一个汉字算2个token
question = "唐宋八大家是谁?"
openai_api(question)
唐宋八大家是指唐代和宋代两个时期的八位文学家,他们被公认为当时文坛的顶尖人物。他们分别是:
1. 唐代:
- 韩愈:以其雄辩的辞章和力倡旧学而闻名。
- 柳宗元:以其深厚的文学才华和政治见解而著名。
- 欧阳修:以其兼具文学才华和政治才能而广受赞誉。
- 范仲淹:以其豪放的文风和儒家学说的推崇而广为人知。
2. 宋代:
- 苏东坡(苏轼):以其豪放不羁的文风和广博的才华而名声大噪。
- 王安石:以其新法变法和推行新学而备受争议。
- 蔡京:以其文坛地位和势力而引起很多争议和争议。
- 曾巩:以其尊儒重教的立场和深厚的文学造诣而闻名。
这些八位学者都对当时的文学和政治有着重要的影响,并且他们的作品在中国文学史上具有重要地位。
417
知识型内容错误很多,所以gpt-3.5-turbo
模型的正确性并不高。ChatGPT
模型内部应该使用的是davici
模型。
def get_response(self, question):
# 用户的问题加入到message
self.messages.append({"role": "user", "content": question})
# 问chatgpt问题的答案
rsp = openai.ChatCompletion.create(
model=self.model,
messages=self.messages,
)
answer = rsp.get("choices")[0]["message"]["content"]
# 得到的答案加入message,多轮对话的历史信息
self.messages.append({"role": "assistant", "content": answer})
return answer
import os
import json
import openai
import gradio as gr
default_model = "gpt-3.5-turbo"
class ChatGPT:
def __init__(self, model ,init_system={"role": "system", "content": "你是一个AI助手"}, save_message=False, ):
self.messages = []
self.init_system = init_system
self.model = model
self.messages.append(init_system)
# 开启此项,须告知用户
self.save_message = save_message
self.filename="./user_messages.json"
def ask_gpt(self):
rsp = openai.ChatCompletion.create(
model=self.model,
messages=self.messages
)
return rsp.get("choices")[0]["message"]["content"]
def get_response(self, question):
""" 调用openai接口, 获取回答
"""
# 用户的问题加入到message
self.messages.append({"role": "user", "content": question})
# 问chatgpt问题的答案
rsp = openai.ChatCompletion.create(
model=self.model,
messages=self.messages,
)
answer = rsp.get("choices")[0]["message"]["content"]
# 得到的答案加入message,多轮对话的历史信息
self.messages.append({"role": "assistant", "content": answer})
return answer
def clean_history(self):
""" 清空历史信息
"""
self.messages.clear()
self.messages.append(self.init_system)
openai.api_key = "your openai api key"
MODEL_NAME = 'gpt-3.5-turbo'
# 自定义system
INIT_MSG = {"role": "system", "content": "你是一个资深算法工程师."}
# 设置端口号,默认7560,遇冲突可自定义
SERVER_PORT = 7560
# 调用gpt的bot
chatgpt = ChatGPT(MODEL_NAME, INIT_MSG)
def predict(input, chatbot):
""" 调用openai接口,获取答案
"""
chatbot.append((input, ""))
# 找chatgpt要答案
response = chatgpt.get_response(input)
chatbot[-1] = (input, response)
return chatbot
def reset_user_input():
return gr.update(value='')
def reset_state():
chatgpt.clean_history()
return []
def main():
with gr.Blocks() as demo:
gr.HTML("""{}
""".format(MODEL_NAME))
# gradio的chatbot
chatbot = gr.Chatbot()
with gr.Row():
with gr.Column(scale=4):
with gr.Column(scale=50):
user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
container=False)
with gr.Column(min_width=32, scale=1):
submitBtn = gr.Button("Submit", variant="primary")
with gr.Column(scale=1):
emptyBtn = gr.Button("Clear History")
# 提交问题
submitBtn.click(predict, [user_input, chatbot],
[chatbot], show_progress=True)
submitBtn.click(reset_user_input, [], [user_input])
# 清空历史对话
emptyBtn.click(reset_state, outputs=[chatbot], show_progress=True)
demo.queue().launch(share=False, inbrowser=True, server_port=SERVER_PORT)
if __name__ == '__main__':
main()
#安装gradio
pip install gradio
#运行.py文件
python gradioapi.py
input
中输入问题,output
文本框输出答案。
每次回答不同且答案错误很多。
#安装streamlit
pip install streamlit
#运行.py文件
streamlit run streamapi.py
import openai
import streamlit as st
from streamlit_chat import message
#申请的api_key
openai.api_key = "your openai api key"
def generate_response(prompt):
completion = openai.Completion.create(
model="text-davinci-003", #'gpt-3.5-turbo',
prompt=prompt,
max_tokens=1024,
temperature=0.6
)
message=completion.choices[0].text
return message
st.markdown("#### 我是ChatGPT聊天机器人,我可以回答您的任何问题!")
if 'generated' not in st.session_state:
st.session_state['generated'] = []
if 'past' not in st.session_state:
st.session_state['past'] = []
user_input=st.text_input("请输入您的问题:",key='input')
if user_input:
output=generate_response(user_input)
st.session_state['past'].append(user_input)
st.session_state['generated'].append(output)
if st.session_state['generated']:
for i in range(len(st.session_state['generated'])-1, -1, -1):
message(st.session_state["generated"][i], key=str(i))
message(st.session_state['past'][i],
is_user=True,
key=str(i)+'_user')