AI不会杀死SaaS而是重写:AI原生SaaS架构与权限隔离实战
1. 背景为什么行业一度喊出“AI杀死SaaS”1.1 “AI杀死SaaS”的说法从哪来过去两年大模型能力快速提升行业里出现了一种非常流行的判断用户不再需要订阅 SaaS 软件直接跟 AI 对话就能生成报表、写合同、做分析、跑流程。按这个逻辑SaaS 的意义被削弱了——既然自然语言就能完成任务为什么还要买一套固定功能的 CRM、ERP 或项目管理工具这个判断之所以传播很广是因为它抓住了一个真实的趋势大模型确实改变了人机交互方式。过去用户要学习软件的操作路径现在 AI 可以直接理解意图并给出答案。于是“AI 杀死 SaaS”就成了一个听起来很有冲击力的行业叙事。但从真实的技术落地情况来看这个说法正在反转。反转的原因不是大模型变弱了而是人们对软件工程的复杂度认识得更清楚了。1.2 AI 生成软件的真实能力边界要理解反转先要明白大模型在真实业务系统中能做什么、不能做什么。大模型擅长的是理解自然语言、生成文本、抽取信息、改写内容、生成代码片段、解释技术文档。这些能力适合做“智能层”但不适合直接替代“业务系统本身”。一个完整的 SaaS 系统包含以下部分用户体系与权限控制多租户数据隔离业务流程与状态机数据库事务与一致性审计日志与合规要求第三方系统集成前端交互与移动端适配稳定性、监控、告警与容灾大模型可以生成其中一部分代码但它无法独立承担事务一致性、数据权限、合规审计这些工程责任。更关键的是企业客户不会因为 AI 能生成软件就放弃对数据安全、交付质量、运维保障的要求。1.3 为什么“杀死”没有发生从实际项目反馈来看生成式 AI 并没有让企业停止购买 SaaS反而让 SaaS 产品的形态发生了变化。第一AI 生成的代码需要有人维护。交付软件只是起点后续的版本迭代、Bug 修复、性能优化才是成本大头这部分仍然依赖工程体系。第二企业数据不会随便交给公有大模型。很多 SaaS 客户对数据出域非常敏感私有化部署、本地知识库、权限隔离成为刚需而这些恰恰是 SaaS 平台原有的能力。第三SaaS 的核心价值不只是“功能”还包括流程沉淀、数据模型、集成生态和行业最佳实践。AI 可以增强这些价值但很难从零生成一套沉淀多年的业务模型。所以“AI 杀死 SaaS”这个说法本质上混淆了“交互入口”和“业务系统”两个层次。AI 改变的是入口SaaS 提供的是底盘。2. 反转的本质SaaS 没有被杀死而是被重写2.1 从“软件服务”到“智能服务”反转之后的行业共识是SaaS 不会被 AI 杀死但传统 SaaS 会被 AI 原生的 SaaS 重写。所谓 AI 原生不是给软件加一个聊天框而是从架构层面把大模型能力嵌入业务流程。传统 SaaS 的典型交互是用户打开界面点菜单填表单提交后系统执行逻辑。AI 原生 SaaS 的典型交互是用户用自然语言描述目标Agent 理解意图调用内部工具和数据完成操作并返回结果。从产品形态看变化是显著的维度传统 SaaSAI 原生 SaaS交互方式菜单、表单、按钮对话、自然语言指令核心逻辑固定流程意图识别 工具调用 流程编排数据访问界面绑定数据权限控制下的数据访问交付方式功能迭代交付模型 系统持续演进维护成本功能维护为主模型效果 系统稳定性双维护但底层的东西没有变用户身份、租户隔离、数据权限、审计追踪、计费与订阅。这些仍然是 SaaS 的生命线也是 AI 无法自动解决的问题。2.2 AI 原生 SaaS 的关键技术组件做 AI 原生 SaaS技术栈上通常围绕下面几块展开。第一是 Agent智能体。Agent 负责理解用户目标拆解成多个步骤决定调用哪些工具并在执行过程中处理异常。第二是 Function Calling函数调用。大模型本身不直接操作业务数据库而是通过定义好的函数接口来间接执行操作。函数调用让模型从“生成文本”变成“驱动系统”。第三是 RAG检索增强生成。企业私有知识、历史工单、产品文档不能实时进大模型训练RAG 通过向量检索先把相关内容捞出来再交给大模型生成答案是目前私有化 AI 功能的主流方案。第四是 MCP模型上下文协议。MCP 把大模型和外部工具、数据源之间的连接标准化让同一个模型可以复用地访问不同的业务系统。这一层解决的是“连接”问题。第五是权限与隔离。AI 不能绕过原有 SaaS 的权限体系。用户让 AI 查数据AI 只能查该用户有权限的数据用户让 AI 下单AI 只能在其授权范围内操作。这是 AI 原生 SaaS 最容易被忽略、也最容易出事故的一环。2.3 多租户与数据隔离仍然是核心很多团队在给 SaaS 接入 AI 时第一版只想着把模型 API 接上却忘了数据隔离这是非常危险的。比如一个多租户的 CRM 系统租户 A 和租户 B 的数据存在同一个数据库里靠 tenant_id 区分。如果 AI 查询逻辑没有强行拼接 tenant_id模型生成的查询语句就可能跨租户读取数据。这属于严重的事故级别。正确的做法是所有 AI 访问数据的入口都必须经过 SaaS 原有权限层不能为了让 AI“更自由”而绕过权限校验。换句话说AI 只能作为业务系统的执行者而不能成为业务系统的例外。3. 技术拆解在 SaaS 里接入 AI 的最小组件下面我们用一套简化示例演示 AI 原生 SaaS 的几个核心组件是怎么工作的。示例以常见环境为例语言使用 Python重点演示思路不绑定具体云服务。3.1 环境准备与版本说明建议环境如下操作系统Windows / macOS / Linux 均可Python3.10 及以上依赖库openai、flask、python-dotenv模型任意支持 Function Calling / Tool Use 的大模型接口数据库示例使用 SQLite生产环境建议替换为 PostgreSQL 或 MySQL版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路和完整链路。先安装依赖pip install openai flask python-dotenv在项目根目录创建.env 文件MODEL_API_KEY你的模型接口密钥 MODEL_BASE_URLhttps://你的接口地址 MODEL_NAME模型名称注意不要把密钥提交到 Git 仓库.env 文件应加入 .gitignore。3.2 第一步定义工具函数大模型不能直接操作数据库需要你先把可执行的操作封装成函数然后把这些函数的描述告诉模型。模型根据用户意图选择函数并传入参数应用层负责实际执行。先创建一个简单的订单查询函数# 文件路径services/order_service.py from typing import Dict, Any # 模拟的订单数据 ORDERS [ {id: 1001, tenant_id: t1, customer: 张三, amount: 1200.00, status: 已完成}, {id: 1002, tenant_id: t1, customer: 李四, amount: 800.00, status: 待付款}, {id: 1003, tenant_id: t2, customer: 王五, amount: 2500.50, status: 已完成}, ] def get_orders_by_tenant(tenant_id: str) - Dict[str, Any]: 根据租户 ID 查询订单列表必须传入当前登录用户的租户 ID result [order for order in ORDERS if order[tenant_id] tenant_id] return {code: 0, data: result}注意函数里强制要求传入 tenant_id这是为了确保 AI 只能访问当前租户的数据。3.3 第二步把函数描述传给模型模型侧需要知道有哪些函数可以用、参数是什么。下面这段代码定义了 order 查询工具的 schema# 文件路径agent/tools.py TOOLS [ { type: function, function: { name: get_orders_by_tenant, description: 根据租户ID查询订单列表租户ID必须来自当前登录用户会话不能由用户自由指定, parameters: { type: object, properties: { tenant_id: { type: string, description: 当前登录用户所属的租户ID } }, required: [tenant_id] } } } ]这个描述非常重要。你要明确告诉模型tenant_id 必须从当前登录会话获取不能由用户自由指定。如果不加这个约束模型可能把用户话里的“查看租户 A 的订单”直接当成参数传进去造成越权。3.4 第三步实现工具调用循环当模型返回需要调用某个函数时应用层要执行对应函数并把结果拼接回对话上下文再让模型生成最终回答。这是 Function Calling 的标准循环。# 文件路径agent/agent.py import json from openai import OpenAI from services.order_service import get_orders_by_tenant from agent.tools import TOOLS def build_client(): client OpenAI( api_keyos.getenv(MODEL_API_KEY), base_urlos.getenv(MODEL_BASE_URL) ) return client def run_agent(user_message: str, tenant_id: str): client build_client() messages [ {role: system, content: 你是一个订单助手只能查询当前租户的数据。}, {role: user, content: user_message} ] # 第一轮让模型决定是否调用工具 response client.chat.completions.create( modelos.getenv(MODEL_NAME), messagesmessages, toolsTOOLS, tool_choiceauto ) message response.choices[0].message messages.append(message) # 如果模型决定调用工具 if message.tool_calls: for tool_call in message.tool_calls: if tool_call.function.name get_orders_by_tenant: # 注意tenant_id 来自会话上下文而不是用户输入 tool_args {tenant_id: tenant_id} tool_result get_orders_by_tenant(**tool_args) messages.append({ role: tool, tool_call_id: tool_call.id, content: json.dumps(tool_result, ensure_asciiFalse) }) # 第二轮模型基于工具结果生成最终回答 second_response client.chat.completions.create( modelos.getenv(MODEL_NAME), messagesmessages, toolsTOOLS ) return second_response.choices[0].message.content return message.content这里的关键点是传给函数的参数由应用层拼接而不是直接使用模型输出里可能携带的任意 tenant_id。如果你完全信任模型传参就可能在多租户场景下出现数据越权。4. 最小实战案例给 SaaS 加一个 AI 订单查询助手接下来我们把上面的组件组合成一个最小的可运行 Flask 服务模拟 AI 原生 SaaS 的后端链路。4.1 项目结构建议的目录结构如下ai-saas-demo/ ├── .env ├── .gitignore ├── requirements.txt ├── app.py ├── agent/ │ ├── __init__.py │ ├── agent.py │ └── tools.py └── services/ ├── __init__.py └── order_service.pyrequirements.txt 内容openai1.0.0 flask2.0.0 python-dotenv1.0.04.2 编写核心代码app.py 实现一个简化路由。真实系统中这里的 user_id 和 tenant_id 应该来自登录态示例中写死是为了演示链路。# 文件路径app.py import os from flask import Flask, request, jsonify from dotenv import load_dotenv from agent.agent import run_agent load_dotenv() app Flask(__name__) app.route(/api/ai/orders, methods[POST]) def ai_orders(): data request.get_json(forceTrue) user_message data.get(message, ) # 真实项目中这两个值从 session / token 解析得到 current_user_id u_1001 current_tenant_id t1 if not user_message: return jsonify({code: parameter_error, message: message 不能为空}), 400 try: result run_agent(user_message, current_tenant_id) return jsonify({code: 0, data: {reply: result}}) except Exception as exc: app.logger.error(AI agent 调用失败: %s, exc) return jsonify({code: agent_error, message: str(exc)}), 500 if __name__ __main__: app.run(host0.0.0.0, port8000, debugTrue)这里把 current_tenant_id 显式传递到 run_agent本质上是把权限边界放在应用层。不管用户怎么问模型都只能查 t1 租户的数据。4.3 运行与验证启动服务python app.py然后用 curl 测试接口curl -X POST http://127.0.0.1:8000/api/ai/orders \ -H Content-Type: application/json \ -d {message: 查一下我们最近的订单}预期返回是一段自然语言描述内容只包含 t1 租户的订单数据不会出现 t2 租户的订单。这里演示了接入 AI 功能后 SaaS 的最小闭环用户请求进入业务系统业务系统从会话中解析租户信息Agent 调用模型进行意图识别模型选择工具应用层执行工具结果回传模型生成自然语言回复回复返回给用户5. 常见问题与排查思路给 SaaS 接入 AI 时常见的坑集中在数据权限、上下文管理、结果稳定性、成本控制几个方面。问题现象常见原因解决思路模型回复了其他租户的数据工具函数参数由用户输入直接拼接没有使用会话上下文强制使用应用层注入的 tenant_id忽略模型传到该字段的任意值在工具描述中明确约束模型调用不存在的函数工具描述太模糊或者模型版本不支持 Function Calling检查工具 schema 是否有拼写错误确认模型接口支持工具调用必要时升级模型版本AI 回答与业务数据不一致工具结果没有正确拼接回 messages模型只凭记忆生成将工具返回值作为 tool 消息写回 messages再发起第二轮请求长对话后模型丢失约束system prompt 放在最前面但被长上下文稀释在每次请求前重新注入 system prompt并可以考虑在用户消息前面追加安全约束接口响应慢模型调用耗时长尤其工具多、上下文大增加超时和重试机制对常见问题做缓存减少历史消息数量费用上涨明显每次请求都带全量历史消息以及模型在无效工具调用上反复尝试限制上下文长度控制工具数量对失败任务做降级处理最隐蔽的问题是“间接越权”。比如模型虽然只查了当前租户的订单但工具返回的结果在prompt 中被重新表述时模型可能把字段拼错、把金额算错。因此除了权限控制还要在关键环节加校验模型返回的操作意图要落审计日志执行写操作前增加二次确认工具结果返回的内容做脱敏处理敏感字段手机号、银行卡号默认不返回模型6. 最佳实践与工程建议6.1 权限设计AI 不能绕过原有权限体系AI 接入 SaaS 的第一原则是AI 是执行者不是特权用户。任何通过 AI 完成的数据读取和操作都必须经过原有鉴权逻辑。实际项目中建议把 AI 的函数调用封装成独立的服务层统一接收三个参数用户身份租户上下文目标意图服务层内部再调用业务模块业务模块不感知调用方是用户还是 AI。这样权限逻辑可以复用也方便审计。6.2 数据安全私有化与大模型接口之间的边界企业使用 SaaS 时数据最终落到大模型接口很多客户无法接受。处理方式通常有两种使用私有化部署的模型数据不出内网使用公有模型接口但只把非敏感的业务摘要传给模型敏感字段在服务端脱敏RAG 也是常见的数据接入方式。把企业私有文档向量化后检索阶段只取相关片段不需要把全量知识库发给模型。但要注意向量库本身的权限控制同样重要否则检索阶段就可能跨租户命中数据。6.3 稳定性AI 功能必须可降级AI 能力存在不确定性模型接口可能超时、限流、返回错误。SaaS 产品不能因为 AI 挂了整个业务就不可用。建议在架构上做降级设计AI 功能独立部署故障不蔓延到核心业务关键操作保留传统表单入口模型调用设置超时时间超时后返回兜底提示对高并发场景做限流防止模型接口费用失控6.4 成本控制上下文越长费用越高大模型按 token 计费上下文越长成本越高。很多 SaaS 在接入 AI 后第一个月费用暴涨原因往往是历史消息无限制累积。控制成本的常用手段只保留最近 N 轮对话对用户问题做摘要压缩后再传给模型常用查询走缓存不重复请求模型工具返回结果过长时先做结构化截断6.5 可观测性记录模型输入输出与工具调用AI 功能上线后链路比传统接口长很多问题排查难度也随之上升。如果只记录 HTTP 状态码根本定位不到是模型理解错了还是工具执行出错。建议至少记录以下内容用户原始输入最终输入模型的完整 messages模型是否调用了工具、调用了哪个、参数是什么工具执行结果模型最终输出耗时与 token 消耗这些日志既要用于排查也要用于后续评估模型效果是 AI 原生 SaaS 的重要资产。7. 下一步可以怎么继续深入AI 杀死 SaaS 的故事正在反转反转背后不是技术倒退而是技术边界被理解得更清楚。真正有价值的机会在于把大模型的智能能力与传统 SaaS 的工程能力结合起来权限体系负责边界Agent 负责意图理解RAG 负责知识接入Function Calling 负责操作执行。如果你现在正在做 SaaS 产品可以从一个具体场景开始尝试选择一个用户高频操作、且规则相对明确的功能把它改造成 AI 自然语言入口同时保留传统操作路径。这样既能让用户感受到 AI 的价值又不会因为模型不稳定而影响核心业务。下一步可以重点学习几个方向Function Calling 的工具编排与异常恢复RAG 的召回质量评估与权限过滤Agent 的多步任务拆解与状态管理多租户场景下向量数据存储的隔离方案动手做一个最小原型比反复讨论“AI 会不会取代 SaaS”更有价值。先把一个场景跑通再逐步扩展这条路对个人学习者和企业团队都适用。

