基于OpenAI的Telegram Bot多线程会话数据冲突问题求助
解决Telegram Bot多用户会话串数据的问题
你的问题根源在于全局变量my_list被所有用户共享,所有用户的请求都会读写同一个列表,导致不同用户的会话上下文互相覆盖,出现回复串线的情况。要解决这个问题,需要为每个用户维护独立的会话历史,而不是使用全局变量。
修改方案
用字典存储每个用户的会话数据,以用户ID作为唯一键,确保每个用户的对话历史独立:
- 替换全局变量:将全局的
my_list改为字典user_conversations,用于存储每个用户的对话历史 - 会话初始化:处理消息时,根据用户ID获取或初始化其专属的会话上下文
- 独立读写:所有对话历史的操作都基于当前用户的专属上下文,不再操作全局变量
修改后的完整代码
from aiogram import Bot, types import openai from googletrans import Translator from aiogram.utils import executor from aiogram.dispatcher import Dispatcher TOKEN = "你的Telegram Bot Token" openai.api_key = "你的OpenAI API Key" bot = Bot(token=TOKEN) dp = Dispatcher(bot) # 用字典存储每个用户的会话,键为用户ID,值为包含对话历史的字典 user_conversations = {} @dp.message_handler(content_types=["text"]) async def start(message: types.Message): user_id = message.from_user.id translator = Translator() # 初始化新用户的会话上下文 if user_id not in user_conversations: user_conversations[user_id] = { "human_history": "", "ai_history": "" } # 翻译用户输入到英文 dest_language = "en" translated_text = translator.translate(message.text, dest=dest_language).text current_human_input = "\n\nHuman: " + translated_text + "\n\nAI: " # 构造当前用户的完整prompt prompt = f"{user_conversations[user_id]['human_history']}{user_conversations[user_id]['ai_history']}{current_human_input}" # 请求OpenAI response = openai.Completion.create( model="text-davinci-003", prompt=prompt, temperature=0.5, max_tokens=1024, top_p=1.0, frequency_penalty=0.5, presence_penalty=0.0 ) # 翻译回复到俄语 dest_language_2 = "ru" translated_reply = translator.translate(text=response['choices'][0]['text'], dest=dest_language_2).text await message.answer(translated_reply) # 更新当前用户的会话历史 user_conversations[user_id]['ai_history'] = "\n\nAI: " + response.choices[0].text user_conversations[user_id]['human_history'] = "\n\nHuman: " + translated_text if __name__ == '__main__': executor.start_polling(dp, skip_updates=False)
关键修改说明
user_conversations字典:每个用户ID对应一个独立的会话上下文,彻底隔离不同用户的对话数据- 会话初始化:新用户首次发送消息时,自动创建其专属的会话存储结构
- 上下文读写:所有prompt构造和历史更新操作,都只针对当前用户的会话数据,不会影响其他用户
内容的提问来源于stack exchange,提问作者Deoken
相关产品推荐
相关产品推荐

