最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

使用Python编程调用chatGPT API实现连续对话

业界 admin 11浏览 0评论
import easygui as g
import openai


class Chat:
    def __init__(self, conversation_list=[]) -> None:
        # 初始化对话列表,可以加入一个key为system的字典,有助于形成更加个性化的回答
        # self.conversation_list = [{'role':'system','content':'你是一个非常友善的助手'}]
        self.conversation_list = []  # 初始化对话列表
        self.costs_list = []  # 初始化聊天开销列表

    # 打印对话
    def show_conversation(self, msg_list):
        for msg in msg_list[-2:]:
            if msg['role'] == 'user':  # 如果是用户的话
                # print(f"\U0001f47b: {msg['content']}\n")
                pass
            else:  # 如果是机器人的话
                message = msg['content']
                print(f"\U0001f47D: {message}\n")
            print()

    # 调用chatgpt,并计算开销
    def ask(self, prompt):
        self.conversation_list.append({"role": "user", "content": prompt})
        openai.api_key = '你的api_key'
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=self.conversation_list)
        # response = openai.ChatCompletion.create(model="gpt-4", messages=self.conversation_list)
        answer = response.choices[0].message['content']
        # 下面这一步是把chatGPT的回答也添加到对话列表中,这样下一次问问题的时候就能形成上下文了
        self.conversation_list.append({"role": "assistant", "content": answer})
        self.show_conversation(self.conversation_list)

        人民币花费 = total_counts(response)
        self.costs_list.append(人民币花费)
        print()


def total_counts(response):
    # 计算本次任务花了多少钱和多少tokens:
    tokens_nums = int(response['usage']['total_tokens'])  # 计算一下token的消耗
    price = 0.002 / 1000  # 根据openai的美元报价算出的token美元单价
    人民币花费 = '{:.5f}'.format(price * tokens_nums * 7.5)
    合计内容 = f'本次对话共消耗了{tokens_nums}个token,花了{人民币花费}元(人民币)'
    print(合计内容)

    return float(人民币花费)


def main():
    talk = Chat()
    print()

    count = 0
    count_limit = eval(input("你想要对话的次数是多少呢?\n(请输入数字即可)"))
    while count < count_limit:  # 上下文token数量是有极限的,理论上只能支持有限轮次的对话,况且,钱花光了也就不能用了。。。
        if count < 1:
            words = input("请问有什么可以帮助你的呢?\n(请输入您的需求或问题):")
        else:
            words = input("您还可以继续与我交流,请您继续说:\n(请输入您的需求或问题):")
        print()
        talk.ask(words)
        count += 1

    g.msgbox("对不起,您已达到使用次数的限额,欢迎您下次使用!")
    print(f'本轮聊天合计花费{sum(talk.costs_list)}元人民币。')

if __name__ == "__main__":
    main()

这段代码使用Python代码调用chatGPT的API,在ask()函数中修改自己api_key即可。

可以实现连续对话,通过token消耗计算花费

 

import easygui as g
import openai


class Chat:
    def __init__(self, conversation_list=[]) -> None:
        # 初始化对话列表,可以加入一个key为system的字典,有助于形成更加个性化的回答
        # self.conversation_list = [{'role':'system','content':'你是一个非常友善的助手'}]
        self.conversation_list = []  # 初始化对话列表
        self.costs_list = []  # 初始化聊天开销列表

    # 打印对话
    def show_conversation(self, msg_list):
        for msg in msg_list[-2:]:
            if msg['role'] == 'user':  # 如果是用户的话
                # print(f"\U0001f47b: {msg['content']}\n")
                pass
            else:  # 如果是机器人的话
                message = msg['content']
                print(f"\U0001f47D: {message}\n")
            print()

    # 调用chatgpt,并计算开销
    def ask(self, prompt):
        self.conversation_list.append({"role": "user", "content": prompt})
        openai.api_key = '你的api_key'
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=self.conversation_list)
        # response = openai.ChatCompletion.create(model="gpt-4", messages=self.conversation_list)
        answer = response.choices[0].message['content']
        # 下面这一步是把chatGPT的回答也添加到对话列表中,这样下一次问问题的时候就能形成上下文了
        self.conversation_list.append({"role": "assistant", "content": answer})
        self.show_conversation(self.conversation_list)

        人民币花费 = total_counts(response)
        self.costs_list.append(人民币花费)
        print()


def total_counts(response):
    # 计算本次任务花了多少钱和多少tokens:
    tokens_nums = int(response['usage']['total_tokens'])  # 计算一下token的消耗
    price = 0.002 / 1000  # 根据openai的美元报价算出的token美元单价
    人民币花费 = '{:.5f}'.format(price * tokens_nums * 7.5)
    合计内容 = f'本次对话共消耗了{tokens_nums}个token,花了{人民币花费}元(人民币)'
    print(合计内容)

    return float(人民币花费)


def main():
    talk = Chat()
    print()

    count = 0
    count_limit = eval(input("你想要对话的次数是多少呢?\n(请输入数字即可)"))
    while count < count_limit:  # 上下文token数量是有极限的,理论上只能支持有限轮次的对话,况且,钱花光了也就不能用了。。。
        if count < 1:
            words = input("请问有什么可以帮助你的呢?\n(请输入您的需求或问题):")
        else:
            words = input("您还可以继续与我交流,请您继续说:\n(请输入您的需求或问题):")
        print()
        talk.ask(words)
        count += 1

    g.msgbox("对不起,您已达到使用次数的限额,欢迎您下次使用!")
    print(f'本轮聊天合计花费{sum(talk.costs_list)}元人民币。')

if __name__ == "__main__":
    main()

这段代码使用Python代码调用chatGPT的API,在ask()函数中修改自己api_key即可。

可以实现连续对话,通过token消耗计算花费

 

发布评论

评论列表 (0)

  1. 暂无评论