当前位置: 首页 > news >正文

AI智能体集成短信API实战:基于sendly-skills的技能化开发指南

1. 项目概述与核心价值

最近在折腾AI智能体(AI Agent)项目,发现一个挺有意思的痛点:想让AI去处理一些需要调用外部API的实际任务,比如发短信、验证手机号,总得自己写一堆胶水代码,还得教AI怎么用。这过程既繁琐又容易出错,尤其是涉及到短信发送这种有合规要求的场景。直到我发现了SendlyHQ团队开源的sendly-skills项目,它直接把发送短信、验证手机号这些能力打包成了标准的“技能包”,让AI智能体开箱即用。

简单来说,sendly-skills是一套为AI智能体设计的技能库,基于SKILL.md标准。它让Claude Code、Cursor、Windsurf这些支持该标准的AI编码助手或智能体,能够直接理解并调用Sendly的短信API,完成从单条发送、批量处理到手机号验证等一系列操作。最核心的价值在于,它把复杂的API调用逻辑、合规检查(比如TCPA、静默时段)和最佳实践(如E.164号码格式化)都封装好了,开发者无需从零构建,AI也能安全、合规地执行任务。

这套技能特别适合几类人:一是正在开发或集成AI智能体的应用开发者,能快速为智能体赋予现实世界的交互能力;二是需要自动化处理客户沟通、验证流程的团队,比如用AI自动发送订单确认、验证码;三是任何想探索AI如何与通信API结合,构建更智能工作流的爱好者。它降低了AI落地的门槛,把焦点从“怎么让AI调用API”转移到了“用AI解决什么业务问题”上。

2. 技能包架构与设计思路拆解

2.1 基于SKILL.md的标准化设计

sendly-skills的核心设计理念是标准化和模块化。它没有自己发明一套新的交互协议,而是选择了拥抱SKILL.md这个正在兴起的标准。SKILL.md本质上是一种描述AI技能(Skill)的元数据文件格式,它告诉AI智能体“这个技能叫什么、能干什么、需要什么参数、怎么调用”。这就像给AI提供了一份清晰的产品说明书。

选择SKILL.md而非其他自定义方案,背后有几个关键考量。首先是生态兼容性。从项目文档列出的兼容列表看,Claude Code、Cursor、VS Code Copilot、Windsurf等主流AI编码工具都已支持或正在积极支持SKILL.md。这意味着你开发的技能可以一次编写,多处运行,避免了为每个AI平台单独适配的碎片化问题。其次是降低学习成本。对于开发者而言,只需要遵循一个相对简单的Markdown格式规范,就能定义技能,无需深入学习每个AI工具特有的插件系统。最后是面向未来。一个开放的、社区驱动的标准更有利于技能的共享和生态的繁荣,sendly-skills选择它,也是将自己定位为这个生态中的一个高质量贡献者,而非一个封闭的解决方案。

2.2 模块化技能拆分:从单一功能到复合能力

项目没有把所有功能塞进一个巨大的技能包里,而是做了清晰的模块化拆分,形成了三个独立的技能:sending-smsverifying-phonessms-best-practices。这种设计非常值得借鉴。

sending-sms是核心通信技能。它聚焦于“发送”这个动作,但覆盖了从简单到复杂的各种场景:发送单条短信、批量发送给多个收件人、安排定时发送、甚至管理对话线程(Conversations)。这意味着AI可以根据上下文,灵活选择最合适的发送模式,而不是只会一种“发短信”的简单操作。

verifying-phones是安全验证技能。它专门处理一次性密码(OTP)验证流程,包括生成并发送验证码、验证用户输入的代码是否正确,还支持托管式验证会话(hosted sessions)。这个技能独立出来,是因为验证逻辑(如重试限制、会话管理)与普通短信发送有显著不同,独立封装更利于维护和保证安全性。

sms-best-practices是合规与治理技能。这是我认为最有价值的部分。它不直接执行发送动作,而是作为一个“守门员”或“顾问”,确保前两个技能的执行是安全、合规的。它内嵌了对美国《电话消费者保护法》(TCPA)规则的理解、对“静默时段”(quiet hours,即避免在深夜或清晨打扰用户)的检查、对用户退订(opt-outs)名单的尊重,以及SHAFT(性、仇恨、酒精、枪支、烟草)内容过滤和E.164国际电话号码格式的自动校正。

