十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

编辑器实时切换AI模型:多模型并行编程的实践指南

编辑器实时切换AI模型:多模型并行编程的实践指南 做 AI 编程相关开发的同学大概率经历过这样一幕任务做到一半发现当前模型生成的代码要么风格不对要么对项目上下文理解不到位。这时候你会在聊天框里继续追问、反复调整提示词但很少有人第一时间想到——问题可能不在提示词而在模型本身。这篇文章要讲的事情很直接如何在编辑器里同时接入多个 AI 模型并在不同任务中实时切换、快速对比最后选出当前任务场景下的最佳模型。不是要你去追逐某一个最强模型而是帮你建立一套可复用的模型选择机制。文章会覆盖三种主流接入方式编辑器插件、本地模型运行环境、统一模型网关并给出配置示例、验证方法和排错清单。先说结论与其花大量时间刷榜单、到处问目前编程最好的 AI 模型是哪个不如在编辑器里搭一个多模型并行的工作环境。模型榜单更新太快你的任务类型、代码库、上下文长度也在不断变化真正稳定有效的是能快速比较、能灵活切换这层机制能力。下面进入正文。1. 为什么要在编辑器里实时挑选而不是选一个最好的1.1 最强模型是一个过期很快的标签很多开发者的习惯是先找一个排行榜把第一名配置到编辑器里然后长期不变。这个做法在模型迭代慢的时代还行得通但今天显然不合适。新模型、新微调版本、新服务商出现的频率非常高今天的最优解几周后可能就被新版本或者更合适的参数规模超过。更关键的是排行榜上的分数往往来自通用测试集反映的是平均能力。实际编码场景里你要处理的是某个具体项目、某种特定语言、某套业务逻辑。通用分数高不等于在你这个仓库里表现好。榜单只能告诉你大概哪个模型底子不错不能告诉你今天这段代码应该用哪个模型来生成。所以把选模型这件事从一次性决策变成持续性决策才是更现实的做法。在编辑器里保留多个模型入口随时切换等于把模型选择权从购买时的一次决定变成了每个任务都可以重新决定。1.2 不同任务类型最优模型也不同同一个开发者在同一天里会面对完全不同类型的任务写一个独立的小工具函数、重构一段混乱的业务代码、定位一个偶发 BUG、解释一段不熟悉的底层实现、生成单元测试、把需求描述拆解成开发计划。这些任务对模型的要求并不一样。解释代码和写测试需要较强的上下文理解能力代码补全需要低延迟、快响应大范围重构需要较大的上下文窗口涉及私有代码的敏感任务很多人更倾向于用本地模型来处理。没有一个模型能在所有维度上同时做到最好这是架构和训练目标决定的不完全是能力问题。实时挑选模型的意义就在这里根据任务类型选择合适的模型而不是让一个模型承担所有工作。这个思路在工程上其实很常见就像数据库读写分离、不同业务用不同存储引擎一样模型也可以按任务分流。1.3 实时挑选机制要解决的三件事要真正实现实时挑选最佳模型至少需要解决三个问题第一是接入问题。编辑器里能不能同时挂载多个模型服务并且随时切换而不是装多个插件来回折腾。第二是评估问题。切换过去之后怎么判断这个模型在当前任务上更好不能凭感觉需要有一套相对固定的验证方式。第三是成本问题。多模型并用的另一面是成本不可控尤其在使用云端模型 API 的时候必须能看清每次请求消耗了多少 token、花了多少钱。这三个问题如果只靠手工操作去解决会很痛苦。好在现在的编辑器插件和模型网关工具已经提供了比较成熟的方案下面逐步展开。2. 编辑器接入 AI 模型的三种主流方式2.1 内置 AI 助手的编辑器现在不少编辑器原生集成了 AI 助手例如 Cursor、Zed、GitHub Copilot 所在的 VS Code 生态等。这类方案的好处是开箱即用厂商已经帮你做好了模型接入、上下文收集、代码补全等基础能力。但它的局限也很明显内置助手通常只允许你在厂商给定的模型范围里选择有些甚至不允许自定义 API 地址更不用说接入本地模型。如果你希望在一个界面里同时对比多个来源的模型内置 AI 助手的自由度往往不够。所以它适合追求省心的开发者不太适合想自己做模型选型或者需要接入私有模型的人。从热搜词里也能看到很多人会搜索cursor编辑器的终端执行命令报错zed编辑器这类问题说明大家确实把编辑器当作核心开发环境也希望在编辑器里搞定更多事情。但内置助手遇到问题时排查路径往往要依赖厂商支持自由度不如图标插件方案高。2.2 插件扩展Continue、Cline 等插件扩展是在编辑器里实现多模型接入的主流方式。以 VS Code 生态为例Continue 这类开源插件允许你通过配置文件定义任意多个模型包含云端模型和本地模型并且可以在对话、编辑、补全等不同角色中分别指定模型。这类方案的优势很突出配置开放、可版本化、切换直观而且不绑定单一厂商。你可以在一个界面里先用云端大模型做整体设计再切换到本地模型做代码补全整个过程不需要离开编辑器。风险点是配置文件有一定学习成本字段写错会导致插件无法启动。不过这类插件通常都有 schema 校验和文档说明稍微熟悉一下就能掌握。对于想建立实时挑选机制的开发者插件扩展是最容易上手的路径。2.3 统一模型网关LiteLLM、One API 等如果你管理的不是自己一个人的编辑器环境而是团队中多个开发者的模型使用入口或者你同时接入非常多模型服务商那么统一模型网关更合适。网关做的事情可以简单理解为把所有模型服务商的 API 聚合成一个统一的 API 入口对外只暴露一套接口对内可以根据配置把请求分发到不同模型。开发者在编辑器里只需要配置网关地址切换模型时改一个模型名称参数即可不用关心背后到底是哪个服务商。这类工具适合中大型团队、需要集中管控成本和安全边界的场景。单独个人开发者不一定要上网关但如果想要更精细的请求日志、成本统计、模型 A/B 对比网关的价值就会体现出来。2.4 三种方式的选型对比接入方式典型代表优点局限适合人群内置 AI 助手Cursor、Zed、Copilot开箱即用、交互统一模型选择受限、难接入本地模型希望省心、不折腾配置的开发者插件扩展Continue、Cline多模型可配置、切换直观、开源可控需要理解配置文件、排错靠自己想自己控制模型选型、需要本地模型的开发者统一模型网关LiteLLM、One API统一入口、集中成本管理、支持日志和路由部署和维护成本更高团队协作、多服务商接入、需要集中管控的场景这张表不是要分高下而是帮你看清不同方案解决问题的层次。个人开发者通常从方案二开始团队规模上来之后再考虑引入方案三。3. 环境准备与前置条件3.1 编辑器与插件环境本文的示例主要围绕 VS Code Continue 插件展开因为这套组合在编辑器内实时挑选 AI 模型这个话题下最直接而且配置文件可以放到项目目录里方便团队共享。开始之前请确认几件事VS Code 版本建议使用较新的稳定版插件市场可以搜索到 Continue安装后左侧会出现专门的 AI 面板。如果你用 Cursor大部分功能和插件也能兼容但不同编辑器的插件行为会有差异以实际验证为准。另外你需要在编辑器的终端里执行命令所以终端本身要能正常工作。如果遇到类似npm : 无法加载文件的报错通常是终端脚本执行策略问题后面常见问题章节会给出排查思路。3.2 模型服务的 API 凭证如果你要接入云端模型服务需要准备好 API Key。这里不限定具体厂商但配置逻辑是通用的在模型服务商的控制台创建密钥设置好环境变量编辑器的插件会读取环境变量来鉴权。强烈建议不要把 API Key 直接写在编辑器插件的配置文件里更不要提交到 Git 仓库。正确做法是使用环境变量引用例如# Linux / macOS export ANTHROPIC_API_KEYyour_key_here export OPENROUTER_API_KEYyour_key_here # Windows PowerShell $env:ANTHROPIC_API_KEYyour_key_here $env:OPENROUTER_API_KEYyour_key_here设置环境变量后记得重启编辑器才能让插件读到新的变量值。这一步经常被忽略很多401 认证失败问题其实是环境变量没生效。3.3 本地模型的运行时Ollama如果想把本地模型也纳入实时挑选范围建议安装 Ollama。它是一个本地大模型运行工具可以把模型下载到本机通过本地 HTTP 接口提供服务端口默认是 11434。为什么要引入本地模型最直接的考虑是隐私和成本。涉及公司私有代码、未公开接口、数据库连接串时很多人不希望这些内容被发送到外部 API 服务。本地模型虽然平均能力弱于顶级云端模型但在代码补全、简单重构、格式整理这类任务上已经足够而且不产生 token 费用。Ollama 的安装方式很简单官网下载对应系统的安装包即可。安装完成之后后续所有本地模型都能通过同一个服务端口被编辑器插件调用。4. 方案一在 Continue 中配置多模型并实时切换4.1 安装 Continue 插件在 VS Code 扩展市场搜索 Continue点击安装。安装完成后左侧会出现 Continue 的图标点击可以打开对话面板。这个面板支持普通聊天、选中代码后的代码编辑、以及基于代码库上下文的问答。Continue 的核心配置文件是config.yaml它决定了你有哪几个模型可用、每个模型承担什么角色。这个配置文件可以放在用户目录也可以放在项目的.continue目录下推荐放在项目里这样可以跟随代码仓库一起分享给团队。4.2 编写多模型配置文件 config.yaml下面是一份参考配置演示如何同时配置云端模型和本地模型# 文件路径项目根目录 .continue/config.yaml name: Multi-Model Development version: 1.0.0 schema: v1 models: - name: Cloud Coder (Default) provider: anthropic model: claude-sonnet-4-5 apiKey: ${ANTHROPIC_API_KEY} roles: - chat - edit - apply default: true - name: Local Fast Model provider: ollama model: qwen2.5-coder:7b roles: - chat - edit - name: OpenRouter Chat Model provider: openrouter model: deepseek/deepseek-chat apiKey: ${OPENROUTER_API_KEY} roles: - chat注意模型名称和字段在不同版本中可能略有差异以当前版本插件支持的配置说明为准。这里给出的是通用的配置思路。4.3 关键配置项说明解释几个容易踩坑的地方。roles字段决定这个模型能被用在哪些场景chat表示对话、edit表示代码编辑、apply表示应用补丁。如果不写roles默认模型可能只在部分位置出现。default: true表示默认使用这个模型。apiKey引用${ANTHROPIC_API_KEY}这种做法是从环境变量读取密钥避免硬编码。字段名注意区分大小写写错会导致插件加载配置文件失败启动时会有红色错误提示。还有一点要注意多个模型配置里最好明确指定哪些模型承担什么角色不要所有模型都配apply角色。因为某些本地模型在处理大段代码 diff 时能力不足如果误用了可能会生成格式不正确的补丁。4.4 在编辑器中实际切换模型配置文件保存后在 Continue 对话面板左上角通常会出现一个模型选择下拉框点开就能看到你配置的所有模型。选择某一个模型后接下来发送的对话或编辑请求都会走这个模型。这就是实时挑选最直观的体验你不需要改代码、不需要换插件、不需要重新部署任何东西只需要下拉切换。如果发现某个模型在当前任务上效果不理想马上切回另一个模型重新生成即可。平时使用的小技巧先让能力强的云端模型做整体方案设计等方案确定后再切换到本地小模型去生成重复性代码。这样既保证质量又能降低 token 消耗。5. 方案二用 Ollama 在编辑器里跑本地模型5.1 本地模型在实时挑选中的价值引入本地模型的意义不只是省钱它还能让你的实时挑选覆盖到隐私敏感场景。比如你在处理一个还不能公开上线的新项目代码里有未发布的业务逻辑此时把整段代码发给外部 API 显然不合适。本地模型在离线环境下也能工作天然规避了这类问题。另一个好处是稳定性。云端模型偶尔会限流、超时、或者因为服务端升级临时不可用。如果你在编辑器里默认配置了多个模型其中包含一个本地模型那么遇到云端模型故障时切到本地模型就能继续工作。当然本地模型也有代价需要本机有足够的内存和算力加载大模型时会占用较多资源。对于日常代码补全和中小规模问答7B 到 14B 参数的模型在普通开发机上通常是可以接受的。5.2 拉取和启动本地模型先用 Ollama 拉取一个适合代码任务的模型。这里以 Qwen2.5 Coder 系列为例因为它是社区常用于代码开发的本地模型下载命令如下# 查看本机已有的模型 ollama list # 拉取 7B 参数版本适合普通开发机 ollama pull qwen2.5-coder:7b # 启动服务默认监听 11434 端口 ollama serveollama serve会一直运行在前台你也可以把它注册成系统服务这样开机自动启动不需要每次手动运行。启动成功后用下面的命令验证服务是否正常curl http://localhost:11434/api/tags如果返回一段 JSON里面包含你拉取到的模型列表说明本地模型服务已经就绪。如果提示连接失败先确认 Ollama 是否还在运行再检查端口是否被占用。5.3 将本地模型接入编辑器在 Continue 的config.yaml中增加一个本地模型配置即可。provider填ollamamodel填你拉取到的模型名称models: - name: Local Qwen Coder provider: ollama model: qwen2.5-coder:7b roles: - chat - edit保存后回到 Continue 面板模型下拉框里就会出现Local Qwen Coder。选择它然后发送一个简单的代码生成请求观察是否能在几秒内返回结果。常见问题是本地模型首次加载比较慢因为需要把模型参数加载到内存中。如果你发现点了发送之后长时间没有输出但 CPU/GPU 占用明显上升说明模型正在加载耐心等一会儿即可。5.4 本地模型的适用边界需要清醒认识的是本地模型并不适合所有场景。处理超大仓库的全局分析、需要极强逻辑推理能力的算法设计、复杂跨文件重构这些任务优先用云端大模型更稳妥。本地模型的优势在于快速反馈、隐私安全、零额外费用而不是绝对能力上限。所以在实时挑选机制里本地模型更适合作为快速验证、兜底、隐私任务的选项而不是唯一选择。把它和云端模型放在同一个下拉框里正好发挥了各自的优势。6. 方案三用 LiteLLM 网关统一路由多个模型6.1 为什么需要一个网关当你的模型数量多到一定程度每个插件都直连各家模型服务商会带来几个问题每个服务商的 API 格式略有差异切换时要改很多配置不同开发者的连接方式不一致团队很难统一请求日志和成本统计也分散在各家后台。LiteLLM 这类统一模型网关可以解决这些问题。它把多家模型服务商的 API 统一成 OpenAI 兼容格式对外暴露一个本地端口编辑器只需要接这一个地址。以后新增模型时只需要改网关配置开发者的编辑器配置不用动。对团队来说网关还提供了一个集中管控点可以在这里统计每个人的 token 消耗也可以在网关层做访问控制避免 API Key 四处下发。6.2 编写网关配置下面是一个 LiteLLM 配置示例同时代理了一个云端模型和一个本地模型# 文件路径litellm_config.yaml model_list: - model_name: primary-coder litellm_params: model: anthropic/claude-sonnet-4-5 api_key: os.environ/ANTHROPIC_API_KEY - model_name: local-coder litellm_params: model: ollama/qwen2.5-coder:7b api_base: http://localhost:11434 - model_name: backup-chat litellm_params: model: deepseek/deepseek-chat api_key: os.environ/DEEPSEEK_API_KEY注意litellm_params.model前面的前缀比如anthropic/、ollama/、deepseek/它告诉网关这个请求应该路由到哪类服务商。api_base用于指定本地服务的地址。需要说明的是不同 LiteLLM 版本的配置字段可能有细微差异以官方文档为准。这里的重点在于理解网关通过 model_name 对外暴露统一名称这个思路。6.3 启动网关并在编辑器中接入准备工作做好后启动网关litellm --config litellm_config.yaml --port 4000启动成功后网关会在http://localhost:4000提供一个 OpenAI 兼容接口。接着在编辑器的 Continue 配置中把provider改成自定义 OpenAI 兼容地址model填网关中定义的model_namemodels: - name: Gateway Primary provider: openai model: primary-coder apiBase: http://localhost:4000 apiKey: dummy-key roles: - chat - editapiKey可以随便填一个占位值因为请求先到本地网关网关再去对应服务商做真实鉴权。这里的重点是接口格式统一了编辑器只认http://localhost:4000这一个地址。6.4 用请求验证网关是否正确路由配置完成后可以用一个简单的 curl 请求来测试网关路由是否正常curl http://localhost:4000/chat/completions \ -H Content-Type: application/json \ -d { model: local-coder, messages: [{role: user, content: 用 Python 写一个从 URL 批量下载文件的函数要求带超时和重试}] }如果返回了模型的回复内容说明网关可以正常访问本地模型。把model改成primary-coder再次发起请求能返回云端模型结果的话说明云端路由也正常。网关方案最大的优势是换模型不动编辑器配置。以后要新增模型只需要改litellm_config.yaml并重启网关编辑器下拉框里就能出现新的model_name这种实时添加模型的能力正是实时挑选最佳模型在团队层面的延伸。7. 实时挑选时重点评估哪些指标7.1 回答质量与任务正确率这是最核心的指标。判断模型好不好不应该只看生成速度或价格而要看它在你的具体任务上是否给出正确、可运行的代码。建议准备一组固定测试任务每次接入新模型后都跑一遍记录结果质量。任务可以是一小段算法题、一个常见的 CRUD 接口、一段需要重构的坏代码。固定任务的意义在于你可以横向对比不同模型在同一个问题上的表现而不是凭印象拍脑袋。7.2 速度首次响应时间与生成速度实时挑选场景里速度体验很重要。这里的速度包含两个维度首次响应时间指的是你发送请求后到收到第一个 token 的时间影响有没有反应的体感生成速度指的是完整输出的耗时影响长任务等待时间。本地模型受到本机算力影响首次加载可能很慢但后续请求通常稳定。云端模型受服务端负载和网络影响高峰期可能变慢。速度评估要结合自己的网络环境和模型服务商状态来判断不要只看宣传参数。7.3 上下文窗口与文件长度你的项目代码往往超过几千行如果模型上下文窗口太小在处理大型文件或多个文件时会遇到截断或遗漏。实时挑选时要特别关注当前任务需要的上下文大小。需要处理大量代码库内容时优先选择上下文窗口更大的模型只是写一个独立小函数时用上下文窗口较小的本地模型也足够。理解自己的任务对上下文的需求比追求大上下文本身更重要。7.4 成本与配额云端模型按 token 计费成本不是线性的输出 token 往往比输入 token 贵。高频使用场景下一个效率不够高的模型可能让你多花钱因为你会反复生成、反复修改。建议在网关或模型服务商控制台定期查看 token 用量。建立成本意识后你才能更理性地为不同任务分配不同模型把贵模型用在关键节点上而不是每个请求都追求最贵最强大的模型。7.5 本地资源占用如果你使用了本地模型还要关注本机的内存、CPU/GPU 占用。在编辑器里跑本地模型会导致本机资源竞争进而影响编译、测试等开发流程。用系统监控工具查看 Ollama 进程的资源占用如果发现内存占用长期过高可以考虑换用更小参数的模型或者将本地模型只用于特定任务而不是所有请求。这也是实时挑选的一部分根据资源条件调整模型选择策略。评估维度云端大模型优势本地小模型优势建议回答质量通常更强够用但上限有限复杂任务用云端简单任务用本地响应速度受网络影响加载后稳定高频小任务优先本地上下文窗口通常更大相对较小长文件优先大上下文模型成本按 token 计费零额外费用高频任务优先本地资源占用占用服务器资源占用本机资源根据开发机配置取舍8. 常见问题与排查方法8.1 常见问题排查表问题现象可能原因排查方式解决方案编辑器终端执行 npm 命令报无法加载文件PowerShell 执行策略限制脚本运行查看报错信息和当前执行策略在允许的范围内调整执行策略或用 CMD 执行命令选择本地模型后长时间无输出Ollama 服务未启动或端口不匹配检查ollama serve日志测试curl localhost:11434/api/tags启动 Ollama 服务确认api_base端口一致切换模型后仍返回旧模型结果插件缓存了旧请求或配置未重新加载查看插件调试日志确认配置加载时间重启编辑器或手动触发配置重载上下文太长导致结果被截断模型上下文窗口小于任务内容查看错误日志中的 token 超限提示改用大上下文模型或缩小任务范围Provider 认证失败报 401API Key 未设置、设置错误或无权限检查环境变量是否生效测试 Key 是否有效重新配置密钥注意不要提交到仓库网关返回 500 错误网关配置中模型名或 API 地址写错查看网关启动日志确认请求命中的模型修正litellm_config.yaml中的模型和地址本地模型生成代码格式混乱模型能力不足或不适合该角色观察现象是否集中在 edit/apply 场景仅将本地模型用于 chat/补全编辑角色交给云端模型8.2 两个高频问题的详细排查第一个高频问题是编辑器终端执行命令时报错。比如执行npm install或ollama serve时终端直接抛出无法加载文件因为在此系统上禁止运行脚本。这类问题通常不是 Node.js 或 Ollama 本身坏了而是终端的脚本执行策略默认限制运行.ps1脚本。可以先在 PowerShell 里执行Get-ExecutionPolicy查看当前策略再决定是否调整。调整执行策略属于系统级配置要结合你所在的安全规范来操作不要为了跑通命令而随意放开全部限制。第二个高频问题是切换了模型但效果没变化。很多时候你以为切换成功了实际上请求仍然走的是旧配置。原因一般是配置文件保存后插件没有热加载或者是同一个任务在对话上下文里延续了旧模型产生的历史。遇到这种情况先新建一个对话再切换模型大多数情况下就能看到新模型的行为如果仍然不行再重启编辑器。9. 最佳实践与工程建议9.1 任务模板与对比基线要做实时挑选最怕的是每次对比都凭感觉。建议准备一份固定的任务模板包含三到五个典型的开发任务比如为这个函数编写单元测试解释这段代码的逻辑缺陷把这段代码重构为面向对象风格。每次引入新模型都用同一套模板跑一遍把结果记录下来。这样做一段时间后你会形成自己的模型偏好基线而不是依赖别人的评测结论。这个基线就是你自己最可靠的模型选择依据比任何榜单都更贴近真实工作场景。9.2 成本控制与模型分级多模型并用的前提是成本可控。建议把模型分成三级一级用于复杂设计、疑难问题定位通常是最强的云端模型二级用于常规 CRUD、测试生成可以是性价比更高的云端模型三级用于格式化、补全、重复性代码优先交给本地模型。分级之后尽量让大部分请求落在二级和三级模型上。一级模型只处理真正重要的任务这样既保证质量也能把 token 消耗控制在一个合理范围。9.3 代码安全与私有代码边界使用 AI 模型处理代码时要清楚代码的边界。涉及未公开的业务逻辑、内部接口地址、数据库连接信息等敏感内容时优先选择本地模型或经过审批的私有化部署模型。不要因为默认模型配置的是云端服务就下意识把所有内容都发送出去。从工程安全角度建议在编辑器插件配置里把敏感项目的模型访问限制在本地模型范围或者给敏感任务单独准备一套配置文件。这个习惯在团队协作中尤其重要因为每个开发者的安全意识不同统一约束比事后补救可靠得多。9.4 团队协作与配置版本化如果你在团队里推广多模型实时挑选的做法建议把配置文件放入项目仓库。Continue 支持将config.yaml放在项目.continue目录这样所有开发者 clone 代码后就能得到统一的模型配置。配置版本化还能帮你管理模型变更历史哪个模型是从什么时候开始作为默认模型的、哪个模型因为效果不好被移除都能从 Git 历史里看到。这比口头通知、各自改配置要规范得多。9.5 新模型引入后的回归验证有新的模型版本或者新的本地模型发布时不要急着替换默认模型。先把它加入配置用任务模板做一组回归测试和当前默认模型对比。看结果是否更优看响应速度是否可以接受看成本是否在预算内确认没问题后再调整default: true指向。这个方法本质上和代码重构一个道理先做兼容验证再做默认切换而不是一上来就改默认配置导致全团队受影响。10. 总结与后续实践建议回顾一下编辑器里实时挑选最佳 AI 模型核心并不是找到一个万能的王者模型而是建立一套多模型接入、快速切换、按任务分流、持续评估的机制。编辑器插件解决了接入和切换问题本地模型解决隐私和成本问题统一网关解决团队和集中管控问题任务模板和回归验证解决评估问题。建议你现在就动手做三件事第一在编辑器里配置至少两个模型一个云端大模型加一个本地小模型第二准备一份自己的任务模板把常用的几个开发场景固化下来第三安装一个本地模型运行工具先用一个最小例子跑通本地对话链路。这三件事做完你就拥有了一个可以随时扩展的模型选择环境后面不管新模型怎么出你都能快速验证并决定要不要切换。
返回列表