
最近团队里好几个项目都堆到了 Agent 开发上结果越做越发现大家遇到的问题出奇一致模型调用散得到处都是、工具函数写了又拆拆了又写、每次换个模型就要改一堆代码、部署上线更是全凭个人信仰。就在这个节骨眼上我把腾讯云的 AI Skills 整个翻了一遍又把 LiteLLM Proxy、Agent 编排、状态管理这些实践理了个透总算是从“能用”走到了“好用”。这篇就把我整套的折腾过程和沉淀下来的 Best Practice 一次性讲清楚想到哪写到哪重点是让你拿去就能直接用。这不是一篇概念科普而是真正在腾讯云上做 Agent 项目的实操复盘。适合正在做 Agent 开发、想捋清 Skills 怎么写、想知道 Agent 和 Skill 边界在哪、以及被模型切换和工具管理搞得焦头烂额的朋友。我会从设计思路讲到部署上线再给出一批日常踩坑的排查清单篇幅不短但信息密度对得起你的时间。1. 内容整体设计与思路拆解为什么 AI Skills 是 Agent 抓手1.1 Skills 与 Agent 到底什么关系先说一个很多人没绕明白的问题Skill 和 Agent 到底什么关系这俩词现在被用得很滥厂商各说各话实际干活的人容易懵。我自己给出的一个比较扎实的划分是Agent 是“决策和执行的主体”Skill 是“Agent 可调用的最小能力单元”。换句话说Agent 决定“接下来该做什么”Skill 负责“把某件事真正做成”。没有 Skills 的 Agent 更像一个只会聊天的空壳没有 Agent 的 Skills 只是一堆散装函数。腾讯云 AI Skills 这套东西本质上是把“能力”做成了一种标准化的、可以被 Agent 动态发现和调用的服务单元。我见过不少团队把几十个工具函数直接塞进 system prompt再靠模型硬猜该调用哪个。这种搞法在你只有三五个函数的时候还能凑合一旦工具数量超过二十个模型的调用准确率就会肉眼可见地崩。AI Skills 最直接的价值就是给这些能力套上了一层结构化的壳让 Agent 的调度从“靠感觉”变成了“靠协议”。1.2 为什么选择腾讯云 AI Skills 而不是自建工具层自建工具层不是不行我自己早期也写过一套基于 FastAPI 的工具注册中心后来之所以迁到腾讯云 AI Skills核心是算了一笔时间账。自建方案一开始很嗨什么都能定但维护成本会逐渐失控。每加一个工具要写接口、写鉴权、写参数校验、写错误码、写文档Agent 那边还得同步更新 function calling 的 schema。两个人开发还好五个人以上的团队光协调工具协议就能占掉三分之一的需求沟通时间。AI Skills 相当于把“工具定义、参数声明、调用鉴权、版本管理”这些通用问题一次性通过平台能力解决了开发者只需要聚焦在“这个 Skill 的业务逻辑是什么”上。另外一点腾讯云的 Skills 提供了相对完整的可观测和鉴权链路。Agent 每次调用 Skill 都会有记录出问题能直接查到是哪一步、哪个参数、哪个模型做的决策。这个对生产环境排障来说不是加分项是刚需。2. 环境与资源准备先把地基打好2.1 服务器选型与端口规划在腾讯云上做 Agent 项目第一步是搞定跑服务的资源。我个人的建议是别一上来就上多节点集群绝大多数 Agent 项目在原型阶段一台 4C8G 的轻量应用服务器或者标准型 CVM 就完全够用。真正到了并发量上来之后再考虑把模型网关和业务服务拆开部署。端口规划这件事上很多初学者容易翻车。不要图省事把安全组全部放通那等于把服务器裸奔在公网上。我的习惯是只放行必需的端口22 用于 SSH 管理建议改成非标准端口并开启密钥登录、80/443 用于 HTTP/HTTPS 访问、以及你业务服务实际监听的端口。腾讯云控制台里的安全组规则就是干这个的建议把变更安全组当代码一样重视每次改动都要知道自己在放行什么。2.2 域名申请与 HTTPS 配置现在做 Agent 服务HTTPS 基本是硬性要求尤其是你要把服务暴露给微信小程序、企业微信机器人或者其他第三方平台回调时。腾讯云怎么申请二级域名这件事流程倒不复杂先有一个已备案的一级域名然后在 DNS 解析里加一条 A 记录把类似 agent-api.yourdomain.com 这样的二级域名指向你的服务器 IP。申请完成后建议直接申请一张 SSL 证书腾讯云有免费的 DV 证书够用。配置 HTTPS 时我踩过一个坑证书申请后需要等几分钟签发签下来之后记得在 Nginx 里同时配置 HTTP 跳转 HTTPS否则用户或者 Agent 用 http 访问时还是会遇到各种诡异的连接问题。另外如果服务要被人频繁调用可以顺手把 OCSP Stapling 打开能减少 TLS 握手耗时体感明显。2.3 LiteLLM Proxy模型网关的最佳实践做 Agent 开发不可能只用一家模型。今天觉得 GPT-4o 好明天想试试 Claude后头可能还要接国产模型普通开发者又不可能全部直连这时候 LiteLLM Proxy 就派上了用场。LiteLLM Proxy 简单说就是一个统一模型网关把不同厂商的模型 API 统一成一个 OpenAI 兼容格式的入口。你在 Agent 代码里只需要配一个 base_url指向 LiteLLM Proxy就不用关心背后接的是哪家模型。部署 LiteLLM Proxy 时我强烈建议你用 Docker 跑镜像名叫ghcr.io/berriai/litellm:main-stable。配置网关时把各家模型的 API Key 统一放在环境变量或单独的 yaml 配置里然后用/model/info接口检查各模型是否可用。一个关键参数是max_retries默认的重试机制在模型限流时有一定作用但我实测下来会把它调到 3配合request_timeout设置为 60 秒能覆盖大多数异常场景。另外一定把 LiteLLM Proxy 的日志开着。它会把每次请求的模型、token 消耗、延迟都记录下来这些数据在后期做模型选型和成本分析时是宝贵的素材。我托管一个 Agent 项目一个月后一查日志发现某条链路 60% 的请求都打在一个较贵的模型上果断降级换成便宜模型成本直接砍掉一半。3. Skills 的编写与核心环节实现3.1 Skills 的标准结构与核心要素腾讯云 AI Skills 的编写核心是掌握一套声明式的规则。一个标准的 Skill通常由以下几部分构成 Skill 的标识与名称、功能描述、参数定义、执行逻辑、输入输出协议。功能描述这部分我建议反向写先想清楚“Agent 在什么场景下会调用这个 Skill”。比如你做的是一个电商客服 Agent“查订单物流”这个 Skill 的描述应该写“当用户询问包裹到哪里了、快递进度、物流轨迹时调用”而不是干巴巴写“物流查询接口”。这一步非常重要因为 Agent 就是靠描述来匹配技能的描述写得抽象模型匹配精度就会下降。参数定义也有讲究。不要把所有参数都定义成必填这会让 Agent 在面对模糊输入时调用失败。靠谱的做法是把必要参数设为必填可选参数尽量给默认值。比如“查物流”这个 Skill订单号可能没有那就允许传手机号或者收货人姓名作为候选识别方式。模型会在上下文充分时自动补齐参数你的参数设计给模型留的容错空间越大实际可用性就越高。3.2 手把手一个典型 Skill 的创建过程我先拿一个实际项目里的例子来讲需求是“查实时天气”。这个 Skill 要给 Agent 用Agent 根据用户的提问判断是否触发。第一步确定 Skill 的输入。用户只说“今天上海热吗”那模型要能解析出城市是上海至于要不要具体时间可以通过默认值处理默认取当天。第二步写功能描述给 Agent 看的我写的是“当用户询问天气、温度、降雨概率、空气质量、是否适宜出行时使用。支持国内主要城市及区县。输入城市名时需尽量补全省市级别地名避免歧义。”第三步接一个免费天气 API数据源返回 JSON解析出温度、天气现象、风力这些关键字段。第四步定义输出格式让 Agent 可读。我一般会返回结构化的 JSON而不是一大段文本。这样好处是Agent 拿到 JSON 后可以结合自己的语言组织能力生成一段自然、贴合的回复。Skill 创建完成后在腾讯云控制台或本地调试工具都可以做单测。单测时一定要模拟多种提问方式而不是只测标准输入。比如“上海冷不冷”“今天出门要带伞吗”“北京空气质量怎么样”这些变体都能触发天气 Skill 才说明描述写得够稳。3.3 无服务器化部署与低延迟优化Skill 的部署我建议优先考虑腾讯云函数SCF。相比于一直跑一台常驻服务器云函数最大的优势是按量计费Agent 的这个能力没人调用就不花钱这对个人开发者和中小团队极其友好。用云函数部署 Skill 时有一个冷启动的问题需要正视。默认配置下冷启动时间在几百毫秒到一两秒之间放在 Agent 链路里体感还是明显的。解决办法是启用云函数的预置并发把关键 Skill 的并发实例预热住冷启动时长基本能压到百毫秒内。另外Skill 内部的 HTTP 调用也要设超时时间我自己统一设 5 秒超过就返回降级文案总不能因为一个天气接口挂了整个 Agent 卡十几秒没反应。在这个环节里另一个容易被忽略但很重要的点是日志。云函数日志要开每次调用的入参、出参、耗时、报错堆栈全都要能查到。没有日志的 Skill 就像没有仪表盘的飞机飞起来全靠胆量。4. Agent 编排与模型链路实践4.1 让 Agent 会“分工”Skills 之间的编排逻辑单个 Skill 解决的是单点能力而 Agent 的价值在于把多个 Skill 组织起来完成复杂任务。这就涉及到编排逻辑。我实践中比较推崇“Agent 作为调度器 Skill 作为执行器”的模式。Agent 本身不做具体的业务操作它只负责拆解用户的意图决定调用哪个 Skill以及把多个 Skill 的结果组合成最终回答。比如用户问“帮我规划明天去杭州的行程顺便看看天气”Agent 会同时调用日程规划 Skill 和天气查询 Skill再把两者结果合并输出。有的开发者会纠结我是把编排逻辑写死在代码里还是交给模型自动决定我的建议是能用代码写死的尽量写死只有无法预判的开放场景才交给模型决策。写死的编排逻辑确定性强、可测试、不容易出错模型决策灵活但不可控对话链路一长就可能走偏。落到工程上我会用一个流程状态机来管理多轮任务而不是把状态都压在对话上下文里。4.2 状态管理与记忆机制的工程实现Agent 项目做深了之后一定会撞上“记忆”这个问题。用户上一轮说了偏好下一轮 Agent 就忘了这种体验非常割裂。我在腾讯云上的做法是引入一个独立的记忆服务说白了就是给每个用户建一个 KV 存储需要持久化的关键信息比如用户的常用城市、出行偏好、历史订单写进去Agent 在每轮对话开始时把相关记忆注入到上下文中。这里要注意记忆不是越多越好。把几十条历史消息一股脑塞给模型既烧 token 又干扰判断。我的实践是短期记忆保留最近 3~5 轮对话长期记忆只沉淀那些用户明确表达过且具有复用价值的信息。为了让 Agent 知道该记住什么我会在 Skill 里加一个“记忆提取”的专用函数在关键节点上由模型判断是否值得写入长期记忆而不是整段对话无差别存储。4.3 多轮对话中的防漂移与降级策略做过实际 Agent 项目的都有体会对话轮次一多Agent 就容易飘。明明刚开始聊天气聊着聊着就跑到完全无关的话题上去了。我在代码里加了“对话护栏”机制每一轮模型输出后会先过一遍意图分类器确认与当前任务仍相关再继续执行否则会主动询问用户是否切换了主题。更关键的是降级策略。任何一个外部 Skill、模型服务都可能随时出问题。当某个 Skill 连续调用失败 2 次时我会直接熔断不再重复调用转而返回一个预设的兜底文案告诉用户“这个话题我暂时处理不了可以稍后再试”。千万不要小看这个开关生产环境里很多 Agent 给人“很傻”的印象就是因为在出错路径上没有兜底直接超时或者返回生硬的报错。5. 常见问题与排查技巧实录5.1 高频报错排查清单Agent 在腾讯云上跑起来之后会遇到各种莫名其妙的问题。我整理了一份高频问题速查表全部来自真实生产环境现象根因排查思路模型返回 400 错误参数格式不合法或缺少必填参数看 LiteLLM Proxy 日志确认请求体里的 messages 结构检查 Skill 参数映射是否遗漏Skill 调用超时云函数冷启动外部 API 响应慢启用预置并发给 Skill 内部请求加超时第三方 API 不可靠时考虑加缓存Agent 调用错 Skill功能描述太宽泛模型无法区分把 Skill 描述改成“触发场景典型问法”的格式多个相似 Skill 要在描述里明确边界上下文丢失没接持久化记忆只靠对话窗口接入记忆服务关键信息在 Skill 返回时直接写入长期记忆内存溢出单次 Skill 返回数据量过大限制 SQL 查询条数返回字段裁剪超出阈值时做分页摘要端口不通安全组或防火墙未放行登录服务器用 netstat 确认监听再检查安全组入方向是否放行了对应端口不夸张地说这份清单解决了我至少一半的日常排障时间。建议大家照着这个思路把自己项目的报错也沉淀成类似的清单团队其他人遇到同类问题时就不必从头查一遍了。5.2 并发与成本控制经验Agent 服务上线后并发和成本的平衡是我被问得最多的问题之一。LiteLLM Proxy 自带简单的限流能力可以通过配置max_parallel_requests控制单模型的最大并发数防止突发流量打爆模型配额或者烧穿预算。腾讯云函数部分建议给每个 Skill 设置独立的并发配额不要让一个冷门 Skill 占满整体并发额度从而影响核心链路。成本控制上最有效的一招是给不同模型分配不同的任务类型。复杂推理任务用 GPT-4 级别的大模型简单抽取和分类任务用便宜的小模型。我在 LiteLLM Proxy 里配置了多个模型组Agent 的调度层会根据任务复杂度的预估自动路由实测下来整个项目的月度模型成本能省 30%~40%。利润可能看起来不大但对个人开发者来说这就是能不能持续跑下去的关键。5.3 上线前必须检查的几个安全项Agent 上线前安全检查我一般按下面这几条走一遍首先API Key 绝对不要硬编码在前端代码里。所有的密钥只放服务端环境变量或云平台的密钥管理服务里前端只允许通过后端代理转发请求。其次Skill 的入参要做校验。模型生成的参数不可信我在每个 Skill 入口都做了白名单校验和长度限制防止注入超长字符串或者特殊构造的内容打崩下游服务。第三用户相关的数据接口要控制权限边界。A 用户的信息绝对不能因为模型幻觉而暴露给 B 用户的会话。这个在 Skill 设计阶段就要定好凡是涉及用户数据的调用必须从会话上下文中拿用户 ID而不是让模型自由发挥。最后限流一定要做。无论你的服务是给小程序用还是给内部工具用都要有每分钟请求上限。腾讯云的 API 网关支持直接配置限流策略省得自己在代码里实现。6. 从个人项目到团队规范的沉淀写到这儿相信你已经发现Agent 开发真正难的不是某个点上的技术而是把散落的决策、工具、记忆、模型、异常处理这些环节拼成一个稳定可控的系统。AI Skills 给我最大的启发就是它把“能力”这件事标准化了。团队里每个人写的 Skill 都有同样的结构、同样的调试流程、同样的部署方式协作成本直线下降。我们团队现在已经有了一条不成文的规矩任何新能力先进 Skills 体系再谈接入 Agent。这也让后续的新人 onboarding 轻松很多新同学只要照着已有 Skill 的模板改半天就能提一个可用的小能力上库而不需要先花两周弄懂整套工具链。如果你正在做自己的 Agent 项目或者正打算让团队现有的 Agent 变得更好维护我建议你先找一两个最常用、最独立的能力练手比如天气查询、文档解析、数据库查询这类完整走一遍“定义 Skill → 云端部署 → 接入 Agent → 上线排障”的闭环。等你把这条路踩熟了再逐步拓宽会比一上来就憋一个大而全的 Agent 稳妥得多。7. 最后分享一个小经验最后再说一个我压箱底的小技巧无论是 LiteLLM Proxy 的日志还是腾讯云函数的日志都把结构化格式开启每条日志打出请求 ID。这样当你遇到一个用户反复反馈“Agent 答得不对”时你可以拿着这条请求 ID把整条链路的日志串起来看从模型输入、Skill 匹配、参数解析到最后生成到底哪一步发生了偏差一目了然。没有可观测性的 Agent 项目出了问题就是在黑箱里捞针做好日志和追踪你已经跑赢了八成同类项目。希望这篇实践复盘能让你在腾讯云上把 Agent 这条路走得更顺。