相关新闻

长三角中小制造企业加速转向轻量化预测性维护,设备被动抢修模式逐步退场

长三角中小制造企业加速转向轻量化预测性维护,设备被动抢修模式逐步退场

在长三角密集的离散制造车间里,设备突发停机带来的订单延误、返工、产能损失,正倒逼企业重构设备管理体系。过去多年,多数中小工厂执行固定周期的预防性保养,容易出现两种极端:设备完好却强制停机维保造成产能浪费&…

2026/10/13 19:15:47 阅读更多 →
测试时策略优化TTPO:让强化学习模型在部署后继续在线适应

测试时策略优化TTPO:让强化学习模型在部署后继续在线适应

我们在做强化学习或者大模型对齐工作时,通常已经形成了某种固定流程:在训练环境里用策略梯度把策略跑起来,调好超参,收敛后保存模型权重,部署后就用固定权重做决策。这套流程很成熟,但它无意识里藏了一个很…

2026/10/12 14:40:49 阅读更多 →
OpenAI Codex 会话管理新能力解析:把 auth.json 改到 TaoToken 后 AI 编程流程更接近真实开发

OpenAI Codex 会话管理新能力解析:把 auth.json 改到 TaoToken 后 AI 编程流程更接近真实开发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:40:54 阅读更多 →

