新闻详情

新闻详情

首页 / 资讯中心 / 详情

微信小程序+云开发:打造学生知识成果展示平台

发布时间:2026/9/30 8:45:41来源:尧图网络
微信小程序+云开发:打造学生知识成果展示平台
1. 项目动机被十个 PDF 附件逼出来的展示平台1.1 学生成果展示的真实痛点先说个实际场景。临近毕业那阵子我帮一位学弟整理他的求职材料他的简历上写了不少项目经历但面试官想看具体成果时他把课程设计报告、竞赛答辩 PPT、开源项目 的 GitHub 链接、还有各类证书扫描件一口气发了十几个文件过去。结果是邮件被拒收、聊天文件过期、面试官压根没有点开几个沟通成本高得离谱。这事给了我一个很直接的启发学生阶段产出的知识成果并不少课设报告、论文、比赛作品、个人博客、实验笔记全是花了大量时间做出来的东西但展示形式非常落后。要么堆在网盘里要么散落在各个平台既没有统一入口也没有良好的阅读体验。做一个学生知识成果展示平台本质上就是要解决成果的聚合与呈现问题把分散的文档、图片、链接收拢到一个微信小程序里访客扫码就能看点开就能读转发即分享。所以这个项目的定位很明确它是学生的个人作品集门户不是社交平台。不搞关注、粉丝、评论只做两件事——展示和传播。这个定位直接决定了后面的功能裁剪、数据表设计甚至页面数量也是我把项目控制在一个学生能独立完成、可以复现的规模的关键。1.2 功能清单与边界一个完整的源码文档调试交付项目功能不能贪多但要形成闭环。我最终裁剪出的功能清单如下模块功能说明成果列表瀑布流卡片、下拉刷新、上拉加载首页信息流按时间或浏览量排序分类筛选标签栏 搜索框支持按成果类型、关键词过滤成果详情富文本正文、附件展示、浏览量统计文档直接在线预览成果发布表单填写、封面上传、文档上传管理员或本人登录后使用个人中心头像昵称、成果统计、我的发布基于微信登录态管理能力编辑、删除、置顶限定操作者本人我刻意没有加入评论点赞、私信聊天、多角色后台系统、消息推送。原因很简单——这些功能会快速撑爆代码量和数据模型复杂度让项目从可复现的毕设/课设项目变成需要团队的商业项目。对于大多数准备拿这个项目做课设、毕设或者面试作品的人来说功能闭环完整、代码结构清晰、文档能带人复现比功能堆砌更有价值。2. 技术方案拆解原生小程序 云开发2.1 原生还是 uniapp我为什么这么选技术选型是写代码之前必须先回答的问题。现在主流的两个方向是微信小程序原生开发和 uniapp 跨端开发我最终选了原生小程序 微信云开发具体理由有三个方面。第一项目的核心场景是微信内打开即用。原生小程序天然贴近微信生态接口调用、登录态、云开发集成度最高不需要中间层转换。如果选 uniapp虽然能同时输出 Android、iOS、鸿蒙 App但那些端侧的产物对这个项目而言是多余的——目标用户并不需要安装一个独立 App 来看作品集。第二排查和调试的成本。原生小程序的报错栈、调试工具、官方文档匹配度是跨端框架比不了的。作为交付型项目调试环节的顺畅程度直接影响使用者的体验。uniapp 跑在微信里还得经过一层编译某些兼容问题比如 canvas 绘图、web-view 交互排查起来更费劲。第三云开发带来的免运维红利。微信云开发把数据库、云存储、云函数三件套做进了小程序体系里开发者不需要自己租服务器、配域名、处理 HTTPS 证书。学生项目最怕的就是代码写完了部署一卡好几天云开发直接把这条硬路绕过去了。当然 uniapp 也有它的价值如果你明确要求一套代码同时发布到多个平台或者你已经有 Vue 3 的项目基础选 uniapp 完全合理。但就学生知识成果展示平台这个场景来说原生方案的性价比明显更高。2.2 云开发解决了什么云开发提供的三个核心能力恰好对应了项目三块硬骨头云数据库它提供的是一个 JSON 文档型数据库集合概念适合存成果记录。比如一条成果记录里有标题、标签数组、富文本内容、附件文件ID列表这些都是天然的 JSON 结构不需要在建表阶段强行拆成关系型模式。云存储用来放封面图和文档文件。上传后拿到 fileID形如cloud://demo-env.xxx/achievements/xxx.pdf可以生成临时链接供前端打开。我实测下来单个文件限制 100MB 以内对于课程设计报告、PDF 论文来说是绰绰有余的。云函数把敏感操作比如登录鉴权、成果删除、浏览量自增放到服务端执行避免在前端直接操作数据库引起越权。同时云函数天然具备 HTTPS 网关调用方是wx.cloud.callFunction不用处理跨域和域名白名单。这里有一个常被忽略的好处云开发环境支持本地调试云函数。在开发者工具里可以对云函数做模拟调用传一个假 event 进去直接看返回结果不用每次都从界面上触发。这个特性在调接口逻辑的时候非常省事。2.3 数据表设计与权限边界数据模型我设计了两个集合刻意没有做得太复杂achievements 集合成果记录字段类型说明_idstring自动生成_openidstring发布者的微信 openid默认写入titlestring成果标题abstractstring一句话摘要列表页展示tagsarray标签如 [课程设计, 前端]coverstring封面图 fileIDcontentstring富文本正文用于详情页渲染attachmentsarray附件列表含 fileID、名称、大小viewCountnumber浏览量详情页自增statusnumber0 草稿1 已发布2 置顶createdAt / updatedAtdate时间戳users 集合用户资料字段类型说明_openidstring唯一标识nickName / avatarstring微信资料introstring个人简介achievementCountnumber成果数冗余字段省一次聚合查询权限模型我用的是基于 _openid 的归属校验。云函数里读取cloud.getWXContext().OPENID跟记录里的_openid比对只有本人可以修改和删除。云数据库权限设置为仅创建者可读写前端读取走云函数统一放行这样既保证访客能看列表又封死了越权操作的路径。提示不要图省事把数据库权限设为所有用户可读虽然开发期方便但一旦上线任何拿到小程序的人都能绕过云函数直接读取或篡改数据。这是学生项目中非常常见的安全隐患。3. 核心功能实现从列表到详情再到发布3.1 成果信息流列表查询与分页列表页是整个平台的门面。首页加载逻辑必须快所以在云函数getAchievements里做了分页、筛选和排序三个动作。分页方案我用的是最稳的页码 每页条数而不是游标分页。原因是成果数据量在个人场景下不会超过几千条skip((page - 1) * pageSize)的性能开销完全可以接受。游标分页虽然在大数据量下更优但对学生项目反而增加了前端状态管理的复杂度。// cloudfunctions/getAchievements/index.js const cloud require(wx-server-sdk) cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db cloud.database() exports.main async (event) { const { page 1, pageSize 10, tag , keyword } event const where {} // 只展示已发布的内容 where.status 1 if (tag) where.tags tag if (keyword) { where.title db.RegExp({ regexp: keyword, options: i }) } const countRes await db.collection(achievements).where(where).count() const res await db.collection(achievements) .where(where) .orderBy(createdAt, desc) .skip((page - 1) * pageSize) .limit(pageSize) .get() return { list: res.data, total: countRes.total, hasMore: (page - 1) * pageSize res.data.length countRes.total } }一个容易踩的细节是云数据库默认单次最多返回 20 条即使你limit(100)也只给 20 条。所以在云函数里我把pageSize控制在 10配合hasMore字段让前端判断是否继续加载从机制上绕开这个限制。前端列表的渲染注意不要直接用云函数返回的整个数组去setData。我在数据层做了一个字段裁剪只保留卡片需要的_id、title、abstract、cover、tags、viewCount、createdAt把content这类大字段留在详情接口里取这样列表页的数据包能小三分之一首屏渲染会明显更快。3.2 详情页与文档打开详情页承担看成果内容的核心任务。进入页面时调用getAchievementDetail云函数一次性返回完整记录。这个函数里我还做了一件事浏览量自增。它的实现有个顺序问题——如果先自增再查询用户看到的 viewCount 会比实际值少一次如果先查询再自增则总数会滞后。我采用查询后立即异步自增不阻塞返回的方式// cloudfunctions/getAchievementDetail/index.js exports.main async (event) { const { id } event const db cloud.database() const doc db.collection(achievements).doc(id) const res await doc.get() // 不 await避免让用户等待 doc.update({ data: { viewCount: db.command.inc(1) } }).catch(() {}) return res.data }文档在线预览是知识成果展示里含金量最高的一环。微信小程序原生提供了一个wx.openDocumentAPI可以直接打开 PDF、Word、Excel 等文件。前提是拿到可访问的文件链接。云存储的 fileID 不能直接丢给openDocument要先通过wx.cloud.getTempFileURL换取临时 HTTPS 链接有效期是 2 小时基本够用。// 前端打开附件 async function openAttachment(fileID) { const res await wx.cloud.getTempFileURL({ fileList: [fileID] }) const url res.fileList[0].tempFileURL wx.openDocument({ filePath: url, fileType: pdf, showMenu: true, // 右上角更多菜单支持转发/保存 success: () console.log(打开成功) }) }这里有个实际使用中很容易踩的坑openDocument在小程序里通过 filePath 传入网络 URL 在某些基础库版本上可能不生效尤其是 iOS 端。稳妥做法是先用wx.downloadFile下载到本地临时文件再传本地路径给openDocument。我后来统一封装了downloadAndOpen工具函数实测在 iOS 和 Android 上都能正常工作。3.3 发布/编辑成果的关键细节发布页是把成果录入平台的核心入口。它由一组表单控件构成标题输入框、摘要输入框、分类选择器我用原生的 picker 模式、标签编辑、封面选择以及富文本内容区。富文本这块我要多说一句。小程序原生没有富文本编辑器组件如果一定要在线编辑通常引入第三方editor组件但它的边界线多、兼容性成本不低。对这个项目我用的是textarea 输入 文本格式化方案发布者按 Markdown 语法在文本框里写正文后端用一个轻量解析函数把 Markdown 转成 HTML 字符串存库详情页用rich-text组件渲染。结构简单依赖少学生在本地写完笔记直接粘贴发布体验反而更顺畅。封面上传使用wx.chooseMedia选图再通过wx.cloud.uploadFile传至云存储。这里有一个文件路径命名的建议按achievements/年月日/openid-随机串.扩展名组织。这样云存储控制台里不会变成一锅粥清理过期文件也方便。附件上传同理但要注意文件大小校验。我在前端选完文件后就做了size 100MB拦截后端云函数checkAchievementData再校验一次扩展名白名单避免有人传可执行文件进来。3.4 搜索与标签筛选搜索和标签筛选共用同一个云函数getAchievements只是参数不同。标签筛选走where.tags tag这里有一个数据格式的坑如果你的字段tags是数组类型并且你要查单标签正确写法是where.tags tag不要写where.tags db.command.in([tag])后者是字段值等于数组的元素时匹配数组整体语义完全不同。搜索我用的是正则表达式db.RegExp可以实现标题包含关键词的模糊匹配。这个方案在小数据量下没有问题但要注意正则查询不走索引数据过万条后会有性能衰减。如果未来要扩展搜索能力可以接入云开发的简易全文检索能力或者改用cmd.exists搭配分词字段但当前规模的展示平台完全没有必要。前端页面我会在导航栏下面放一行横向滚动的标签栏支持全部 / 课程设计 / 论文 / 竞赛 / 开源 / 其他六类首页输入框做搜索跳转关键词用url参数带过去。这样实现下来用户从进入首页到找到目标成果不会超过两次点击。4. 源码结构文件怎么组织才不混乱4.1 目录结构与职责划分一个交付级的项目源码目录的整洁程度决定了评审老师或面试官对你的第一印象。我的目录结构如下project/ ├── cloudfunctions/ │ ├── login/ # 登录写入用户资料 │ ├── getAchievements/ # 成果列表含分页/搜索/筛选 │ ├── getAchievementDetail/# 成果详情 浏览量自增 │ ├── saveAchievement/ # 新建 编辑合并成一个接口 │ ├── deleteAchievement/ # 删除校验 _openid │ └── checkUpload/ # 上传前校验 ├── miniprogram/ │ ├── app.js # 云环境初始化、全局登录态 │ ├── app.json # 页面注册、tabBar 配置 │ ├── app.wxss # 全局样式变量 │ ├── pages/ │ │ ├── index/ # 成果列表页 │ │ ├── detail/ # 成果详情页 │ │ ├── publish/ # 发布/编辑页 │ │ └── mine/ # 个人中心页 │ ├── components/ │ │ ├── achievement-card/# 成果卡片列表复用 │ │ └── tag-filter/ # 分类标签栏 │ └── utils/ │ ├── cloud.js # 云函数调用封装 │ ├── format.js # 日期/浏览数格式化 │ └── file.js # 上传、下载、打开文件的封装 ├── docs/ │ ├── README.md # 项目总览 │ ├── DESIGN.md # 设计文档 │ ├── API.md # 接口文档 │ └── DEPLOY.md # 部署文档 └── project.config.json # 开发者工具项目配置页面只有四个组件只有两个云函数只有六个。这个规模的代码量大概是 2500 行上下一个学生花两三周就能完全吃透。如果目录膨胀到十几个页面、二十几个云函数那不叫超全叫劝退。4.2 请求封装与鉴权云函数调用如果不封装页面里会写大量重复的样板代码。我在utils/cloud.js里做了统一封装// miniprogram/utils/cloud.js function callFunction(name, data {}, options {}) { if (!wx.cloud) { wx.showToast({ title: 当前微信版本过低, icon: none }) return Promise.reject(new Error(cloud not supported)) } const showLoading options.loading ! false if (showLoading) wx.showLoading({ title: 加载中, mask: true }) return wx.cloud.callFunction({ name, data }) .then(res { if (res.result res.result.code ! 0) { wx.showToast({ title: res.result.message || 请求失败, icon: none }) return Promise.reject(res.result) } return res.result }) .finally(() { if (showLoading) wx.hideLoading() }) } module.exports { callFunction }相邻配套的是登录态管理。我在app.js的onLaunch里做一次静默登录调用login云函数把用户的 openid、昵称、头像写入users集合。前文说过了cloud.getWXContext().OPENID是从上下文直接拿的不需要前端传参这能最大程度防止有人伪造身份。鉴权关键点在saveAchievement和deleteAchievement云函数里永远不要信任前端传来的 openid。代码如下// cloudfunctions/deleteAchievement/index.js exports.main async (event) { const { id } event const { OPENID } cloud.getWXContext() const db cloud.database() const doc await db.collection(achievements).doc(id).get() if (!doc.data) return { code: -1, message: 内容不存在 } if (doc.data._openid ! OPENID) { return { code: -2, message: 无权操作 } } await db.collection(achievements).doc(id).remove() return { code: 0 } }4.3 可复用的核心组件构建列表页时我抽了achievement-card组件。卡片展示封面、标题、摘要、标签、浏览量和时间详情页跳转通过bindtap事件向外抛。组件化的意义在于首页列表和我的成果列表复用了同一套卡片改样式只改一处。!-- components/achievement-card/index.wxml -- view classcard bindtaponTap image classcard-cover src{{cover}} modeaspectFill lazy-load / view classcard-body view classcard-title{{title}}/view view classcard-abstract{{abstract}}/view view classcard-tags view wx:for{{tags}} wx:key*this classtag{{item}}/view /view view classcard-meta text{{viewCount}} 次浏览/text text{{createdAt}}/text /view /view /view// components/achievement-card/index.js Component({ properties: { achievement: { type: Object, value: {} } }, methods: { onTap() { this.triggerEvent(cardtap, { id: this.data.achievement._id }) } } })这里有个经验卡片封面一定加lazy-load。列表页一次性渲染 10 张封面图不加懒加载的话图片会抢占首屏带宽卡片文字半天出不来。5. 调试经验从编译报错到真机预览5.1 调试工具的正确用法微信开发者工具提供的调试能力很多同学只用到了一个编译按钮这是很可惜的。我把调试流程分成四个阶段每个阶段用不同的工具阶段一代码逻辑调试。在pages/index/index.js里打断点或者写debugger语句然后用开发者工具的 Sources 面板单步执行。这个面板能直接看到this.data里每个变量的状态转换。我一般会在云函数返回数据和setData之后各打一个断点确认数据链路是否完整。阶段二数据状态调试。打开调试器的 AppData 面板这里能实时查看和修改当前页面的data。比如页面渲染不出来时我会直接手动把list改成一条测试数据马上就能判断问题是出在数据没回来还是渲染写错了。这个面板还支持直接修改数组值省去了反复刷新页面的时间。阶段三网络与请求调试。Network 面板可以看到wx.cloud.callFunction的请求耗时和返回内容。如果云函数返回了错误信息这里的错误堆栈比 Console 面板更完整。我遇到过云函数一直返回-501000之类的环境错误就是从 Network 面板里定位到是环境 ID 配到了默认环境导致的问题。阶段四真机预览调试。工具里的模拟器跟真实手机有差异尤其是底部安全区、机型适配、文件打开这几个场景必须真机测。用真机调试 2.0模式手机和开发者工具会保持连接手机端的 console 日志会同步到工具里一旦出 bug 我能带回完整的调用栈。5.2 我踩过的 5 个坑及排查链路这个项目调试过程中我记录的五个问题都属于不测不知道的类型这里详细复盘一下排查思路比直接给结论更有用。坑一云函数返回了数据但页面空白。排查链路先打开 Console发现没有报错再看 AppDatalist数组为空然后在云函数调用处断点发现返回结果是{code: 0, list: [...], total: 12}但响应的字段是res.result.list我的代码写成了res.result.data.list。这类字段层级问题在 AppData 面板里一眼就能看出来。坑二真机预览时封面图裂开工具里却正常。排查链路工具模拟器默认会用本地 localhost 代理资源真实手机没有这个代理所以凡是依赖本地路径或未处理 fileID 的图片都会裂。根本原因是封面字段存的是云存储 fileID但image组件不能直接吃 fileID必须经过getTempFileURL转成临时链接。我在achievement-card组件里加了一个fileIDToUrl的方法统一处理一次性解决了列表页和详情页的图片问题。坑三wx.openDocument在 iOS 真机上打不开 PDF。排查链路先用条件编译思路排查是不是 fileType 的问题传fileType: pdf试过不行怀疑是网络 URL 不被openDocument支持改成先wx.downloadFile拿本地路径再打开问题解决。最终封装在utils/file.js里Android 和 iOS 统一走下载再打开的路子。坑四云函数偶发超时。排查链路日志里报Function timed out查看调用链发现是详情页云函数里db.collection(achievements).doc(id).update()自增浏览量与doc.get()没有先后关系当并发高时更新操作排队导致超时。解决方法是把浏览量自增改成在 get 之后的异步操作用catch兜底失败同时把云函数超时时间从默认 3 秒调大到 10 秒。坑五发布表单里分类选择器的值对不上。排查链路页面里用了picker的index去映射分类名结果自定义标签的数组顺序和 picker 数组顺序不一致导致保存时写入错误 tag。最后我固定用OBJECT类型数组维护分类配置索引只从数组里取不单独维护一个字符串数组从源头上消灭了不同步问题。5.3 性能优化首屏、分包、缓存这个项目虽然数据量不大但体验流畅是基本功。我在三个层面做了优化首屏加载列表页首次进入时我会先发起一个轻量云函数getAchievements只拉第一页 10 条数据同时从云数据库的cache集合读取上一次的缓存列表直接渲染两者合并成秒开效果。具体策略是本地缓存cacheKey achievements_page_1设置wx.setStorageSync过期时间设定为 5 分钟。网络返回新数据后对比updatedAt有变化才更新缓存。分包加载发布页用到的编辑器逻辑和上传工具相对独立我把publish页面单独放进了subpackages主包体积小了 30% 左右。小程序主包限制是 2MB不分包的话图片类静态资源很容易压线。// app.json 中的分包配置 { subpackages: [ { root: pages/publish, pages: [index] } ] }注意分包的 root 是路径目录且主包不能引用分包里的资源组件也要按分包归置。列表缓存utils/cache.js里封装了读取缓存 - 更新时间 - 失效判断的逻辑。我认为学生项目里最值得借鉴的其实是这套思路它不新、不复杂但能让 demo 从能跑变成好用。6. 交付文档怎么写源码以外同样重要6.1 项目文档五件套很多人交付项目只给源码和一句下载后导入微信开发者工具就能跑这远远不够。包括源码文档调试里的文档我分了五个文件各有分工README.md一页纸讲清楚项目是什么、有哪些功能、技术栈、快速启动步骤。这是评审老师第一眼看的文件务必写得清爽。DESIGN.md设计文档包含数据表结构、页面功能清单、核心流程图文字版以及技术选型理由。API.md接口文档逐个列出云函数的入参、出参、错误码。别人接手项目时主要就看这份文件。DEPLOY.md部署文档从注册小程序账号讲到云环境初始化。每一步都要写到点击哪个按钮的粒度。DEBUG.md调试记录把我踩过的五个坑和解决方式都写进去方便后来者少走弯路。文档不是写给老师看的摆设它本质上是面向接手这个项目的人的交接说明。如果你自己三个月后回来看代码都能忘掉一半逻辑文档的价值就体现在这里了。6.2 部署文档实操示例以部署云函数为例我的 DEPLOY.md 里会写这么一段操作流程打开微信开发者工具用测试号或自己的 AppID 导入项目。在工具栏点击云开发开通云开发并创建环境记下环境 ID。修改miniprogram/app.js中的cloud.init({ env: 你的环境ID })。在云开发控制台创建achievements和users两个集合。对cloudfunctions目录下的每个云函数文件夹右键选择上传并部署云端安装依赖。部署完成后在云开发控制台的云函数列表里找到login配置好触发器或者直接点击测试确认返回{ code: 0 }。编译小程序进入首页即可看到初始化数据。每一步后面我都会附上预期结果和失败排查两行比如如果测试云函数报环境错误检查是否在云函数里加了cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })。这样写的好处是一个完全没碰过云开发的人照着文档走 20 分钟也能把环境跑起来。项目交付后收到按文档部署成功的反馈比什么都值钱。个人体会关于展示平台的最后一公里做完这个项目再回头看我发现学生知识成果展示平台这类需求真正的难点不在技术而在内容形态的组织。技术上的列表、详情、发布、权限都是被反复写过无数次的模式但怎么让学生愿意把成果沉淀到这个平台上来需要一个足够低的上传门槛和一个足够好的阅读体验。我实际使用中体会最深的是两个小设计一是附件预览的流程优化从openDocument到下载后的打开这个链路顺不顺直接影响使用意愿二是列表页的缓存策略老用户第二次打开几乎无感受访者的第一反应是好快。这两点都不复杂但对体验的提升是决定性的。最后分享一个后续扩展方向这套代码稍加改造就可以从个人成果展示升级成班级/社团/实验室的作品集大厅。做法是给achievements集合增加一个groupId字段在查询云函数里按groupId过滤再做一个可分享的管理页给管理员分配发布权限。功能量增加不大但使用场景一下子宽了很多。如果你正准备拿这个项目去交付课程设计或面试作品我的建议是先把部署文档跑通一遍再把自己的真实成果录入进去最后在真机上录一段操作视频。一个能现场演示、文档完备、代码干净的项目比任何空谈概念的描述都有说服力。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