这种“核心操作 + 专项能力 + 合规层”的三层架构,使得整个系统既灵活又稳健。开发者可以按需安装,AI在调用时也能根据技能描述,清晰地知道每个技能的边界和职责。

2.3 沙盒模式与安全第一的实践

项目明确要求使用Sendly的API密钥,并特别强调了sk_test_*开头的沙盒(Sandbox)密钥。这是一个至关重要的安全与开发最佳实践。在沙盒模式下,所有API调用都不会产生真实的短信费用,也不会将短信发送到真实的手机号码,但API的响应和行为与生产环境完全一致。

这为开发和测试带来了巨大的便利。开发者或AI可以在一个安全的环境中反复调试发送逻辑、验证合规规则,而不用担心误发短信造成费用损失或用户投诉。项目文档直接引导用户到Sendly仪表板的API密钥页面获取测试密钥,这种将安全理念融入工具链的设计,体现了对开发者体验和实际风险的深刻理解。在实际集成时,我强烈建议任何新项目都从沙盒模式开始,充分测试后再切换至生产密钥。

3. 核心技能解析与实操要点

3.1sending-sms:不仅仅是发送

安装这个技能后,AI智能体就获得了通过Sendly API发送短信的能力。但它的能力远不止一个简单的sendSMS()函数。

核心功能维度:

  • 单条发送:最基础的功能,指定一个E.164格式的号码和短信内容即可发送。
  • 批量发送:向一个号码列表发送相同或个性化的内容。这对于营销通知、系统告警等场景非常有用。技能内部会处理API的批量调用和可能的速率限制。
  • 定时发送:可以指定一个未来的时间点发送短信。AI可以理解“明天早上9点给用户发送提醒”这样的自然语言指令,并将其转换为具体的调度参数。
  • 对话管理:这是一个高级特性。Sendly API支持将往来短信关联到一个“对话”中。这意味着AI可以跟踪与某个号码的完整交互历史,在回复时保持上下文连贯,提供更自然的对话体验。

实操要点与参数解析:当AI使用这个技能时,它需要构造一个符合Sendly API规范的请求体。以下是一个AI可能会生成或理解的示例参数结构:

{ "to": "+8613912345678", "body": "您的订单#12345已发货,物流单号:SF1234567890。", "from": "YourBrand", // 或一个租用的长号码/短代码 "schedule_for": "2024-06-15T09:00:00Z", // 可选,用于定时发送 "conversation_id": "conv_abc123" // 可选,用于关联对话 }

注意:from字段的取值取决于你在Sendly平台配置的发送者ID(Sender ID)。它可以是字母数字形式的品牌名(如“YourBrand”,在某些地区和国家受限制),也可以是你在Sendly租用的专用长号码或短代码。使用前需在Sendly后台确认该发送者ID的可用性和合规性。

一个常见的踩坑点是号码格式。全球短信服务几乎都强制要求使用E.164格式(例如,+8613912345678)。sendly-skillssms-best-practices技能包含了自动格式化的逻辑,但作为开发者,在向AI提供原始数据时,最好也预先做好清洗和格式化,双保险确保无误。

3.2verifying-phones:构建安全的验证流程

手机号验证是现代应用的基础设施。这个技能将OTP验证流程抽象成了几个简单的操作,让AI可以像调用本地函数一样管理验证。

工作流程解析:典型的OTP流程包含两个步骤,对应技能的两个核心操作:

  1. 发送验证码:AI调用技能,提供手机号。技能内部会生成一个随机码(通常是4-6位数字),并通过Sendly的通道发送给用户。同时,服务器端会创建一个验证“会话”,记录这个手机号、验证码、过期时间(通常为5-10分钟)和尝试次数。
  2. 验证代码:用户收到短信后输入代码。AI再次调用技能,提供手机号和用户输入的代码。技能会与服务器端的会话记录进行比对,检查代码是否正确、是否过期、是否超过最大尝试次数(防止暴力破解),并返回验证成功或失败的结果。

“托管会话”的优势:verifying-phones技能支持“托管会话”,这意味着会话状态的管理(存储、查找、验证、过期清理)是由Sendly的后端服务完成的,而不是你的应用服务器。这样做的好处是:

  • 无状态服务:你的应用服务器无需设计数据库表来存储验证会话,简化了架构。
  • 自动清理:过期会话会自动删除,无需你写定时任务。
  • 安全性:验证逻辑在Sendly的安全环境中执行,减少了因自身实现不当导致的安全漏洞风险。

实操心得:在实际集成中,我建议将“发送验证码”和“验证代码”这两个步骤与你的用户界面流紧密绑定。例如,在注册页面,用户输入手机号后,前端触发AI智能体调用“发送验证码”技能。用户收到短信并在前端输入后,再将手机号和输入码提交给AI进行验证。AI可以根据验证结果,决定是跳转到下一步还是提示用户重新输入。整个流程中,你的后端代码可能只需要做简单的路由转发,主要的业务逻辑都交给了AI和技能包来处理。

3.3sms-best-practices:不可或缺的合规护栏

这个技能是确保你的短信应用合法、合规、不惹用户厌烦的关键。它像是一个内置的合规官,在发送前自动进行多项检查。

核心合规检查项深度解读:

  1. TCPA合规性:主要针对美国市场。它会检查你是否拥有接收方的“事先明确同意”(express prior consent)记录。技能本身可能不存储同意记录,但它会强制要求调用方提供“同意证明”的元数据,或者与能提供此类证明的系统集成,从而在流程上强制合规。
  2. 静默时段检查:这是一个重要的用户体验特性。技能可以根据收件人所在的时区,判断当前时间是否处于预设的“静默时段”(例如,当地时间的晚上9点到早上8点)。如果在静默时段内,发送请求会被延迟或拒绝(取决于配置)。这需要你提供或配置好收件人的时区信息。
  3. 退订名单尊重:技能会检查目标号码是否存在于全局或你账户的退订列表中。如果在列表中,发送请求会被自动阻止。这要求你将用户退订操作与Sendly的退订列表API同步,或者使用Sendly提供的退订管理功能。
  4. SHAFT内容过滤:自动扫描短信内容中是否包含与性、仇恨、酒精、枪支、烟草相关的高风险词汇或敏感内容。这类内容在很多短信通道是被严格禁止或受严格监管的。过滤可以防止因内容违规导致通道被关闭。
  5. E.164格式校正:自动尝试将各种格式的手机号(如(123) 456-7890,123-456-7890,01234567890)转换为标准的E.164格式(如+11234567890)。这是一个非常实用的预处理功能,能极大减少因格式错误导致的发送失败。

集成模式:sms-best-practices技能可以以两种模式集成:

  • 拦截模式:作为发送流程的一个前置过滤器。在调用sending-sms之前,先调用sms-best-practices进行校验。如果校验失败(如号码退订、处于静默时段),则直接中止发送,并返回友好的错误信息。
  • 建议模式:作为AI的实时顾问。当AI在构思短信内容或准备发送时,sms-best-practices技能可以被查询,例如“检查这段内容是否有敏感词?”或“这个号码现在可以发送吗?”。AI根据反馈调整其行为。

在实际项目中,我强烈推荐使用拦截模式,将它作为一道强制性的安全关卡。这能最大程度地避免人为疏忽或AI误判导致的合规风险。

4. 从零开始:安装、配置与集成实战

4.1 环境准备与技能安装

首先,你需要一个支持SKILL.md的AI智能体环境。这里以目前非常流行的Claude Code(在Cursor编辑器或独立应用中)为例,演示完整的集成流程。

步骤1:获取Sendly API密钥

  1. 访问 Sendly官网 并注册/登录账户。
  2. 进入控制台仪表板,导航到API Keys部分。
  3. 点击“Create New Key”。务必在测试阶段选择“Sandbox”类型,这会生成一个以sk_test_开头的密钥。复制并妥善保存这个密钥。

步骤2:安装技能包打开你的AI智能体项目所在的终端,或者在你使用的编辑器(如Cursor)的集成终端中,执行安装命令。你有两种安装选择:

  • 安装完整技能包(推荐初次使用):

    npx skills add SendlyHQ/sendly-skills

    这条命令会一次性安装sending-sms,verifying-phones,sms-best-practices三个技能。

  • 按需安装单个技能

    npx skills add SendlyHQ/sendly-skills/sending-sms # 或 npx skills add SendlyHQ/sendly-skills/verifying-phones # 或 npx skills add SendlyHQ/sendly-skills/sms-best-practices

    安装后,你的AI智能体环境(如Claude Code)通常会自动感知到新技能的加入。你可以在AI的输入提示中尝试询问,例如“我现在有哪些可用的技能?”或“如何使用发送短信的技能?”

4.2 配置AI智能体以使用技能

仅仅安装技能还不够,AI需要知道如何连接Sendly服务。这通常通过环境变量或配置文件来完成。

以Claude Code/Cursor为例:

  1. 在你的项目根目录下,找到或创建一个名为.env的文件(如果使用Cursor,它通常有专门的环境变量管理界面)。
  2. .env文件中添加你的Sendly沙盒API密钥:
    SENDLY_API_KEY=sk_test_your_sandbox_key_here
  3. 关键点:你需要确保AI智能体进程能够读取到这个环境变量。在Cursor中,你可能需要重启AI会话或重新加载项目。在某些配置中,技能包可能会自动查找名为SENDLY_API_KEY的环境变量;如果不行,你可能需要查阅具体AI工具(如Claude Code)的文档,了解如何将环境变量传递给技能运行时。

验证配置是否成功:一个简单的测试方法是,直接向AI提问。例如,在代码编辑器中,你可以对AI说:

“我想给号码 +8613912345678 发送一条测试短信,内容是‘Hello from Sendly Skills test’。请使用sendly的sending-sms技能,并确保遵守合规检查。”

如果配置正确,AI应该能够理解你的指令,并生成相应的代码或直接调用技能执行(取决于AI工具的能力)。在沙盒模式下,你会收到一个模拟的成功响应,而不会产生真实短信。

4.3 在真实项目中与AI智能体协同工作

让我们设想一个用户注册场景,将sendly-skills集成到一个由AI智能体驱动的后端服务中。

场景:用户在前端输入手机号请求注册验证码。

后端AI智能体(例如基于Claude Code构建的自动化脚本)的工作流:

  1. 接收请求:AI智能体接收到包含手机号rawPhoneNumber的HTTP请求或事件。
  2. 合规预处理:AI首先调用sms-best-practices技能。
    • 动作:请求格式化号码并检查基本合规性。
    • AI的“思考”:“我需要先确保这个号码格式正确且可以接收短信。”
    • 代码/逻辑示意:AI可能会生成或执行类似这样的逻辑(伪代码):
      // AI利用技能知识生成的步骤 const formattedNumber = await skills['sms-best-practices'].formatNumber(rawPhoneNumber); const complianceCheck = await skills['sms-best-practices'].checkCompliance({ to: formattedNumber, body: '[OTP Code]' // 预检查,内容暂定 }); if (!complianceCheck.allowed) { throw new Error(`Compliance check failed: ${complianceCheck.reason}`); }
  3. 发送验证码:如果合规检查通过,AI调用verifying-phones技能。
    • 动作:请求发送OTP。
    • AI的“思考”:“现在可以安全地发送验证码了。我将请求生成并发送一个6位数的代码。”
    • 代码/逻辑示意
      const otpResponse = await skills['verifying-phones'].sendCode({ to: formattedNumber, channel: 'sms', // 指定通过短信发送 codeLength: 6 // 指定验证码长度 }); // otpResponse 可能包含 sessionId,用于后续验证
  4. 处理响应:AI将发送结果(成功或失败)返回给前端。
  5. 验证用户输入:用户输入验证码后,AI调用verifying-phones的验证接口完成校验。

在这个流程中,开发者编写的“硬代码”可能很少,主要是定义工作流和错误处理。复杂的API调用、合规逻辑、状态管理都由AI通过技能包来协调和执行。这极大地提升了开发效率,并保证了实施的质量与一致性。

5. 深入排查:常见问题、调试技巧与进阶考量

5.1 安装与配置问题排查表

问题现象可能原因排查步骤与解决方案
运行npx skills add命令失败或超时1. 网络连接问题。
2. npm registry 访问慢或技能包仓库不存在。
1. 检查网络,尝试使用ping npmjs.com
2. 运行npm config get registry确认registry正确。可临时切换淘宝镜像npm config set registry https://registry.npmmirror.com后重试。
3. 确认仓库地址SendlyHQ/sendly-skills拼写正确。
技能安装成功,但AI智能体无法识别或使用1. AI环境未正确加载新技能。
2. 环境变量未设置或未被AI进程读取。
3. AI工具本身对SKILL.md支持不完整。
1.重启AI会话:关闭并重新打开Claude Code/Cursor的AI聊天面板或重启整个编辑器。
2.检查环境变量:在终端中运行echo $SENDLY_API_KEY(Linux/Mac) 或echo %SENDLY_API_KEY%(Windows) 确认变量已设置。在AI工具内,尝试询问“我的SENDLY_API_KEY环境变量是什么?”(如果支持)。
3.查阅工具文档:前往Claude Code、Cursor等工具的官方文档,确认其对SKILL.md技能加载的具体要求和最新支持状态。
调用技能时返回“Invalid API Key”或“Authentication Failed”1. API密钥错误或已失效。
2. 使用了生产密钥但账户未充值或服务未激活。
3. 密钥未正确传递到技能请求中。
1.确认密钥:登录Sendly仪表板,在API Keys页面确认密钥值正确,且处于“Active”状态。
2.坚持使用沙盒:测试阶段确保使用sk_test_*密钥。
3.检查传递方式:根据技能和AI工具的约定,确认API_KEY是通过请求头(如Authorization: Bearer sk_test_...)还是其他方式传递。可以尝试在简单脚本中直接调用Sendly API测试密钥有效性。
发送短信请求成功,但收不到短信(沙盒模式除外)1. 目标号码格式非E.164。
2. 号码所在国家/地区不支持,或不在你的发送权限内。
3. 短信内容触发风控被拦截。
4. 发送者ID(Sender ID)未配置或无效。
1.格式化号码:使用sms-best-practices技能的格式化功能,或手动确保号码格式为+[国家码][号码]
2.检查Sendly后台:在Sendly的“覆盖范围”或“设置”中,查看支持的国家和运营商。
3.审查内容:避免使用明显的营销词汇、链接短链、敏感词。使用sms-best-practices进行内容预检。
4.配置发送者ID:在Sendly后台的“Senders”部分,配置一个有效的发送者(可以是字母数字ID或租用的号码)。

5.2 调试技巧与日志查看

当技能调用不按预期工作时,系统化的调试至关重要。

  1. 利用沙盒模式:这是最强大的调试工具。在沙盒模式下,所有发送和验证请求都不会真实发生,但Sendly API会返回一个模拟的、结构完全真实的响应。仔细查看这个响应体,里面通常包含statusmessageerror_code等字段,能精准定位问题。例如,错误码可能直接指出“INVALID_PHONE_NUMBER”或“SENDER_ID_NOT_APPROVED”。

  2. 检查AI与技能的交互:在Claude Code或Cursor中,当你要求AI使用技能时,观察AI生成的“思考过程”或拟执行的代码。有时AI可能误解了你的指令,或错误地构造了请求参数。你可以要求AI“分步解释你将如何调用发送短信的技能”,从而检查其理解是否正确。

  3. 直接测试API:作为终极验证手段,可以使用curl或 Postman 直接调用Sendly的API。用你的沙盒密钥,按照Sendly官方API文档构造一个最简单的发送请求。这能帮你厘清问题是出在sendly-skills技能包、AI工具集成层,还是你对需求的理解上。

    # 示例:使用curl测试Sendly发送API curl -X POST https://api.sendly.live/v1/messages \ -H "Authorization: Bearer sk_test_your_key" \ -H "Content-Type: application/json" \ -d '{ "to": "+15551234567", "body": "Test message", "from": "TestSender" }'

5.3 性能、成本与进阶考量

在项目从测试走向生产时,有几个进阶问题需要思考。

性能与速率限制:Sendly API和你的AI智能体平台都会有速率限制(Rate Limiting)。sendly-skills本身不处理限流,因此在大批量发送时(如使用sending-sms的批量功能),你需要:

  • 了解限制:查阅Sendly API文档,了解每分钟/每小时/每天的最大请求数。
  • 实现重试与退避:在你的AI工作流或应用代码中,对因限流返回的429 Too Many Requests错误实现指数退避重试机制。
  • 异步处理:对于非即时性任务,考虑将发送请求推入消息队列(如RabbitMQ、Redis Queue),由后台工作者异步、匀速地处理,避免对AI交互线程造成阻塞。

成本控制:切换到生产环境后,每条短信都会产生费用。

  • 监控与告警:利用Sendly仪表板的统计功能,监控每日发送量和费用。设置预算告警。
  • 优化发送策略:利用sms-best-practices的静默时段和退订检查,避免无效发送。对于通知类短信,考虑是否真的需要即时发送,还是可以合并或延迟。
  • 沙盒与生产环境严格隔离:确保测试脚本、开发环境永远只使用沙盒密钥。生产环境的API密钥应有严格的访问控制。

技能组合与自定义扩展:sendly-skills提供了坚实的基础,但真实业务可能更复杂。你可以:

  • 组合技能:设计AI工作流,将短信技能与其他技能组合。例如,先调用一个“查询用户偏好”的技能,再根据偏好决定是否发送及发送内容。
  • 封装业务逻辑:在AI智能体之上,你可以用代码封装一层业务逻辑。例如,一个sendWelcomeMessage(userId)函数,内部由AI智能体决定调用哪个技能、准备什么内容。
  • 自定义技能:如果Sendly的技能不满足需求,你可以参考SKILL.md规范,为你内部或其他第三方API创建自定义技能,进一步扩展AI的能力边界。

从我的实践经验来看,sendly-skills最大的价值在于它提供了一种“即插即用”的AI能力扩展范式。它把复杂的、专业的短信领域知识封装成AI能理解的语言,让开发者可以更专注于业务创新,而不是通信协议的细节。在集成过程中,耐心做好前期测试,充分利用沙盒环境,厘清合规要求,就能平滑地将强大的通信能力赋予你的AI智能体。

http://www.jsqmd.com/news/778304/

相关文章:

  • 2026年5月太原全屋整装/新房装修/旧房翻新/毛坯装修公司如何选?深度剖析“太原一家一装饰”的标杆价值 - 2026年企业推荐榜
  • 2025 年 MaaS 市场竞争激烈,火山引擎份额稳固,AI 云飞轮加速转动!
  • Remnic:为AI智能体构建本地持久记忆系统的完整指南
  • 基于React与Tailwind CSS的轮毂偏移量计算器开发实践
  • 靠谱好用的心理APP推荐!2026治愈情绪内耗,日常压力自愈必备 - 健成星云
  • 2026电线电缆推广指南:去哪打广告客户最多 - 品牌推荐大师
  • 掌握Casbin工具函数:轻松实现高效权限控制的实用指南
  • RWKV-Runner全栈工具箱:简化大语言模型部署与实验
  • 从HTML到Word格式错乱:AI生成内容导出的“最后一公里”问题与工程化解法
  • 怎么快速获取城市必吃外卖榜攻略?外卖必点榜覆盖全品类满足各类用餐需求 - 资讯焦点
  • 2026年4月塑料管供应商推荐,九孔格栅管/雄安硅芯管/城建管道/通信管道/雄安格栅管,塑料管公司推荐 - 品牌推荐师
  • 终极Python NLP库对比指南:spaCy vs NLTK vs gensim深度评测
  • 如何快速了解 Kubernetes 的整体架构?
  • 油猴屏蔽百度热搜 - 冷夜
  • 一看就懂的HPH构造与核心部件解析
  • 零配置代码质量工具链Ultracite实战:Biome、ESLint、Oxlint对比与AI集成
  • 2026最新护理学校/高等专科推荐!华中优质院校权威榜单发布,专业靠谱湖南衡阳等地院校实力突出 - 博客万
  • 26年6月体重管理师官方考试指南|健康人才培养工程权威认证 - 品牌策略主理人
  • 深圳地区靠谱墨西哥物流服务商排行及核心能力解析 - 奔跑123
  • 90%代码由AI生成,31万行复杂业务系统如何重构?美团技术团队分享实战经验
  • WordPress低成本建站全攻略(新手友好,低成本高适配) - 麦麦唛
  • Qwen3-VL-Reranker-8B完整指南:32k长上下文多模态重排序实战
  • RAG质量评估实施RAG工程核心步骤
  • 像素幻梦·创意工坊部署指南:sequential_cpu_offload显存优化配置详解
  • 基于Golang的ESP32物联网服务器:轻量高并发后端设计与实践
  • CANoe里用SOME/IP_IL库做通信仿真,这几个CAPL函数你用过吗?
  • 技术博文:基于 PyTorch 实现经典 LeNet-5 手写数字识别
  • 2026年郑州汽车贴膜行业横向测评:5家主流门店深度对比 - 贴膜攒钱买霍希
  • gh_mirrors/in/invoice错误排查手册:常见问题与解决方案大全
  • DeepWay冲刺港股:年营收近40亿亏6.5亿 刚融资超3亿美元 百度与中东资本加持