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

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消耗计算花费

 

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python编程使用ChatGPT API。下面是一个使用ChatGPT APIPython代码示例: ```python import openai openai.api_key = "YOUR_API_KEY" def generate_response(prompt): response = openai.Completion.create( model="text-davinci-003", prompt=prompt, temperature=0.5, max_tokens=1024, n=1, stop=None ) return response.choices.text # 示例调用 prompt = "你好," response = generate_response(prompt) print(response) ``` 在这个示例代码中,我们首先导入了openai库并设置了API密钥。接下来定义了一个函数`generate_response`,该函数接收一个输入的prompt作为参数,并使用ChatGPT API生成智能对话的响应。最后,我们给定了一个示例prompt并调用`generate_response`函数来获取响应。你可以替换prompt为你想要的输入,并根据需要进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【chatgptchatgpt APi使用 GPT3](https://blog.csdn.net/weixin_44296452/article/details/129439634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python+chatGPT编程5分钟快速上手,强烈推荐!!!](https://blog.csdn.net/sdoa0806/article/details/129054627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值