WorkBuddy AI编程助手5条高效提示词模板:覆盖项目初始化、代码审查、Bug定位、重构与文档生成 2026/9/30 9:34:47

WorkBuddy AI编程助手5条高效提示词模板:覆盖项目初始化、代码审查、Bug定位、重构与文档生成

1. 为什么这5条提示词值得单独拎出来讲WorkBuddy 这类 AI 编程助手,很多人装完就开始用,结果发现输出质量忽高忽低——同一个需求,有时候一遍过,有时候来回改七八轮还是不对味。问题往往不在模型本身,而在于你给它的指…

阅读更多 →
[通信与计算Adv]链路/系统/网络仿真02:SimPy:基于Python 离散事件仿真指南 2026/9/30 9:34:41

[通信与计算Adv]链路/系统/网络仿真02:SimPy:基于Python 离散事件仿真指南

SimPy:Python 离散事件仿真指南 概念、建模方法、实例与实践建议 1. SimPy 简介 SimPy 是一个基于 Python 的离散事件仿真框架,适合描述那些在离散时间点 发生重要变化的系统。例如,客户到达、机器故障、服务完成、车辆移动以及 库存补充等,都可以作为离散事件进行建模。…

阅读更多 →
【第 1 章】WorkBuddy 从入门到高手 2026/9/30 9:34:40

