You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')

优化点说明

  1. 性能优化:get_users函数每添加一个用户就检查是否达到target_count,满足后立即返回,无需遍历所有年龄段和用户,直接解决加载耗时问题
  2. 逻辑修正:
    • 修复get_user_json调用(原代码未传递年龄参数,导致每次获取相同数据)
    • 按年龄顺序遍历自动合并各年龄段用户,解决小量场景只取最小年龄组的问题
    • 直接将目标数量传入函数,避免全量拉取后截断的资源浪费
  3. 语法与交互修复:
    • 修正原代码中的拼写错误(fucntion→function)、赋值错误(==→=)、缺失引号等问题
    • 优化数量设置流程,添加模式标记,避免逻辑混乱
    • 完善错误处理,明确提示用户输入问题

内容的提问来源于stack exchange,提问作者Blandon 93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:52:38