最新新闻

矩阵论期末复习:Jordan标准形、QR分解与广义逆手算全攻略

矩阵论期末复习:Jordan标准形、QR分解与广义逆手算全攻略

简介:矩阵论期末考试参考答案是一份针对矩阵论课程期末考试的完整解题资料,面向正在复习矩阵论、线性代数的本科生及考研备考生,也适用于需要快速回顾核心计算方法的工程类学生。资源包内共1个PDF文件,大小约284KB,文件…

2026/10/13 19:15:31 阅读更多 →
OSPF协议细节深度解析:LSA类型、邻居状态机与SPF算法

OSPF协议细节深度解析:LSA类型、邻居状态机与SPF算法

1. 为什么OSPF不是“配通就行”,而是网络工程师的分水岭 在某高校网络实验室带学生做路由实验时,我见过太多次这样的场景:A同学花15分钟把OSPF邻居关系配通, show ip ospf neighbor 显示FULL,ping测试全通&#xff0…

2026/10/13 19:15:30 阅读更多 →
夸克网盘免费扩容1TB全攻略:从活动入口到空间验证一步不落

夸克网盘免费扩容1TB全攻略:从活动入口到空间验证一步不落

夸克网盘免费扩容1TB这个话题,隔一阵子就会有人翻出来问一遍。网上教程截图满天飞,但真正把入口在哪、任务怎么算完成、到账怎么验证、有效期怎么查讲清楚的并不多。我这次直接把2026年还能跑通的路径重新过了一遍,从准备工作到领取完成&…

