Chat Bot用户搜索优化:数据获取逻辑与加载时间调整问题
Chat Bot逻辑与性能优化方案
核心问题解决思路
针对你提到的两类核心问题,直接从逻辑层面优化代码,同时修复原代码中的语法错误:
优化后的get_users函数
def get_users(user_id, target_count, conn): user_list = [] # 按年龄从小到大遍历,合并各年龄段用户 for age in range(min_age, max_age + 1): # 传入当前年龄,获取对应年龄段的用户数据 data = get_user_json(age) # 遍历当前年龄段的用户 for user in data['items']: first_name = user['first_name'] last_name = user['last_name'] # 检查数据库是否未记录该用户 if check_database(conn, user_id=user_id) is None: user_list.append([first_name, last_name, age]) # 达到目标数量立即终止,无需继续遍历 if len(user_list) >= target_count: return user_list # 若所有年龄段遍历完仍未达标,返回已获取的全部用户 return user_list
优化后的主交互逻辑
# 默认返回100条结果 profile_count = 100 # 标记是否处于设置数量的模式 count_mode = 0 for event in bot.listen.function(): msg = event.message user_id = event.user_id greetings = ['hi', 'hello'] if msg.lower() in greetings: send_message(user_id, f'Hello User {user_id}. Type "search" to start searching, or type "count" to set number of profiles.') elif msg == "count": count_mode = 1 send_message(user_id, 'Please enter the number of profiles (1-1000):') elif count_mode == 1: try: num = int(msg) if 1 <= num <= 1000: profile_count = num send_message(user_id, f'Profiles number is set to {num}') count_mode = 0 else: send_message(user_id, 'Incorrect number. Please use numbers from 1 to 1000') except ValueError: send_message(user_id, 'Invalid input. Please enter a valid number.') elif msg == "search": try: with connect(database="", user="", password="") as conn: create_table(conn) # 直接传递目标数量,避免全量拉取后截断 matched_users = get_users(user_id=user_id, target_count=profile_count, conn=conn) for user in matched_users: send_message(user_id, f'Name: {user[0]} {user[1]}. They are {user[2]} years old.') if not matched_users: send_message(user_id, 'No matching profiles found.') except Exception as e: send_message(user_id, 'An unexpected error occurred. Try later')
优化点说明
- 性能优化:
get_users函数每添加一个用户就检查是否达到target_count,满足后立即返回,无需遍历所有年龄段和用户,直接解决加载耗时问题 - 逻辑修正:
- 修复
get_user_json调用(原代码未传递年龄参数,导致每次获取相同数据) - 按年龄顺序遍历自动合并各年龄段用户,解决小量场景只取最小年龄组的问题
- 直接将目标数量传入函数,避免全量拉取后截断的资源浪费
- 修复
- 语法与交互修复:
- 修正原代码中的拼写错误(
fucntion→function)、赋值错误(==→=)、缺失引号等问题 - 优化数量设置流程,添加模式标记,避免逻辑混乱
- 完善错误处理,明确提示用户输入问题
- 修正原代码中的拼写错误(
内容的提问来源于stack exchange,提问作者Blandon 93
相关产品推荐
相关产品推荐

