RPA机器人CI/CD:自动化流程也需要自动化部署
一、当RPA遇上CI/CD
去年的那个冬天, 我为一家有着一定规模的制造企业展开RPA流程改造工作。那时, 他们已然通过传统途径部署了三十多个机器人, 这些机器人承担着订单录入、库存对账以及报表生成等重复性的工作。项目上线三个月之后, 问题开始集中性地爆发出来: 在开发环境中运行状况良好的流程, 到了生产环境却出现报错情况;当某个网页进行改版之后, 十几个机器人的元素定位全部失效;最为关键的是, 每次进行更新时, 都需要运维同事一台机器、一台机器地亲手去替换脚本, 仅仅是发版就一直折腾到凌晨两点。
这并非个别情况, 很多团队在引入RPA之后, 很快就会遭遇一个尴尬的现实, 自动化了业务流程, 然而却没能达成自动化流程部署, 机器人流程自动化部署同样需要工程化规范, RPA机器人本质上也是软件, 机器人流程自动化部署同样需要工程化规范, RPA机器人本质上也是软件, 既然传统软件需要CI/CD流水线来保障交付质量, RPA机器人为何能例外呢?
此文以实战视角入手, 谈谈怎样将CI/CD的理念以及方法论转移至RPA领域, 使得自动化流程的交付同样能够如同传统软件开发那般具备高效率、保持稳定性、拥有可追溯性。
二、为何RPA尤其需要CI/CD, 2.1 RPA进行部署时的“脆弱性”相较于传统软件要高得多。
传统应用所部署的是经过编译的二进制文件或者容器镜像, 其环境差异相对而言能够得到控制。然而, RPA机器人是直接对UI界面进行操作的, 会依赖目标系统的视觉呈现。网页出现改版情况、软件进行了升级、分辨率发生了变化, 甚至是弹窗广告随机出现, 这些都有可能致使流程出现中断。要是没有自动化测试以及持续集成的保障, 那么这些问题就只能在生产环境当中暴露出来, 所付出的代价是极高的。
2.2 版本管理混乱是隐形杀手
诸多RPA团队直至如今依旧借助U盘拷贝以及微信传递文件的方式去分发脚本, “真的最终版_不改了.zip”这般的命名形式, 明白其中缘由的人自然心里有数, 由于不存在版本控制系统, 以至于回滚至前一个稳定版本都成为了难题。
2.3 多环境一致性难以保障
操作系统版本, 会在开发环境、测试环境、生产环境出现不一致的情况, 同时浏览器版本、分辨率设置也如此, 这种差异现象较为常见。DPI缩放比例不同, 会导致一个流程在开发机上如鱼得水, 在运维同事笔记本上却找不到按钮, 出现问题。CI/CD的核心价值之一, 就是要通过标准化流程, 来消除环境差异所带来的不确定性, 这一点至关重要。
三、RPA的CI/CD流水线, 其完整架构为3.1, 该流水线设计有着整体的思路。
持续部署RPA是CI/CD流水线最终所指向的目标, CI/CD流水线之于RPA能够去借鉴传统且成熟的模式, 不过要针对RPA具有的特殊性来做出适配, 通常一个完整的流水线涵盖下面这些阶段:
代码提交 → 静态检查 → 单元测试 → 集成测试 → 打包构建 → 环境部署 → 冒烟测试 → 灰度发布 → 全量上线 → 监控告警
在每一个阶段当中, 都存在着清晰分明的准入、准出标准, 对于任何一个环节而言, 一旦出现失败的情况, 便会将后续的流程予以阻断, 以此来保证“不会有存在问题的代码流入到生产环境当中”。
3.2 版本控制:一切的基础
处于CI/CD前提位置的是RPA流程的代码化, 把流程脚本归入Git管理范畴, 每一个变更都具备提交记录、代码审查以及分支策略, 推荐运用Git Flow工作流:
这样的分支模型, 能够有效地将风险隔离开来, 防止在开发过程当中, 那些处于半成品状态的代码, 对主分支造成污染。
3.3 自动化构建:从脚本到可执行产物
进入构建这个阶段, 其关键任务在于把哪些分散排布的内容, 这些比如流程文件、配置文件以及依赖库等, 统统都囊括起来进行打包, 成为符合条件的可用于部署的产物。针对RPA这种特定的场景而言, 这整个步骤显得格外重要, 原因在于最后要交付出去的常常并非是源代码, 而是那种能够在目标确定的机器上直接就可以运行起来的可执行文件呐。
理想情况下,构建产物应该满足几个条件:
存在一些工具, 在这一领域做得颇为到位, 举例来说, 其支持把流程脚本进行打包, 进而导出成为独立的EXE文件, 接收者双击该文件便能够运行, 全然无须安装客户端。在此情况下, 这于跨部门以及跨地域的部署情形之下, 显得格外友好。进一步来讲 打包以后的应用 还能够支持在线推送更新 打开EXE文件 就能够自动检测新版本 并且静默升级 如此便省去了手动分发所带来的麻烦。
在那种需要对外进行分发的场景当中, 当打包导出应用EXE之际, 还能够单独去设置API触发以及定时执行方面的策略。举例来说, 有某个数据处理流程, 它能够被配置成每天凌晨两点自动开启, 又或者借助外部系统的HTTP请求来促使其触发执行。正是这样的一种灵活性, 使得RPA流程可以更好地融入到企业现有的IT架构里面。
3.4 自动化测试:RPA的"免疫系统"
RPA测试自动化对保障流程质量而言是关键所在, 这属于RPA CI/CD里极难且具备最大价值的那个环节, RPA的测试不能单单开展单元测试, 必须得涵盖UI交互的整个链路, 建议构建三层测试金字塔。
第一层:单元测试
到流程里的独立逻辑模块那儿开展测试, 像数据清洗函数, 正则表达式匹配, API相应解析一类的就行。这些不依靠UI的纯逻辑范畴, 能够借助传统的单元测试框架去覆盖。
第二层:组件测试
去针对流程里的关键操作片段开展隔离测试, 像“登录系统”, 像“填写表单”, 像“导出报表”等这些。多个组件于独立的测试环境当中运行, 以此验证其基本功能。
第三层:端到端测试
跑到接近生产环境的测试环境里, 将整个业务流程完整地跑通, 这可不是一般环境兼容性问题的最后一道防线哪, 而是发现环境兼容性问题的最后一道防线!
测试环境搭建是个极难且棘手的问题。RPA测试要求有真实业务系统, 而诸多企业的测试环境不稳, 数据也不完备。一种切实可行的做法是: 于CI流水线里运用容器化技术迅速搭建轻量级模拟环境, 针对不依赖真实数据的流程片段做自动化验证;对于必须连接真实系统的端到端测试, 安排在每日固定时段集中实施。
四、实际操作: 构建一条RPA持续集成与持续交付的流水作业线, 进行4.1技术选型方面的建议阐述。
对于工具链的选用, 是需要去考量团队所具备的技术栈以及运维方面的能力的 在这当中 存在着一套已经历经验证的组合。
4.2 流水线配置示例
这里呈现的是, 以 CI为依托、经简化处理所形成的配置, 它将RPA流水线里具关键性意义的阶段示出了。
stages:
- lint
- test
- build
- deploy
- smoke
# 阶段1:静态检查
lint:
stage: lint
script:
- echo "检查流程脚本语法..."
- python scripts/lint_workflow.py src/
only:
- merge_requests
- develop
- main
# 阶段2:自动化测试
test:
stage: test
script:
- echo "执行单元测试..."
- pytest tests/unit/
- echo "执行组件测试..."
- python scripts/run_component_tests.py
artifacts:
reports:
junit: test-results.xml
only:
- merge_requests
- develop
- main
# 阶段3:构建打包
build:
stage: build
script:
- echo "打包流程应用..."
- python scripts/build_app.py --version=$CI_COMMIT_TAG
- echo "生成应用授权文件..."
- python scripts/generate_license.py
artifacts:
paths:
- dist/
expire_in: 30 days
only:
- tags
# 阶段4:RPA生产环境部署需要经过严格的测试验证。部署到测试环境
deploy_staging:
stage: deploy
script:
- echo "推送应用到测试环境..."
- python scripts/push_update.py --env=staging --app=dist/app.exe
environment:
name: staging
only:
- tags
# 阶段5:冒烟测试
smoke_test:
stage: smoke
script:
- echo "在测试环境执行冒烟测试..."
- python scripts/smoke_test.py --env=staging
only:
- tags
这个配置的关键逻辑在于, 每一次代码提交, 都会启动静态检查以及单元测试, 只有被打标签的版本, 才会迈入构建还有部署阶段, 部署完毕之后将自动开展冒烟测试, 以此保证新版本于测试环境能够正常运作。
4.3 元素定位的自动化维护
RPA流程里, 最容易出现问题的那个环节是元素定位, 网页实施改版、软件进行升级之后, 原来有的XPath(xpath)或者CSS选择器有可能会失效, 传统的做法是手动一个一个地去修复, 效率极其低, 现下存在一些更为智能的解决方案:
在本地进行智能生成元素路径时, 无需手写复杂的XPath(xpath)语法。在此过程里, 工具能够依据页面结构, 自动生成多条候选路径。然后, 开发者从中挑选出最稳定的一条就行。这一方式相比纯手工定位, 效率要高很多, 而且还降低了技术门槛。另外, AI具备智能优化元素路径的功能, 借助自然语言描述, 可直接生成对应的XPath(xpath)表达式, 举个例子, 像“找到登录按钮”这样的描述 , 系统就能自动推导出正确的定位语句, 根本无需学习晦涩难懂的语法。
对于AI辅助元素修复而言, 当出现某个元素定位没用的情况时, 系统能够靠着页面截图以及DOM结构的依据, 发自动去推荐可以替代的方案, 甚至能够直接对定位表达式方面进行修复。该种“元素自愈”的能力非常关键, 对于保障流程稳定性来说, 尤其是在CI/CD流水线当中, 能够明显减少因为页面发生变化而致使测试失败的情况出现。
4.4 多环境配置管理

