chatgpt-on-wechat icon indicating copy to clipboard operation
chatgpt-on-wechat copied to clipboard

使用GPT4的API,无法限制上下文

Open Payne-Wang opened this issue 2 years ago • 1 comments

前置确认

  • [X] 我确认我运行的是最新版本的代码,并且安装了所需的依赖,在FAQS中也未找到类似问题。

⚠️ 搜索issues中是否已存在类似问题

  • [X] 我已经搜索过issues和disscussions,没有跟我遇到的问题相关的issue

操作系统类型?

Linux

运行的python版本是?

python 3.10

使用的chatgpt-on-wechat版本是?

Latest Release

运行的channel类型是?

wx(个人微信, itchat)

复现步骤 🕹

No response

问题描述 😯

大佬好,感谢工具提供! 我在使用gpt-4的api接入的时候,因为默认会反复提交上下文作为prompt,产生过多的费用。 我尝试设置了"conversation_max_tokens": 0 和"expires_in_seconds": 0 均无法关闭上下文调用(这两个应该是适用于3.5的), 想问一下是否有其它参数可以设置或者是否可以添加这个功能,这样gpt4就可以便宜点使用了! 再次感谢大佬及团队

终端日志 📒

Payne-Wang avatar May 07 '23 03:05 Payne-Wang

是否安装tiktoken? conversation_max_tokens对于gpt-4是有效的,你看到的上下文可能是system prompt

lanvent avatar May 07 '23 15:05 lanvent

我安装过tiktoken了(Requirement already satisfied: tiktoken in /root/my_soft/miniconda3/envs/chatgptonwechatbot2/lib/python3.10/site-packages (0.3.3))

这个是我config.json文件中的配置: "expires_in_seconds": 1, "conversation_max_tokens": 1

目前仍然会记住多轮上下文。

另外,我在openai上查过request detail,其中大部分的token消耗都是prompt,尤其是在多轮对话过程中,completion的消耗非常少.下面是连续四次对于接口的调用,尤其是2.3.4次,基本上prompt消耗约等于上一次的输出,这应该说明它还是在调用上下文的。

1,759 prompt + 568 completion = 2,327 tokens

1,324 prompt + 324 completion = 1,648 tokens

1,680 prompt + 518 completion = 2,198 tokens

2,219 prompt + 343 completion = 2,562 tokens

不知道原因,请大佬再看看,谢谢!

Payne-Wang avatar May 07 '23 18:05 Payne-Wang

确实不科学,你把"debug": true 加入到config.json看看,这样会打印详细的日志

lanvent avatar May 08 '23 01:05 lanvent

确实有点问题。 我刚才设置了debug=true,日志文件中仍然会把之前的信息发送给接口,内容如下:

[DEBUG][2023-05-08 01:56:22][chat_gpt_bot.py:74] - [CHATGPT] new_query=[{'role': 'system', 'content': '你是一个微信机器人,通过接口与Chatgpt连接, 用户可以通过使用bot+空格+问题的格式唤醒你,同时可以使用bot+空格+$role的格式让你扮演特定角色, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。'}, {'role': 'user', 'content': '你好'}, {'role': 'assistant', 'content': '你好!有什么我可以帮助你的吗?'}, {'role': 'user', 'content': '我刚才问了什么问题?'}, {'role': 'assistant', 'content': '你刚才问的问题是“你好”。如果你有其他问题,可以随时问我。'}, {'role': 'user', 'content': '你吃饭了吗?'}, {'role': 'assistant', 'content': '作为一个人工智能,我不需要吃饭。请问有什么问题我可以帮助你解决吗?'}, {'role': 'user', 'content': '我刚才问了哪些问题'}], session_id=@2989f60decbf2dc3068f471dcdbe62ab02e2da2aeb6aebc0b9bd81dea8f60533, reply_cont=你刚才问了以下几个问题:

  1. 你好
  2. 我刚才问了什么问题?
  3. 你吃饭了吗?

如果你还有其他问题,欢迎随时提问。, completion_tokens=64

更奇怪的是,我切换到GPT3模型,这种情况还是存在,仍然能够记住上下文。难道是我config文件配置错了?我把config.json文件的内容贴在下面,请大佬看看,先谢谢啦。(config.json是在根目录的那个)

{
  "open_ai_api_key": "sk-xxxxxxxxxxxxxxxxxxx2",
  "model": "gpt-4",
  "proxy": "",
  "single_chat_prefix": [
    "bot",
    "@bot",
    ""
  ],
  "single_chat_reply_prefix": "[bot] ",
  "group_chat_prefix": [
    "@bot"
  ],
  "group_name_white_list": [
    "ALL_GROUP"
  ],
  "group_chat_in_one_session": [
    "ALL_GROUP"
  ],
  "image_create_prefix": [
    "画",
    "看",
    "找"
  ],
  "debug": true,
  "speech_recognition": true ,
  "expires_in_seconds": 1,
  "conversation_max_tokens": 1, 
  "group_speech_recognition": true,
  "voice_reply_voice": true,
  "conversation_max_tokens": 4096,
  "expires_in_seconds": 3600,
  "character_desc": "你是一个微信机器人,通过接口与Chatgpt连接, 用户可以通过使用bot+空格+问题的格式唤醒你,同时可以使用bot+空格+$role的格式让你扮演特定角色, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。"
}

Payne-Wang avatar May 08 '23 02:05 Payne-Wang

你看你的配置文件,后面设置成了4096

lanvent avatar May 08 '23 03:05 lanvent

卧槽,我可太蠢了,感谢大佬,可以用了。。。。

Payne-Wang avatar May 08 '23 03:05 Payne-Wang