python 调用gpt3.5接口问答教程

文章目录

        • openai介绍
        • python调用
          • 本地调用
            • 示例1
          • 保留历史对话信息
          • gradio部署和可视化使用
            • 示例2
          • streamlit部署和可视化使用
            • 示例3

openai介绍

OpenAI APIOpenAI提供的一种人工智能接口,可以通过向API发送请求来调用OpenAI的强大模型。使用OpenAI API可以实现各种人工智能应用,包括自然语言处理、文本生成、图像识别等。

  • 安装openai库

命令行输入以下命令

pip install openai
  • python脚本中导入openai
import openai
python调用
本地调用

终端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
示例1
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
gradio部署和可视化使用

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()
示例2
#安装gradio
pip install gradio
#运行.py文件
python gradioapi.py

input中输入问题,output文本框输出答案。
python 调用gpt3.5接口问答教程_第1张图片
每次回答不同且答案错误很多。
python 调用gpt3.5接口问答教程_第2张图片

streamlit部署和可视化使用
#安装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')
示例3

python 调用gpt3.5接口问答教程_第3张图片

你可能感兴趣的:(LLM和AIGC,windows,nvidia,cuda,cudnn,transformer)