2026/10/13 19:15:30 阅读更多 →
免费开源ERP系统选型与实施:进销存+财务+生产一体化实战指南

免费开源ERP系统选型与实施:进销存+财务+生产一体化实战指南

这几年在圈子里被问得最多的一个问题,就是中小公司和创业团队到底要不要上ERP。我的答案一直很干脆:要上,但别一上来就盯着那套贵得离谱的商业软件。免费开源的进销存财务生产ERP系统,这些年成熟度已经很高了,尤其适合…

2026/10/13 19:15:30 阅读更多 →
免费开源一体化ERP实战:进销存+财务+生产+SaaS部署与权限管理

免费开源一体化ERP实战:进销存+财务+生产+SaaS部署与权限管理

我一个干制造业信息化多年的人,这几年最深的感受就是:太多中小工厂被Excel管生产、管库存、管账的方式拖住了。业务一多,采购下单靠拍脑袋,仓库月底盘点对不上数,财务月底对账加班到深夜,生产领料不知道库存…

2026/10/13 19:15:30 阅读更多 →
多智能体电梯群控:基于目的楼层预约与PPO的深度强化学习实现

多智能体电梯群控:基于目的楼层预约与PPO的深度强化学习实现

简介:本资源是一套面向计算机、人工智能、自动化等专业学生的毕业设计与课程设计实践项目,聚焦于多智能体协同下的电梯群控优化问题,采用深度强化学习实现目的楼层预约调度算法,解决传统电梯响应延迟高、能耗大、乘客等待时间长等…

2026/10/13 19:14:30 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →