在 Mac 上使用 AI 搜索引擎时,用户常常会遇到两个极端:要么所有请求都交给云端大模型,响应很快但隐私数据全部要过一遍远程服务;要么完全本地部署模型,隐私安全有了,但模型能力和联网搜索效果明显下降。近期 Perplexity 在 Mac 端规划“混合模式”的消息,让这条中间路线重新成了讨论焦点:把问题拆分,主任务交给云端大模型,子任务交给本地模型处理,既保留联网搜索和复杂推理能力,又能在本地完成摘要提取、标签生成、敏感内容识别等相对独立的工作。
这篇文章会从混合模式的概念出发,拆解“本地模型处理子任务”在 Mac 上到底怎么落地,包括任务切分方式、本地模型运行环境准备、最小可运行示例、验证方法、常见问题排查和生产环境注意事项。内容面向三类读者:想理解 Perplexity 混合模式技术原理的 AI 产品使用者;正在 Mac 上尝试本地模型部署的开发者;以及准备在自己的应用里做“远程大模型 + 本地小模型”协同方案的工程师。
1. 先理解混合模式为什么要让本地模型处理子任务
要讨论混合模式,不能只停留在“本地模型负责一部分工作”这个层面。需要先拆清楚 Perplexity 这类 AI 搜索产品原本是怎么工作的,再理解引入本地模型后到底改变了什么。
1.1 Perplexity 的常规工作链路
Perplexity 本质上是一个“搜索 + 生成”的复合系统。用户输入一个问题后,系统内部大致经历以下环节:
- 理解用户意图,把自然语言问题转换成结构化查询。
- 在网络上检索网页、文档或知识库内容。
- 把检索结果拼装成上下文,交给大语言模型进行分析。
- 模型生成带引用来源的答案,并在界面中展示。
在整个链路中,远程大模型承担了最重的理解、归纳和生成工作。这个设计的优点是能力强、效果好,缺点是每一次查询都要把用户的提问、搜索摘要、网页片段发送到云端。对于需要处理本地文件、私人文档或敏感数据的场景,这条链路存在明显短板。
1.2 本地模型补上的是隐私、成本和延迟的短板
混合模式的核心思路,是把链路中的一部分子任务剥离出来,交给本地模型执行。这样做有三个直接收益:
- 隐私隔离:涉及本地文件内容的关键词提取、摘要计算发生在本机,不需要上传到远程服务。
- 成本控制:简单子任务不必消耗云端大模型的 Token,比如给搜索结果打标签、拆分长文本、判断内容是否属于某个分类。
- 延迟优化:在弱网环境下,本地模型处理简单任务比往返远程 API 更快,尤其是只需要几十到几百 Token 输出的任务。
需要说明的是,“混合模式”并不意味着完全离线。它更像是把任务按“敏感度”和“复杂度”分层:敏感数据留在本地,复杂推理继续走远程。
1.3 从产品角度看,混合模式适合承接哪些使用场景
从工程实现角度推测,Perplexity 在 Mac 上引入混合模式,最可能优先支持以下几类场景:
| 场景 | 远程模型职责 | 本地模型职责 |
|---|---|---|
| 本地文档问答 | 生成最终答案、综合多文档观点 | 文档切分、段落摘要、关键词提取 |
| 隐私敏感查询 | 处理用户明确选择公开的部分 | 识别并脱敏姓名、邮箱、地址等实体 |
| 离线场景辅助 | 暂不调用,等网络恢复后再补全 | 先给出基于本地缓存的初步整理 |
| 搜索内容预处理 | 生成回答正文 | 对搜索结果做分类、去重、标签生成 |
这种划分背后有一个重要判断:本地模型不需要有多强大,只需要在“小任务”上足够稳。
注意:不要把混合模式理解成“两个模型同时回答问题”。它更接近流水线分工,远程模型负责复杂思考,本地模型负责局部加工,中间通过明确的任务描述和结构化数据衔接。
2. 混合模式的技术链路与子任务划分方式
如果要在 Mac 上模拟或者实现一套混合模式,第一步不是写代码,而是设计任务切分规则。任务切分不合理,后面所有代码都会变得混乱。
2.1 子任务应该按什么标准切分
子任务切分的标准,可以总结为三个维度:数据敏感度、输出规模、对模型能力的要求。
- 数据敏感度:如果子任务读取的是本地文件、剪贴板内容、私人邮件,优先交给本地模型。
- 输出规模:需要输出大量文字、结构化 JSON、长摘要的任务,更适合本地模型先处理,因为 Token 成本可控。
- 模型能力要求:需要复杂推理、常识判断或跨语言翻译的任务,仍然保留给远程大模型;只做分类、抽取、改写、格式化等任务,本地模型足够胜任。
举个例子:用户让 AI 搜索“大语言模型量化技术的最新进展”,这个主任务依赖联网检索,必须交给远程模型。但用户同时选了一篇本地 PDF 要求“帮我总结后再一起搜索”,这时候 PDF 的切分和摘要就应该由本地模型完成,而不是把整篇 PDF 传到云端。
2.2 本地模型适合承接哪几类典型子任务
根据现有能在 Mac 上运行的本地模型能力,以下子任务比较适合放进混合模式:
- 文本摘要:把长文档压缩成几百字以内的摘要。
- 关键词和标签抽取:从段落中提取实体或主题标签。
- 文本分类:判断一段内容是新闻、技术文档还是对话记录。
- 格式转换:把非结构化文本转成 JSON 或 Markdown。
- 敏感信息识别:识别邮箱、手机号、身份证号等实体并脱敏。
- 初步排序或过滤:判断某条搜索结果是否与用户问题相关。
这些任务有两个共同特点:不需要很强的长程推理,输出结果长度较短,并且结果可以被远程模型继续使用。
2.3 远程模型保留哪些能力
在混合模式架构里,远程模型不应该被完全替代,它仍然负责以下能力:
- 多跳推理:需要综合多个来源、多步逻辑才能回答的问题。
- 实时知识:依赖实时搜索、新闻、价格等信息,本地模型很难维护。
- 自然对话:需要记住上下文并保持语气一致的长对话。
- 最终内容生成:面向用户展示的最终答案,要求语言质量高。
远程模型处理的是“结果”,本地模型处理的是“素材”。这种分工能减少远程接口的调用次数,也减少了不必要的数据上传。
3. Mac 本地模型运行环境准备
模拟混合模式的第二步,是在 Mac 上把本地模型跑起来。当前比较推荐的方式是用 Ollama 管理模型,因为它安装简单、命令行友好、默认提供本地 HTTP API,方便后续代码调用。
3.1 硬件和系统要求
本地模型对硬件有一定要求,尤其是内存。以 Mac 为例,建议先确认以下条件:
| 项目 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| 系统版本 | macOS 12+ | macOS 14+ | Ollama 对旧系统支持有限 |
| 内存 | 16 GB | 32 GB 或更多 | 决定能运行多大的模型 |
| 硬盘 | 10 GB 剩余空间 | 30 GB 以上 | 模型文件体积较大 |
| 芯片 | Apple Silicon 优先 | M1 Pro 及以上 | Intel 机型速度偏慢 |
学习环境跑一个 3B 或 7B 量级的量化模型即可,不需要追求最大参数。
3.2 安装 Ollama 并拉取模型
访问 Ollama 官网下载 macOS 安装包,或使用 Homebrew 安装:
brew install ollama安装后先启动服务:
ollama serve然后拉取一个小型模型,例如 Qwen2.5 3B 或 Llama 3.2 3B:
ollama pull qwen2.5:3b拉取成功后,可以通过命令行验证模型是否可用:
ollama run qwen2.5:3b "用一句话总结混合模式"3.3 确认本地模型提供了可编程调用接口
Ollama 默认在http://localhost:11434上提供 REST API。可以用curl验证:
curl http://localhost:11434/api/generate \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:3b", "prompt": "简单介绍一下本地模型", "stream": false }'如果返回 JSON 中包含response字段,说明接口可用。接下来就可以在 Python 或 Node.js 代码里通过这个接口调用本地模型。
注意:Ollama 会默认下载模型到用户目录下的
.ollama文件夹中。如果磁盘空间紧张,要关注模型文件大小,不要一次性拉取过多大模型。
4. 写一个最小混合模式示例
下面的示例用来演示“远程模型做主规划、本地模型处理子任务”的完整闭环。为了便于运行,远程模型部分使用 OpenAI 兼容接口,但实际项目中需要替换成自己的 API 配置;本地模型通过 Ollama 接口调用。
4.1 示例目标
用户输入一段本地技术文档内容和一个问题。示例程序需要完成以下工作:
- 把文档交给本地模型,生成精简摘要。
- 由本地模型提取文档中的关键词列表。
- 把摘要和关键词连同用户问题一起发送给远程模型,生成最终回答。
这样本地模型处理的是文档内容,远程模型只需要基于处理后的素材生成答案,原始文档不会上传到远程服务。
4.2 项目结构与依赖
项目目录建议如下:
hybrid-demo/ ├── main.py ├── requirements.txt └── .env依赖只有requests和python-dotenv:
requests python-dotenv安装命令:
pip install -r requirements.txt4.3 Python 代码实现
先在.env中写入远程 API 配置:
REMOTE_API_KEY=your_api_key_here REMOTE_BASE_URL=https://api.example.com/v1 REMOTE_MODEL=gpt-4o-mini LOCAL_MODEL=qwen2.5:3b然后编写main.py:
import os import json import requests from dotenv import load_dotenv load_dotenv() REMOTE_API_KEY = os.getenv("REMOTE_API_KEY") REMOTE_BASE_URL = os.getenv("REMOTE_BASE_URL") REMOTE_MODEL = os.getenv("REMOTE_MODEL") LOCAL_MODEL = os.getenv("LOCAL_MODEL") LOCAL_API_URL = "http://localhost:11434/api/generate" def call_local_model(prompt: str) -> str: """调用本地模型,返回纯文本结果。""" response = requests.post( LOCAL_API_URL, json={ "model": LOCAL_MODEL, "prompt": prompt, "stream": False, }, timeout=120, ) response.raise_for_status() return response.json().get("response", "").strip() def call_remote_model(system_prompt: str, user_prompt: str) -> str: """调用远程模型,返回最终回答。""" response = requests.post( f"{REMOTE_BASE_URL}/chat/completions", headers={ "Authorization": f"Bearer {REMOTE_API_KEY}", "Content-Type": "application/json", }, json={ "model": REMOTE_MODEL, "messages": [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}, ], "temperature": 0.3, }, timeout=60, ) response.raise_for_status() return response.json()["choices"][0]["message"]["content"] def summarize_document(document_text: str) -> str: """子任务 1:本地模型生成摘要。""" prompt = ( "你是一个文档摘要助手。请用不超过200字总结下面的技术文档," "只输出摘要正文,不要额外解释。\n\n" f"文档内容:\n{document_text}" ) return call_local_model(prompt) def extract_keywords(document_text: str) -> list[str]: """子任务 2:本地模型提取关键词。""" prompt = ( "从下面的技术文档中提取5个最重要的关键词," "使用JSON数组格式返回,例如 [\"关键词1\", \"关键词2\"]。\n\n" f"文档内容:\n{document_text}" ) raw = call_local_model(prompt) try: keyword_list = json.loads(raw.strip()) except json.JSONDecodeError: keyword_list = [item.strip() for item in raw.split("、") if item.strip()] return keyword_list def main() -> None: document_text = """ 大语言模型通常采用自回归方式生成文本。在实际部署中,为了降低推理成本, 工程师会使用量化技术把模型权重从 FP16 压缩到 INT8 或 INT4,同时尽量保持精度。 量化可以在推理阶段减少显存占用,并提升生成速度。常见的量化方案包括 GPTQ、 AWQ 和 GGUF。GGUF 格式在本地部署场景中非常流行,因为它支持 CPU 推理, 并且能够与 Ollama、llama.cpp 等工具直接集成。 """ print("第 1 步:本地模型生成摘要...") summary = summarize_document(document_text) print("摘要结果:") print(summary) print("\n第 2 步:本地模型提取关键词...") keywords = extract_keywords(document_text) print("关键词结果:") print(keywords) user_question = "这篇文章讲了什么?部署大模型时最值得关注的技术点是什么?" print("\n第 3 步:把摘要和关键词发送给远程模型...") system_prompt = "你是一个问答助手,基于用户提供的材料回答问题,不要编造额外内容。" user_prompt = ( f"用户问题:{user_question}\n\n" f"本地摘要:{summary}\n" f"关键词:{', '.join(keywords)}\n" ) final_answer = call_remote_model(system_prompt, user_prompt) print("最终回答:") print(final_answer) if __name__ == "__main__": main()4.4 代码关键点解释
这段代码的核心思路是“本地模型先加工,远程模型后生成”。
call_local_model把请求发给 Ollama 的/api/generate接口,stream: false表示一次性返回完整结果。call_remote_model使用 OpenAI 兼容接口,把摘要和关键词作为上下文传给远程模型。summarize_document和extract_keywords是两个独立子任务,实际项目中可以并行调用,减少等待时间。- 提取关键词时如果模型没有返回标准 JSON,代码会尝试按顿号切分,这是为了增强容错。
实际项目中,还要根据文档长度决定是否需要先切分多段再分别摘要,再合并摘要结果。下面代码块给出一个简单的长文本切分思路:
def chunk_text(text: str, chunk_size: int = 1500, overlap: int = 200) -> list[str]: """按固定长度切分文本,保证相邻块之间有重叠,避免切断语义。""" chunks = [] start = 0 while start < len(text): end = start + chunk_size chunk = text[start:end] chunks.append(chunk) if end >= len(text): break start = end - overlap return chunksdef summarize_long_document(text: str) -> str: """先切分再逐段摘要,最后合并。""" chunks = chunk_text(text) summaries = [] for i, chunk in enumerate(chunks, 1): print(f"正在摘要第 {i}/{len(chunks)} 段...") prompt = f"请用100字以内概括下面内容:\n{chunk}" summaries.append(call_local_model(prompt)) combined = "\n".join(summaries) final_prompt = f"请把下面多个段落的摘要合并成一段完整摘要:\n{combined}" return call_local_model(final_prompt)5. 关键参数与路由设计说明
混合模式能否正常工作,很大程度上取决于参数和路由规则是否合理。这里单独说明几个最关键的配置点。
5.1 本地模型的选择参数
在 Ollama 中,可以通过num_ctx控制上下文长度,通过temperature控制随机性。
{ "model": "qwen2.5:3b", "prompt": "请提取关键词", "stream": false, "options": { "temperature": 0.2, "num_ctx": 4096 } }| 参数 | 含义 | 推荐值 | 调整影响 |
|---|---|---|---|
| temperature | 生成随机性 | 0.1 - 0.3 | 提取关键词和摘要建议调低,避免输出不稳定的表述 |
| num_ctx | 上下文窗口长度 | 4096 - 8192 | 越大越能处理长文档,但会占用更多内存 |
| top_p | 采样概率阈值 | 0.9 左右 | 影响生成结果多样性,子任务场景不需要太高 |
| num_predict | 最大生成 Token 数 | 按任务设定 | 摘要设置为 500,关键词设置为 200 |
5.2 子任务路由判断规则
实际应用中,不能把所有子任务都发给本地模型。需要一个路由规则,判断什么任务走本地,什么任务走远程。以下是一个可参考的规则:
def should_use_local_model(task_type: str, data_sensitivity: str, output_length: int) -> bool: """判断子任务是否应该交给本地模型。""" if data_sensitivity == "high": return True if task_type in ["summarize", "keywords", "classify", "extract"]: return True if output_length < 500: return True return False路由判断的原则是:敏感数据必须留在本地;简单且低输出量的任务优先本地;高复杂度、高输出量的任务走远程。
5.3 任务描述模板设计
本地模型对指令模板很敏感。同样的任务,模板写得好与不好,结果差异很大。推荐给子任务设计固定格式:
角色:你是文档摘要助手。 任务:总结下面文档,输出不超过200字。 约束:不要输出多余解释,不要编造文档中不存在的信息。 输入: {文档内容} 输出:固定模板的好处是方便测试和调整。如果要切换本地模型,只需要保证模板里的约束仍然适用。
6. 运行验证与效果评估
代码写完后,不能只看“程序能跑”就结束。需要从子任务质量、调用链路、资源占用三个维度验证混合模式是否达到预期。
6.1 验证本地模型确实在执行子任务
运行示例程序后,应该看到三段输出。第一段是本地摘要,第二段是关键词列表,第三段是远程模型基于本地结果生成的回答。
第 1 步:本地模型生成摘要... 摘要结果: 本文介绍大语言模型采用自回归生成,部署时通过量化降低显存占用, 并对比了 GPTQ、AWQ、GGUF 等量化方案,其中 GGUF 适合本地 CPU 推理。 第 2 步:本地模型提取关键词... 关键词结果: ['自回归', '量化', '显存占用', 'GGUF', 'Ollama'] 第 3 步:把摘要和关键词发送给远程模型... 最终回答: 这篇文章主要讨论大语言模型部署中的量化技术。值得关注的是量化能降低显存占用, 并且 GGUF 格式在本地部署场景中具有明显优势,可以结合 Ollama 使用。如果本地摘要为空,或者关键词返回的是重复内容,需要检查模型提示词和温度参数。
6.2 用表格记录不同本地模型的效果差异
以下是一个效果评估表模板,可以在不同模型间切换时记录数据:
| 指标 | qwen2.5:3b | llama3.2:3b | 说明 |
|---|---|---|---|
| 摘要平均用时 | 3.2 秒 | 4.1 秒 | 受硬件影响 |
| 关键词一次解析成功率 | 95% | 85% | JSON 格式是否规范 |
| 内存占用峰值 | 约 4 GB | 约 4.5 GB | 用 Activity Monitor 查看 |
| 摘要语义准确率 | 高 | 中 | 需要人工抽样打分 |
| 是否支持中文 | 良好 | 一般 | 中文任务要优先选中文语料好的模型 |
6.3 请求链路和耗时分析
混合模式的耗时主要由三部分构成:本地模型处理时间、远程模型调用时间、网络传输时间。排错时可以先分别记录三段耗时。
import time start = time.time() summary = summarize_document(document_text) local_elapsed = time.time() - start print(f"本地摘要耗时:{local_elapsed:.2f} 秒")如果本地耗时过长,可以尝试换更小的量化模型或减少输入文本;如果远程耗时过长,通常和模型参数或网络状况有关。
注意:验证结果时不要只看单次输出。本地模型存在随机性,建议同一测试用例运行 3 到 5 次,观察结果是否稳定。
7. 常见问题与排查路径
混合模式涉及本地服务、远程 API、任务切分和文本处理多个环节,任何一个环节出问题都会导致整体异常。下面按现象列出常见问题。
7.1 本地模型调用失败
现象:程序报ConnectionError或 Ollama 接口返回 404。
可能原因:
- Ollama 服务没有启动。
- 模型名称拼写错误。
- 本地接口地址不是默认的
localhost:11434。 - 端口被占用或防火墙拦截。
检查方式:
# 确认 Ollama 服务是否运行 curl http://localhost:11434 # 查看已经拉取的模型 ollama list解决方案:先运行ollama serve,再确认ollama list中的模型名称与代码一致。如果修改过端口,需要同步修改LOCAL_API_URL。
7.2 Mac 内存占用过高
现象:运行本地模型后,系统明显卡顿,或者出现“内存不足”提示。
可能原因:
- 模型参数量过大,超过了物理内存承受范围。
- 同时运行了多个模型。
num_ctx设置过大,导致上下文缓存占用大量内存。- 其他应用占用了大量内存。
解决方案:
- 换用更小的模型,例如从 7B 降到 3B。
- 结束不使用的 Ollama 模型进程。
- 调低
num_ctx,比如从 8192 降到 4096。 - 使用
ollama ps查看当前内存占用。
ollama ps7.3 子任务输出质量不稳定
现象:摘要内容偏离原文,或关键词出现错误格式。
可能原因:
- 温度参数设置过高,导致随机性过大。
- 提示词约束不够明确。
- 模型对中文指令理解不足。
- 输入文本过长,模型丢失关键信息。
解决方案:把temperature降到 0.2 以下,在提示词中增加“不要输出多余解释”等约束;如果文本过长,先切分再分段处理。
7.4 混合模式整体响应慢
现象:远程模型和本地模型都没有报错,但整个流程耗时很长。
可能原因:
- 本地模型推理速度慢。
- 远程 API 网络延迟高。
- 两个子任务串行执行,浪费等待时间。
- 文档过大,切分和摘要需要多轮调用。
解决方案:
- 使用并发方式同时执行摘要和关键词提取。
- 优先处理小段文本,减少本地模型输入长度。
- 在弱网场景下,把远程模型超时时间调长并增加重试机制。
from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=2) as executor: future_summary = executor.submit(summarize_document, document_text) future_keywords = executor.submit(extract_keywords, document_text) summary = future_summary.result() keywords = future_keywords.result()7.5 常见问题速查表
| 问题现象 | 常见原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 本地接口 404 | 服务未启动 | curl http://localhost:11434 | 运行ollama serve |
| 模型下载失败 | 网络或存储空间不足 | 检查剩余磁盘空间 | 清理磁盘后重新拉取 |
| 输出乱码 | 模型不支持中文 | 更换中文能力强的模型 | 用 qwen 或 glm 系列 |
| JSON 解析失败 | 模型返回多余文本 | 打印原始返回内容 | 改用字符串解析或固定输出格式 |
| 远程 API 401 | API Key 错误 | 检查.env配置 | 确认环境变量已加载 |
8. 最佳实践与扩展方向
混合模式在 Mac 上的真实落地,不会只是“调用两个模型”这么简单。工程上还需要考虑配置管理、任务状态追踪、异常降级和用户体验。
8.1 学习环境与生产环境的差异
| 维度 | 学习环境 | 生产环境 |
|---|---|---|
| 模型管理 | Ollama 手动拉取 | 固定版本,使用锁文件或镜像仓库管理 |
| 配置 | 本地 .env | 配置中心或环境变量注入 |
| 日志 | print 输出 | 结构化 JSON 日志,记录任务 ID |
| 错误处理 | 直接抛异常 | 重试、降级到纯远程模式 |
| 队列 | 同步调用 | 异步消息队列,控制并发 |
| 监控 | 查看终端 | 记录耗时、Token 用量、失败率 |
生产环境里,当本地模型不可用时,系统应该自动降级为远程模型处理子任务,而不是整体失败。代码中可以增加一个开关:
USE_LOCAL_MODEL = os.getenv("USE_LOCAL_MODEL", "true").lower() == "true" def summarize_document_safe(text: str) -> str: if USE_LOCAL_MODEL: try: return summarize_document(text) except Exception as exc: print(f"本地模型不可用,降级到远程:{exc}") return call_remote_model("总结下面内容", text) return call_remote_model("总结下面内容", text)8.2 可复用的混合模式接入检查清单
在开发或接入混合模式前,建议按下面的清单逐项确认:
- 本地模型是否已安装,
ollama list是否能显示目标模型。 - 本地接口是否可访问,
curl测试是否返回正常 JSON。 - 任务切分规则是否明确,哪些子任务走本地、哪些走远程。
- 本地模型提示词模板是否经过多轮测试,输出格式是否稳定。
- 远程 API 的 Key、Base URL、模型名是否配置正确。
- 长文档场景是否做了切分和重叠处理。
- 敏感数据是否确实不会进入远程请求。
- 本地模型不可用时是否有降级方案。
- 耗时是否在可接受范围,本地子任务是否可并发。
- 日志中是否记录了任务 ID、模型名称、耗时、错误信息。
8.3 从示例走向真实客户端的扩展方向
上面给出的最小示例只是功能验证。如果要把它扩展成类似 Perplexity Mac 客户端的混合模式,还需要补齐以下能力:
- 任务编排引擎:负责把用户操作拆解为子任务 DAG,并维护任务间的依赖关系。
- 本地文件访问能力:读取 PDF、Markdown、网页缓存等本地内容,并交由本地模型处理。
- 敏感内容识别:在子任务执行前,先做数据分级,避免隐私数据被发送到远程模型。
- 本地模型动态加载:根据当前任务复杂度,在多个模型间切换,而不是固定使用一个模型。
- 结果缓存:相同文档的摘要和关键词可以缓存,避免重复消耗本地资源。
- 用户可见的“处理位置”标识:界面中明确显示哪些结果来自本地处理,哪些来自远程模型,提升用户信任度。
对普通开发者来说,最值得练习的方向是先把自己的本地模型调用链路做稳定,再逐步加入任务切分和路由规则。对 AI 产品用户来说,可以关注客户端设置中是否存在类似“在本地处理文档摘要”“子任务本地执行”的选项,用少量测试文档验证混合模式是否生效。
混合模式不会替代远程大模型,也不会让所有任务都回到本地。它更像一个折中方案:把能留在本地的计算留在本地,把必须依赖云端的思考继续交给云端。理解了这条边界,再去看 Perplexity 在 Mac 端的混合模式规划,就能更清楚地判断哪些功能值得期待,哪些功能还需要等待更成熟的本地模型生态支撑。