【第 1 章】WorkBuddy 从入门到高手

WorkBuddy 从入门到高手(第 2 章):基础技能,练会「会问、会改、会管」(超详细案例版) 这是一套面向「完全没用过 WorkBuddy」读者的系统学习路线,总共 7 章。本文是第 2 章。 系列目录&#xff…

阅读更多 →
LLM驱动游戏玩法:从收权到放权的Agent架构实践 2026/9/30 9:34:40

LLM驱动游戏玩法:从收权到放权的Agent架构实践

1. 从“收权”到“放权”:一个游戏主循环的架构演变第一次把 LLM 塞进游戏主循环的时候,我犯了一个很典型的错误:把 LLM 当成了“万能决策器”。玩家输入一句话,我直接把整段游戏状态序列化丢给模型,让它返回下一步动作…

阅读更多 →
从林月如的气剑指看 ABAP 批量业务处理 2026/9/30 9:34:33

从林月如的气剑指看 ABAP 批量业务处理

财务团队打开逾期应收清单时,面对的往往不是一张需要处理的单据,而是同一家公司的几百张未清项。我们希望按下一次按钮,系统就能找出符合条件的记录,分别判断风险,并把结果交给后续流程。这个画面很容易让人想到林月如的气剑指,指尖发力,剑气同时触及多个目标。 《仙剑…

阅读更多 →
【学前准备】WorkBuddy 从入门到高手 2026/9/30 9:34:32

【学前准备】WorkBuddy 从入门到高手

WorkBuddy 从入门到高手(第 0 章):学前准备,别急着自动化 这是一套面向「完全没用过 WorkBuddy」读者的系统学习路线,总共 7 章,从学前准备一直讲到团队落地治理。本文是第 0 章——最容易被跳过、却最影响…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