1. 垂直 SaaS 的 ARPU 天花板,到底卡在哪一层
如果你正在运营一款垂直 SaaS,大概率遇到过这个场景:产品功能堆到几十个,客户却始终把你当成“电子台账”,年费三千块已经是心理上限,涨一分钱就威胁流失。获客成本逼近两千,续费率在六成上下徘徊,一年忙下来单客利润不到一千块。这不是产品不够努力,而是价值感知卡在了“存数据”这一层。
我接触过不少家装、美业、教培类垂直 SaaS 团队,发现一个共性:大家都做了大模型集成,但九成没赚到钱。原因不是模型不行,而是缺了中间那层AI Agent Harness Engineering——也就是智能体的管控与编排工程层。普通集成像给车装了个高级音响,Harness 层则是给车换上自动驾驶系统,能真正替用户干活、产出可量化的业务结果。
这篇内容聚焦一个真实拆解:某家装垂直 SaaS 如何通过 Agent Harness 编排层,把单店年 ARPU 从 3999 元拉到 11999 元,提升 203%,续费率从 62% 涨到 89%。我会交付可复制的 Harness 配置骨架(含settings.json/config.toml示例)、ARPU 验证动作,以及如何用 TaoToken 统一 Key/API 通道接入 AI 工具,让你在自己的 SaaS 里复现这条商业化路径。适合谁:垂直 SaaS 的产品负责人、技术负责人,以及正在找 Agent 落地场景的工程师。
2. 先搭好 Harness 前置:TaoToken 统一 Key 与通道
在写任何 Agent 编排代码之前,先把模型接入这层理顺。很多团队卡在第一步:不同模型厂商的 Key 散落在各个配置文件里,测试环境、生产环境、不同 Agent 各用一套,成本对不上、额度管不住、换模型要改一堆代码。Harness 层要做的第一件事,就是把模型调用收敛到一个统一通道。
TaoToken 在这里的角色是统一 Key/API 通道:你可以在一个控制台里管理多个模型的调用凭证,Agent 编排层只认一个出口,成本统计、额度校验、模型切换都在这一层完成。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api (不加 UTM)。
具体操作路径:先到控制台创建项目,再生成 API Keys,把 Key 写进 Harness 的环境变量,而不是硬编码在 Agent 代码里。这样做的直接好处是,后面做多级路由时,你只需要在 Harness 层改模型名,不用动每个 Agent 的业务逻辑。
注意:Key 只放在服务端环境变量或密钥管理服务里,不要提交到 Git,也不要在前端代码中出现。
如果你还在选模型阶段,可以先用模型对话页面快速验证不同模型在你业务语料上的表现,再决定路由策略。模型对话入口:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,API Keys 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。
3. 可复制配置:Harness 骨架与 settings.json / config.toml
Harness 层的核心职责有四块:意图识别、Agent 调度、成本管控、合规审核。下面这套配置骨架可以直接套用到你的垂直 SaaS 里,先跑通单 Agent,再扩展多 Agent。
3.1 settings.json:Harness 运行时配置
{ "harness": { "version": "1.0", "intent_model": "./models/intent_model", "default_agent": "sales_agent", "max_retry": 2, "timeout_seconds": 30 }, "llm_gateway": { "base_url": "https://taotoken.net/api", "api_key_env": "TAOTOKEN_API_KEY", "default_model": "claude-3-sonnet", "fallback_model": "qwen2-7b-local" }, "cost_control": { "monthly_quota_per_tenant": 500, "cache_enabled": true, "cache_ttl_seconds": 3600 }, "compliance": { "pii_mask": true, "output_review": true, "blocked_keywords": ["返点", "私下转账"] } }这份配置里,llm_gateway.base_url指向 TaoToken 的 API 基址,api_key_env指定从环境变量读取 Key。cost_control里的monthly_quota_per_tenant是每个租户的月调用额度,超过就触发升级提示,这是后面 ARPU 分层的关键开关。
3.2 config.toml:Agent 角色与路由规则
[agents.sales_agent] role = "家装销售助手" knowledge_collection = "knowledge_sales" allowed_tools = ["crm_query", "price_calc", "quote_export"] accuracy_requirement = 0.95 max_tokens = 4000 [agents.design_agent] role = "方案设计助手" knowledge_collection = "knowledge_design" allowed_tools = ["material_query", "cad_export", "budget_split"] accuracy_requirement = 0.92 max_tokens = 8000 [router] rule_engine = ["greeting", "simple_query"] local_model = ["quote_draft", "material_list"] cloud_model = ["complex_negotiation", "full_plan"] [router.model_map] local_model = "qwen2-7b-local" cloud_model = "claude-3-sonnet"allowed_tools是权限边界,销售 Agent 只能查 CRM 和算价,不能碰财务接口。router段定义了三层路由:简单请求走规则引擎零成本,中等复杂度走本地模型,高复杂度走云端模型。这套路由是后面把单用户月成本从 217 元压到 14.8 元的关键。
3.3 环境变量与启动
export TAOTOKEN_API_KEY="你的_API_Key" export HARNESS_CONFIG="./settings.json" export AGENT_CONFIG="./config.toml" uvicorn main:app --host 0.0.0.0 --port 8000启动后,Harness 会先加载settings.json里的网关配置,再读取config.toml注册 Agent 和路由规则。所有模型调用都经过llm_gateway,不再散落在各 Agent 内部。
4. 验证请求:从意图识别到成功返回
配置写好后,用一个真实请求验证整条链路。假设销售在企微里发:“给我生成一个 100 平三居室北欧风半包报价,业主预算 15 万,杭州余杭区。”
4.1 请求入口与意图识别
from fastapi import APIRouter from pydantic import BaseModel from core.intent_recognition import IntentRecognizer from core.agent_orchestrator import AgentOrchestrator router = APIRouter(prefix="/api/harness") intent_recognizer = IntentRecognizer(model_path="./models/intent_model") orchestrator = AgentOrchestrator(config_path="./config.toml") class UserRequest(BaseModel): tenant_id: int user_id: int query: str context: dict | None = None @router.post("/process") async def process_request(request: UserRequest): intent = intent_recognizer.recognize( query=request.query, tenant_id=request.tenant_id ) if not await orchestrator.check_permission(request.user_id, intent.agent_id): return {"code": 403, "msg": "当前套餐不含该 Agent 权限,请升级"} if not await orchestrator.check_cost_quota(request.tenant_id, intent.agent_id): return {"code": 402, "msg": "本月调用额度已用完,请升级套餐"} result = await orchestrator.execute_agent( agent_id=intent.agent_id, query=request.query, context=request.context, tenant_id=request.tenant_id ) if not await orchestrator.check_compliance(result, request.tenant_id): return {"code": 500, "msg": "生成结果未通过合规校验,请重试"} await orchestrator.record_log(request, intent, result) return {"code": 200, "data": result}这段代码里,check_permission和check_cost_quota是 ARPU 分层的技术落点:基础版用户没有 Agent 权限,Pro 版有销售和设计 Agent,旗舰版才有项目管控和财务 Agent。额度用完就提示升级,而不是直接报错。
4.2 多级路由与模型调用
from litellm import completion import os class LLMRouter: def __init__(self, config): self.config = config self.model_map = config["router"]["model_map"] def route(self, query_type: str, accuracy_req: float, max_tokens: int): if query_type in self.config["router"]["rule_engine"] and accuracy_req < 0.7: return "rule" if accuracy_req < 0.9 and max_tokens < 4000: return self.model_map["local_model"] return self.model_map["cloud_model"] def complete(self, query: str, context: str, accuracy_req: float = 0.9): query_type = self.classify(query) max_tokens = len(context) + len(query) + 1000 model = self.route(query_type, accuracy_req, max_tokens) if model == "rule": return self.rule_engine_response(query) response = completion( model=model, messages=[ {"role": "system", "content": f"你是家装行业专家,参考上下文:{context}"}, {"role": "user", "content": query} ], api_key=os.getenv("TAOTOKEN_API_KEY"), base_url="https://taotoken.net/api" ) return response.choices[0].message.contentbase_url统一指向 TaoToken,api_key从环境变量读取。这样无论后面换成哪个模型,Harness 层只改model_map即可。
4.3 成功返回与耗时对比
请求走完后,返回结构大致如下:
{ "code": 200, "data": { "agent": "sales_agent", "quote_total": 147000, "budget_match": true, "materials_verified": true, "elapsed_seconds": 260, "manual_estimate_seconds": 7200 } }原来销售手动做一份报价要 2 小时,Agent 处理耗时 4 分 20 秒,准确率 96%。这个“耗时对比”就是后面向客户证明价值、支撑涨价的硬数据。
5. 本篇常见错排查
5.1 意图识别串 Agent,销售请求被路由到财务
现象:用户问报价,结果触发了财务对账 Agent。原因通常是意图模型训练样本里“报价”和“对账”关键词重叠。排查动作:先看intent_recognition返回的agent_id和置信度,如果置信度低于 0.8,在 Harness 层加一层兜底,走default_agent并提示用户补充信息。修复方式是在config.toml里给每个 Agent 加disambiguation_keywords,冲突时优先匹配高优先级 Agent。
5.2 额度校验误伤,老用户被拦
现象:Pro 用户明明有权限,却返回 402。检查check_cost_quota里的tenant_id是否和套餐绑定表一致。常见坑是测试环境用了生产租户 ID,或者缓存里的额度没刷新。修复:在settings.json里把cache_ttl_seconds调小,或在套餐变更时主动清缓存。
5.3 模型调用 401,Key 没读到
现象:Harness 启动正常,一调模型就 401。先确认TAOTOKEN_API_KEY是否在当前 shell 生效,echo $TAOTOKEN_API_KEY看有没有值。再确认base_url是否写成了带路径的完整地址,正确写法是https://taotoken.net/api。如果用的是容器部署,检查环境变量有没有传进容器。
5.4 成本失控,单用户月成本超 50 元
现象:上线一周,算力账单飙升。排查路由日志,看cloud_model的调用占比。如果超过 30%,说明路由规则太宽松。调整config.toml里的accuracy_requirement阈值,把更多请求压到本地模型。同时打开cache_enabled,相同请求直接返回缓存。
5.5 合规审核误杀,正常报价被拦
现象:报价内容正常,却返回 500。检查blocked_keywords是否包含行业常用词。比如“返点”在家装行业可能是正常商务术语,但在合规规则里被一刀切。修复:把关键词审核改成“上下文相关”,或者把误杀词移到人工抽检队列,而不是直接拦截。
6. 把 ARPU 验证动作跑起来
Harness 跑通后,下一步是验证商业化效果。不要直接涨价,而是做套餐分层:基础版保留原有功能,Pro 版加销售和设计 Agent,旗舰版加项目管控和财务 Agent。然后在 Harness 层用check_permission和check_cost_quota控制权限与额度。
验证动作分三步:第一,统计升级转化率,看基础版用户有多少升到 Pro;第二,统计 Agent 功能的实际使用频次,判断用户是否真的在用;第三,对比升级用户的续费率和未升级用户的续费率。装企通的数据是:42% 基础版升 Pro,12% 升旗舰,整体 ARPU 从 3999 涨到 12117,续费率从 62% 涨到 89%。
如果你要长期跑编码类 Agent 或做多 Agent 协同,可以了解 Coding Plan 的额度与通道设计:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。Claude Code 相关接入参考:https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite 。控制台统一管理入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。
最后留一个实操建议:先把settings.json和config.toml复制到你的项目里,只跑通一个销售 Agent,用真实业务数据测准确率。准确率过 90% 再谈套餐分层,否则涨价的底气不足。Harness 层的价值不在代码多复杂,而在于它把模型调用、权限、成本、合规这四件事收口到一个地方,让你能像调参数一样调商业模式。