对RPA而言, 多环境管理属于CI/CD的核心挑战当中的一个, 当RPA流程于不同环境里运行之际, 常常需要去切换登录账号, 切换目标系统地址, 切换文件路径等参数, 将这些值进行硬编码是具有灾难性的, 推荐的做法是:
抽取所有和环境有关的配置, 使其到独立的配置文件里, 在CI/CD流水线当中,借助环境变量或者参数注入正确的配置, 打包的时候, 依据目标环境挑选对应的配置文件。
比如, 于打包导出EXE应用之际, 能够单独去设置API触发地址、定时执行计划等参数, 同一个流程包可适配开发环境、测试环境、生产环境这三种环境, 只需要进行切换配置就行。
五、在RPA CI/CD里的安全跟合规方面, 存在着一个数据不会离开本地的安全模型, 具体为5.1。
RPA机器人时常处理敏感业务数据, 像财务报表、客户信息、交易记录之类。要是流程数据得上传到云端才可执行, 好多企业会担忧数据泄露风险。更具安全性的做法是使流程应用的数据全都存储在用户本地设备上, 不同步至任何服务端。如此即便网络被攻破, 核心数据也不会向外泄露。
有关要分发给外部合作方的流程应用, 进行打包导出的时候可以掺入授权机制, 唯有获授权的设备方可对这个应用进行运行, 未经授权的拷贝会直接予以拒绝对其实行执行, 该应用给予支持加密分享以及分享授权, 发送方能够对接收方的使用权限与有效期加以控制, 这样的机制既便利了分发, 又对知识产权以及数据安全实现, 行了保障。
5.2 内网离线部署
不少企业有着将 RPA 在内网里进行部署的需求情况 , 好多企业的核心业务系统是运行在内网环境当中的 , 没办法连接互联网 , RPA 工具得支持完全离线去使用 , 从流程开发一直到打包部署 , 整个过程都不依赖外部网络 , 这对于金融 、政务等对网络安全有着极高要求的行业来讲是刚需 , 内网离线使用所具备的特性表明数据不会流出本地进行 , 流程应用能够在完全隔离的环境里运行 , 完全杜绝了云端泄露的风险。
5.3 审计与追溯
CI/CD流水线天生就拥有审计的能力, 每一次进行部署的时候, 都有着完备的记录。具体记录包括谁提交了代码, 在什么时候构建的, 部署到了哪些机器上, 运行的结果到底如何。这些日志呢, 对于合规审计以及问题追根溯源来说是相当重要的。建议把流水线日志与机器人运行日志一同收集到日志中心去, 并且保留至少180天。
六、在RPA CI/CD里, AI能力有着深度的应用, 其中6.1部分是大模型对流程开发赋予能量。
RPA流程开发里, 有这么一个高频出现的痛点, 那就是处理非结构化数据, 比如说从扫描件当中提取信息, 识别图片里的文字以及理解自然语言指令, 传统的方案呢, 则是需要集成OCR引擎, NLP模型, 配置起来复杂, 而且效果还参差不齐。
如今能够直接于RPA工具里接入主流大模型, 像是文心一言、豆包、Kimi等。当中, 开发者只要于流程里调用一个AI节点, 便能够达成图片识图、OCR文字提取、智能问答等功能。更为关键的是, AI功能运用用户自行对接各平台API的途径, 费用完全呈现清晰可知而且可控的状态, 使用多少支付多少, 不存在隐藏的通过中间商产生的差价。
6.2 Agent驱动的智能调度
最新型的Agent功能, 使RPA的触发方式, 变得越发灵活起来。借助智能指令, 能在地钉、飞书、企业微信也就是企微、个人微信等常见IM工具内部, 直接操控流程应用的执行。比如说在群里发送一条“@机器人 执行月度对账”, 机器人便会自动启动相应流程, 执行完成后将结果回调通知发送至群里。这种交互方法极大地降低了非技术人员运用RPA的门槛。
在CI/CD场景中,Agent能力可以用于:
6.3 浏览器自动化的新范式
RPA于电商运营场面、数据采集等情景中常常得去操弄浏览器, 只是一般浏览器极易遭到平台辨识作机器人, 进而致使账号被封禁, 指纹浏览器凭借模拟各异的设备指纹用以躲避检测, 已然成了这类情景的标准配备。
市面上主流指纹浏览器, 像紫鸟浏览器、比特浏览器等, 它支持对接, 能够在RPA流程里无缝实现不同浏览器环境的切换, 每个环境都具备独立的缓存以及指纹信息。这在CI/CD测试阶段格外有用, 能在流水线当中并行开展多个浏览器配置的测试, 以此保证流程在各种环境下均可稳定地运行。
七、成本与效益的务实考量7.1 适合谁做CI/CD
并非所有的RPA项目, 都必然需要那种完整的CI/CD流水线。在以下这些情况之下, 是被建议投入资源的:
如果只是临时性的单流程自动化,手动部署反而更轻量。
7.2 成本控制要点
CI/CD自身是存在成本的, 这成本体现在, 包含服务器资源, 工具授权还有运维人力。对于那些寻觅RPA免费工具的个人开发者, 个人工作室或者中小企业而言, 挑选那种没有运行时长限制, 没有流程数量限制的工具是极为重要的。有些平台其免费版具备完整功能, 不对使用时长予以限制, 支持将EXE打包发给他人不必安装客户端, 多设备使用时亦无需额外开通会员, 这些特性对于预算有限的团队是十分友好的。
另外, 存在一个加分项, 那便是支持自定义界面。开发者能够去设计归属于自身的软件界面,将繁杂的RPA流程加以包装, 使之变为简洁且易于使用的桌面应用, 如此一来, 即便是非技术人员也能够轻松上手参与操作。而这种情况对于那些需要向业务部门交付成果的场景而言, 是特别具备实用价值的。
7.3 ROI的量化评估
引入CI/CD后,可以从以下几个维度衡量收益:
八、常出现的问题以及对应的解决办法, 其中Q1是, RPA流程的代码化程度不足, 存在这个情况时该如何将其纳入版本控制呢?
现代RPA工具多数支持RPA无代码这种开发方式, 并且能够将流程导出成结构化文件, 其格式为XML或者JSON。这些以文本形式呈现的文件在本质上来说和Git的管理天然地契合。即使流程图具备可视化特点, 实际上其底层仍是能够被解析的数据结构。关键在于确立规范, 即所有流程变更都得借助Git来提交, 要禁止直接在生产环境里进行修改。
Q2:UI测试不稳定,经常误报怎么办?
A:UI测试的脆弱性是行业难题。几个改善方向:
优先运用稳定的元素定位策略, 其顺序为ID大于Name大于CSS大于XPath(xpath), 加入智能等待机制, 防止固定延时导致的flaky test, 对非关键UI操作采用API替代, 削减UI依赖, 建立测试重试机制, 单次失败不立刻判定为不通过, Q3: 生产环境的RPA机器人怎样监控?
A:建议从三个层面建立监控体系:
流程级: 系统所反馈的每个流程的执行状况、所耗费的时间、达成的成功率, 系统级: 机器人所处机器的中央处理器运用情况、内存占用、磁盘操作、网络连接状态, 业务级: 自动化着手处理的业务数量、出现错误的类型分布情况、异常发出警告的相关信息。
进行监控数据接入操作 , 去设置符合适当情况的告警界限值 , 当出现异常状况的时候 , 借助钉钉或者飞书或者企业微信这几种方式 , 把相关情况告知值班人员。
RPA的CI/CD并非是为了炫耀技术, 而是工程化发展的必然要做出的选择。当机器人数量从3个增长至30个发展变化时, 当部署方式从单环境进入到多环境分发转变时,当从个人对其进行维护演变成团队协作时, 手动操作所产生的成本会呈指数级的速度上升, 并且错误发生率也会随之同步升高。
将RPA视为正规软件工程这般的对待方式, 利用版本控制来对代码予以管理, 借助自动化测试去保障质量, 通过CI/CD流水线来规范交付, 这些于传统软件开发里业已历经无数次验证了的最佳实践, 同样可应用于自动化流程的部署。
当然了, 工具仅仅是手段, 并非目的。挑选契合团队规模以及业务需求的方案, 要比一味一味追求“全栈”更具重要性。于个人开发者跟小团队来讲, 找一个能够打EXE包的工具, 并且它还支持在线更新, 有着无使用时长限制的特点, 再搭配Git这一工具来进行版本管理, 这样子便已然能够解决80%的问题了。
自动化流程的自动化部署,这条路值得走。
WWw.msslke.cN/post/39417.html
WWw.msslke.cN/post/6768.html
WWw.msslke.cN/post/40852.html
WWw.msslke.cN/post/30159.html
WWw.msslke.cN/post/7068.html
WWw.msslke.cN/post/4587.html
WWw.msslke.cN/post/31270.html
WWw.msslke.cN/post/40943.html
WWw.msslke.cN/post/9558.html
WWw.msslke.cN/post/27244.html
WWw.msslke.cN/post/13333.html
WWw.msslke.cN/post/22939.html
WWw.msslke.cN/post/29313.html
WWw.msslke.cN/post/2026.html
WWw.msslke.cN/post/18459.html
WWw.msslke.cN/post/11789.html
WWw.msslke.cN/post/19111.html
WWw.msslke.cN/post/47787.html
WWw.msslke.cN/post/710.html
WWw.msslke.cN/post/45454.html
WWw.msslke.cN/post/7276.html
WWw.msslke.cN/post/19956.html
WWw.msslke.cN/post/45591.html
WWw.msslke.cN/post/8031.html
WWw.msslke.cN/post/9163.html
WWw.msslke.cN/post/20027.html
WWw.msslke.cN/post/40217.html
WWw.msslke.cN/post/32421.html
WWw.msslke.cN/post/18255.html
WWw.msslke.cN/post/24300.html
WWw.msslke.cN/post/13359.html
WWw.msslke.cN/post/38355.html
WWw.msslke.cN/post/36355.html
WWw.msslke.cN/post/14165.html
WWw.msslke.cN/post/34099.html
WWw.msslke.cN/post/17550.html
WWw.msslke.cN/post/35743.html
WWw.msslke.cN/post/31500.html
WWw.msslke.cN/post/47124.html
WWw.msslke.cN/post/12236.html
WWw.msslke.cN/post/32551.html
WWw.msslke.cN/post/23792.html
WWw.msslke.cN/post/14770.html
WWw.msslke.cN/post/42501.html
WWw.msslke.cN/post/34397.html
WWw.msslke.cN/post/19138.html
WWw.msslke.cN/post/40962.html
WWw.msslke.cN/post/14343.html
WWw.msslke.cN/post/20986.html
WWw.msslke.cN/post/39640.html
WWw.msslke.cN/post/16666.html
WWw.msslke.cN/post/5865.html
WWw.msslke.cN/post/26906.html
WWw.msslke.cN/post/26441.html
WWw.msslke.cN/post/17738.html
WWw.msslke.cN/post/38166.html
WWw.msslke.cN/post/39626.html
WWw.msslke.cN/post/29345.html
WWw.msslke.cN/post/24307.html
WWw.msslke.cN/post/23915.html
WWw.msslke.cN/post/37814.html
WWw.msslke.cN/post/22586.html
WWw.msslke.cN/post/31243.html
WWw.msslke.cN/post/4420.html
WWw.msslke.cN/post/40435.html
WWw.msslke.cN/post/35361.html
WWw.msslke.cN/post/22520.html
WWw.msslke.cN/post/41566.html
WWw.msslke.cN/post/9013.html
WWw.msslke.cN/post/28166.html
WWw.msslke.cN/post/47677.html
WWw.msslke.cN/post/6997.html
WWw.msslke.cN/post/31961.html
WWw.msslke.cN/post/10063.html
WWw.msslke.cN/post/45080.html
WWw.msslke.cN/post/21334.html
WWw.msslke.cN/post/47569.html
WWw.msslke.cN/post/39601.html
WWw.msslke.cN/post/22835.html
WWw.msslke.cN/post/10691.html
WWw.msslke.cN/post/45568.html
WWw.msslke.cN/post/25827.html
WWw.msslke.cN/post/34734.html
WWw.msslke.cN/post/7823.html
WWw.msslke.cN/post/15963.html
WWw.msslke.cN/post/34849.html
WWw.msslke.cN/post/1644.html
WWw.msslke.cN/post/17736.html
WWw.msslke.cN/post/33413.html
WWw.msslke.cN/post/47430.html
WWw.msslke.cN/post/31493.html
WWw.msslke.cN/post/7929.html
WWw.msslke.cN/post/47771.html
WWw.msslke.cN/post/32731.html
WWw.msslke.cN/post/32112.html
WWw.msslke.cN/post/10497.html
WWw.msslke.cN/post/29363.html
WWw.msslke.cN/post/14708.html
WWw.msslke.cN/post/18986.html
WWw.msslke.cN/post/42583.html
WWw.msslke.cN/post/43765.html
WWw.msslke.cN/post/24079.html
WWw.msslke.cN/post/11936.html
WWw.msslke.cN/post/19417.html
WWw.msslke.cN/post/21996.html
WWw.msslke.cN/post/19719.html
WWw.msslke.cN/post/10310.html
WWw.msslke.cN/post/28928.html
WWw.msslke.cN/post/23933.html
WWw.msslke.cN/post/13920.html
WWw.msslke.cN/post/43872.html
WWw.msslke.cN/post/11127.html
WWw.msslke.cN/post/41499.html
WWw.msslke.cN/post/30253.html
WWw.msslke.cN/post/23377.html
WWw.msslke.cN/post/3341.html
WWw.msslke.cN/post/21907.html
WWw.msslke.cN/post/34533.html
WWw.msslke.cN/post/35527.html
WWw.msslke.cN/post/17630.html
WWw.msslke.cN/post/8332.html
WWw.msslke.cN/post/2398.html
WWw.msslke.cN/post/43591.html
WWw.msslke.cN/post/45329.html
WWw.msslke.cN/post/20544.html
WWw.msslke.cN/post/16330.html
WWw.msslke.cN/post/18643.html
WWw.msslke.cN/post/46925.html
WWw.msslke.cN/post/31154.html
WWw.msslke.cN/post/33311.html
WWw.msslke.cN/post/40576.html
WWw.msslke.cN/post/169.html
WWw.msslke.cN/post/30969.html
WWw.msslke.cN/post/43717.html
WWw.msslke.cN/post/17428.html
WWw.msslke.cN/post/44873.html
WWw.msslke.cN/post/36339.html
WWw.msslke.cN/post/8169.html
WWw.msslke.cN/post/34676.html
WWw.msslke.cN/post/4266.html
WWw.msslke.cN/post/30743.html
WWw.msslke.cN/post/17784.html
WWw.msslke.cN/post/3189.html
WWw.msslke.cN/post/15381.html
WWw.msslke.cN/post/44285.html
WWw.msslke.cN/post/21318.html
WWw.msslke.cN/post/25298.html
WWw.msslke.cN/post/19027.html
WWw.msslke.cN/post/16210.html
WWw.msslke.cN/post/17238.html
WWw.msslke.cN/post/31166.html
WWw.msslke.cN/post/27897.html
WWw.msslke.cN/post/28682.html
WWw.msslke.cN/post/45693.html
WWw.msslke.cN/post/7431.html
WWw.msslke.cN/post/9955.html
WWw.msslke.cN/post/33436.html
WWw.msslke.cN/post/30632.html
WWw.msslke.cN/post/44757.html
WWw.msslke.cN/post/7033.html
WWw.msslke.cN/post/1482.html
WWw.msslke.cN/post/16959.html
WWw.msslke.cN/post/43826.html
WWw.msslke.cN/post/21167.html
WWw.msslke.cN/post/22504.html
WWw.msslke.cN/post/41603.html
WWw.msslke.cN/post/28955.html
WWw.msslke.cN/post/4657.html
WWw.msslke.cN/post/15036.html
WWw.msslke.cN/post/11385.html
WWw.msslke.cN/post/13487.html
WWw.msslke.cN/post/38172.html
WWw.msslke.cN/post/1077.html
WWw.msslke.cN/post/16273.html
WWw.msslke.cN/post/15286.html
WWw.msslke.cN/post/27556.html
WWw.msslke.cN/post/16942.html
WWw.msslke.cN/post/23257.html
WWw.msslke.cN/post/9653.html
WWw.msslke.cN/post/45835.html
WWw.msslke.cN/post/27084.html
WWw.msslke.cN/post/37335.html
WWw.msslke.cN/post/8798.html
WWw.msslke.cN/post/35488.html
WWw.msslke.cN/post/26091.html
WWw.msslke.cN/post/15882.html
WWw.msslke.cN/post/15535.html
WWw.msslke.cN/post/20898.html
WWw.msslke.cN/post/9823.html
WWw.msslke.cN/post/25345.html
WWw.msslke.cN/post/47859.html
WWw.msslke.cN/post/35439.html
WWw.msslke.cN/post/40215.html
WWw.msslke.cN/post/39415.html
WWw.msslke.cN/post/19725.html
WWw.msslke.cN/post/12820.html
WWw.msslke.cN/post/40673.html
WWw.msslke.cN/post/46473.html
WWw.msslke.cN/post/40030.html
WWw.msslke.cN/post/32636.html
WWw.msslke.cN/post/6180.html
WWw.msslke.cN/post/45393.html
WWw.msslke.cN/post/8959.html
WWw.msslke.cN/post/14333.html
WWw.msslke.cN/post/8995.html
WWw.msslke.cN/post/29927.html
WWw.msslke.cN/post/18995.html
WWw.msslke.cN/post/11970.html
WWw.msslke.cN/post/10473.html
WWw.msslke.cN/post/43426.html
WWw.msslke.cN/post/24218.html
WWw.msslke.cN/post/14731.html
WWw.msslke.cN/post/21332.html
WWw.msslke.cN/post/21891.html
WWw.msslke.cN/post/35726.html
WWw.msslke.cN/post/7822.html
WWw.msslke.cN/post/494.html
WWw.msslke.cN/post/10309.html
WWw.msslke.cN/post/17589.html
WWw.msslke.cN/post/20116.html
WWw.msslke.cN/post/13299.html
WWw.msslke.cN/post/13527.html
WWw.msslke.cN/post/44129.html
WWw.msslke.cN/post/35418.html
WWw.msslke.cN/post/21752.html
WWw.msslke.cN/post/31413.html
WWw.msslke.cN/post/651.html
WWw.msslke.cN/post/45031.html
WWw.msslke.cN/post/24624.html
WWw.msslke.cN/post/23086.html
WWw.msslke.cN/post/3304.html
WWw.msslke.cN/post/28763.html
WWw.msslke.cN/post/12744.html
WWw.msslke.cN/post/5747.html
WWw.msslke.cN/post/42014.html
WWw.msslke.cN/post/7259.html
WWw.msslke.cN/post/5336.html
WWw.msslke.cN/post/842.html
WWw.msslke.cN/post/888.html
WWw.msslke.cN/post/37282.html
WWw.msslke.cN/post/6000.html
WWw.msslke.cN/post/35515.html
WWw.msslke.cN/post/44621.html
WWw.msslke.cN/post/6761.html
WWw.msslke.cN/post/20441.html
WWw.msslke.cN/post/36491.html
WWw.msslke.cN/post/15284.html
WWw.msslke.cN/post/1981.html
WWw.msslke.cN/post/27760.html
WWw.msslke.cN/post/39877.html
WWw.msslke.cN/post/29778.html
WWw.msslke.cN/post/36308.html
WWw.msslke.cN/post/18169.html
WWw.msslke.cN/post/43727.html
WWw.msslke.cN/post/15815.html
WWw.msslke.cN/post/8286.html
WWw.msslke.cN/post/29669.html
WWw.msslke.cN/post/7440.html
WWw.msslke.cN/post/36533.html
WWw.msslke.cN/post/41687.html
WWw.msslke.cN/post/20283.html
WWw.msslke.cN/post/32086.html
WWw.msslke.cN/post/17044.html
WWw.msslke.cN/post/30858.html
WWw.msslke.cN/post/29211.html
WWw.msslke.cN/post/39220.html
WWw.msslke.cN/post/47579.html
WWw.msslke.cN/post/38772.html
WWw.msslke.cN/post/39513.html
WWw.msslke.cN/post/4482.html
WWw.msslke.cN/post/1870.html
WWw.msslke.cN/post/1983.html
WWw.msslke.cN/post/33636.html
WWw.msslke.cN/post/39256.html
WWw.msslke.cN/post/42244.html
WWw.msslke.cN/post/13481.html
WWw.msslke.cN/post/15723.html
WWw.msslke.cN/post/48243.html
WWw.msslke.cN/post/11733.html
WWw.msslke.cN/post/25925.html
WWw.msslke.cN/post/13347.html
WWw.msslke.cN/post/45209.html
WWw.msslke.cN/post/22274.html
WWw.msslke.cN/post/37405.html
WWw.msslke.cN/post/37103.html
WWw.msslke.cN/post/16910.html
WWw.msslke.cN/post/11752.html
WWw.msslke.cN/post/4926.html
WWw.msslke.cN/post/4092.html
WWw.msslke.cN/post/20196.html
WWw.msslke.cN/post/14468.html
WWw.msslke.cN/post/21973.html
WWw.msslke.cN/post/6786.html
WWw.msslke.cN/post/1338.html
WWw.msslke.cN/post/28830.html
WWw.msslke.cN/post/31711.html
WWw.msslke.cN/post/39493.html
WWw.msslke.cN/post/3520.html
WWw.msslke.cN/post/44402.html
WWw.msslke.cN/post/32744.html
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)