尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Vue+Spring Boot实战:个性化图书推荐评分系统设计与实现
前阵子有个做毕业设计的朋友跑来问我说想做一个“图书推荐评分系统”但又不想做成那种满屏都是CRUD的“管理系统”。他给我看了个标题——vue基于springboot的个性化阅读图书推荐评分系统的设计与实现。我说这题我会而且这题目非常有代表性既有常规业务系统的数据管理部分又带一点推荐算法的“智能感”放在简历和作品集里比单纯的图书管理系统能打太多。这篇文章我就按这个项目标题来拆把我在类似项目里踩过的坑、验证过的方案、以及真正能让推荐结果看起来“智能”的细节全部分享出来。不管你是准备做毕设还是想搞一个自己的个人项目这篇文章给出的思路和代码骨架你都可以直接参考。1. 项目定位与技术选型思路先搞清楚这个项目到底要解决什么问题。它叫“个性化阅读图书推荐评分系统”关键词拆开看是三个图书、评分、个性化推荐。图书是业务对象评分是用户行为个性化推荐是核心亮点。很多同学看到“个性化推荐”就想去搞协同过滤、搞深度学习模型但我建议你不要一上来就上重武器。这个系统的本质是一个带推荐逻辑的业务系统不是算法研究项目。你要做的是在一个结构清晰的Vue Spring Boot应用里把推荐功能做成一个看得见、用得上、效果合理可解释的模块。技术选型上前端Vue 后端Spring Boot是国内这类项目最成熟、资料最全的组合没有之一。Vue负责页面交互和状态管理Spring Boot负责提供REST接口和业务逻辑MySQL存数据Redis做缓存和热点数据加速。这套组合的好处是每层职责清楚出了问题好排查网上可参考的项目和资料巨多部署也简单前端打包成静态文件丢Nginx后端打成jar包就能跑。有人会问推荐算法要不要用Python写分开做服务和Java调接口行不行我的建议是如果只是为了这个项目不要引入Python服务。否则你得维护两个服务、处理跨语言调用、考虑部署环境差异复杂度直接翻倍。用Java在Spring Boot里实现一个简化版的协同过滤或者基于内容的推荐完全够用而且更容易让面试官看懂你的代码逻辑——毕竟你的核心卖点是“完整落地了一个系统”而不是“调了一个库”。1.1 为什么选Vue而不是其他前端框架这个项目的前端部分我用的是Vue 3 Vite Element Plus Pinia。选Vue 3的原因很简单组合式API让代码组织更清晰响应式系统更高效Vite启动速度比Webpack快一个量级开发体验好太多Element Plus的组件库对后台管理类页面覆盖得非常好表格、表单、分页、弹窗全都现成。Vite创建项目也很快npm create vitelatest book-recommend-web -- --template vue cd book-recommend-web npm install element-plus pinia axios vue-router这套组合的学习成本低遇到问题社区里答案一搜就是一堆。而且对用户来说Vue的单文件组件写法非常直观——模板、脚本、样式放一个文件里配合组合式API的ref、computed、watch做图书列表、评分弹窗、推荐书单这类交互页面几乎没什么心智负担。1.2 为什么后端选Spring BootSpring Boot选它核心原因是“约定优于配置”的开发体验。你用Spring Initializr生成项目骨架勾上Spring Web、MyBatis-Plus、MySQL Driver、Redis就能直接开写接口了。内置Tomcat打包后java -jar就能跑对个人项目极其友好。我建议用MyBatis-Plus而不是手写MyBatis XML。这个项目里的数据操作不算复杂MyBatis-Plus的单表CRUD、分页插件、Wrapper条件构造器能省掉大量重复的SQL代码。尤其是后面做推荐查询时要根据用户ID、分类、评分等条件动态拼SQL用LambdaQueryWrapper写起来是真的顺手。2. 系统整体架构与数据库设计这个系统我按常见的三层结构来组织前端展示层、后端业务层、数据存储层。三层之间通过RESTful API通信用JSON传递数据。不要引入太复杂的微服务架构——单机单体就够了。后端项目结构我建议拆成controller、service、mapper、entity、common五个包。common放统一返回结果、异常处理、工具类controller只做参数接收和结果返回service写业务逻辑mapper访问数据库。这样层与层之间边界清晰就算项目规模变大也不会乱成一锅粥。前端页面按功能拆成这些视图登录注册页、首页推荐书单/热门图书、图书列表页带搜索和分页、图书详情页含评分和评论、个人中心我的评分、偏好设置、后台管理页图书管理、用户管理、评论管理。如果你不需要后台管理可以省掉但建议保留一个简单的管理页因为毕设答辩和作品展示时“有完整闭环”比“只有一个前台”要加分得多。2.1 数据库表设计的关键细节数据库是这种系统的地基。我设计的是六张核心表表结构上重点考虑了三件事评分数据怎么高效查、推荐结果怎么算得快、用户行为怎么留痕迹。第一张是用户表t_user字段包括id、username、password记得加密存储用BCrypt、nickname、avatar、preferred_categories偏好分类用逗号分隔的字符串以及创建时间、更新时间。加一个preferred_categories字段很有用后面做冷启动推荐时直接用它匹配图书分类比冷冰冰的“大家都在看”更有个性化感觉。第二张是图书表t_book包含id、title、author、publisher、isbn、category、cover_url、description、publish_date、avg_rating平均分、rating_count评分人数。avg_rating和rating_count这两个冗余字段非常关键它们能让热门榜单和详情页展示不用实时聚合评分记录性能好很多。第三张是评分表t_rating字段是id、user_id、book_id、score、comment、create_time。这里要加一个联合唯一索引(user_id, book_id)保证一个用户对一本书只能评一次分。这个约束不加上后面做评分更新逻辑时会出一堆脏数据。第四张是评论表t_comment字段和评分表类似但允许一条书评对应多个评论。第五张是推荐结果表t_recommendation我后面细说。第六张是用户行为日志表t_user_behavior记录用户浏览、收藏、搜索行为为推荐算法提供原始数据。2.2 后端接口设计规范接口设计上我坚持一个原则返回结构统一。所有接口都返回ResultT对象结构是code、message、data三个字段。code为200表示成功400表示参数错误401表示未登录500表示服务器异常。前端拿到响应后先判断code再取数据逻辑非常干净。核心接口我列一下GET /api/books分页查询图书列表支持按标题、分类、作者搜索GET /api/books/{id}图书详情同时返回平均分、我的评分、相关推荐POST /api/rating提交评分新增或更新GET /api/recommend/user/{userId}获取个性化推荐列表GET /api/recommend/hot获取热门图书榜POST /api/auth/login、POST /api/auth/register登录注册这里特别说下POST /api/rating的设计。它接收userId、bookId、score、comment四个参数内部逻辑是先查t_rating表有没有记录——有就更新没有就插入。同时更新t_book表的avg_rating和rating_count字段。注意这个更新操作要用事务包起来否则评分提交后图书榜数据可能不一致。3. 个性化推荐引擎的实战实现这是整个项目最核心、也最容易讲出彩的部分。我实现的推荐引擎分两个策略基于用户的协同过滤UserCF和基于内容偏好的冷启动推荐。平时在线服务用的是UserCF新用户或数据稀疏时走偏好推荐。两种策略的结果合并后统一写入t_recommendation表前端直接从这张表取数据。先说UserCF的思路。它分三步第一找相似用户第二根据相似用户找候选图书第三用评分加权排序。听起来挺简单但每一步都有讲究。计算用户相似度我用的公式是余弦相似度。先根据t_rating表构建“用户-图书评分矩阵”然后计算两个用户向量的夹角余弦值。分值越接近1说明两个用户的阅读口味越像。但这里有个问题——如果两个人都只评过一本书相似度可能虚高。我的处理办法是只有共同评分图书数量大于等于2的用户才参与相似度计算。这样过滤掉了大量噪声。找到最相似的K个用户后我取K10从这K个用户评过分的图里排除当前用户已经评过的剩下的作为候选集。然后对候选图书打分公式是预测评分 相似用户评分的加权平均权重就是相似度值。最后按预测评分降序取前20本存入t_recommendation表。3.1 协同过滤的Spring Boot实现方案我知道看到上面这堆公式有人会问这代码怎么写其实核心逻辑并不长。我用了一个定时任务每半小时跑一次全量推荐计算把每个用户的结果都提前算好存表。这样前端请求推荐接口时响应速度极快不会有实时计算的卡顿感。核心代码如下// 简化版的UserCF基于共同评分用户计算相似度 public ListBookRecommendation recommendForUser(Long userId) { // 1. 查出所有评分记录 ListRating allRatings ratingMapper.selectList(null); MapLong, MapLong, Integer userBookMap buildUserBookMap(allRatings); // 2. 找出与当前用户有共同评分图书的其他用户 MapLong, Integer currentUserRatings userBookMap.get(userId); MapLong, Double similarityMap new HashMap(); for (Long otherUserId : userBookMap.keySet()) { if (otherUserId.equals(userId)) continue; MapLong, Integer otherRatings userBookMap.get(otherUserId); SetLong commonBooks new HashSet(currentUserRatings.keySet()); commonBooks.retainAll(otherRatings.keySet()); if (commonBooks.size() 2) continue; // 过滤共同评分过少的用户 double similarity cosineSimilarity(currentUserRatings, otherRatings, commonBooks); similarityMap.put(otherUserId, similarity); } // 3. 取TopK相似用户 ListMap.EntryLong, Double topUsers similarityMap.entrySet().stream() .sorted(Map.Entry.Long, DoublecomparingByValue().reversed()) .limit(10) .collect(Collectors.toList()); // 4. 候选图书加权打分 MapLong, Double predictScores new HashMap(); for (Map.EntryLong, Double entry : topUsers) { Long otherUserId entry.getKey(); double sim entry.getValue(); for (Map.EntryLong, Integer rating : userBookMap.get(otherUserId).entrySet()) { if (currentUserRatings.containsKey(rating.getKey())) continue; predictScores.merge(rating.getKey(), sim * rating.getValue(), Double::sum); } } // 5. 排序取前20封装成推荐记录 return predictScores.entrySet().stream() .sorted(Map.Entry.Long, DoublecomparingByValue().reversed()) .limit(20) .map(entry - buildRecommendation(userId, entry.getKey(), entry.getValue())) .collect(Collectors.toList()); }这段代码刻意写得简洁是为了让你看清协同过滤的完整骨架。如果数据量上来了全表扫描会有性能问题——但对于个人项目、几万条评分数据来说半小时一次定时任务完全能接受。等你真需要优化时再考虑用物品协同过滤ItemCF加离线计算在线召回的方式。注意上面的代码是参考骨架。实际项目中你会把“构建用户图书评分映射”和“计算相似度”拆成独立方法并加上缓存避免每次跑任务都从零算。3.2 冷启动用户的个性化兜底策略用户协同过滤有个天生缺陷新用户没有任何评分数据根本算不出相似用户。这个场景叫冷启动。我用的方案是基于内容偏好的推荐——用户注册时手动选择感兴趣的图书分类或者从历史浏览行为中推测偏好分类然后直接推荐该分类下评分最高的图书。preferred_categories字段在注册接口里就允许用户选择存成“文学,科幻,历史”这样的字符串。推荐任务发现某个用户没有评分记录时就跳到这个策略ListBook fallbackRecommend(Long userId) { User user userMapper.selectById(userId); if (user null || StringUtils.isEmpty(user.getPreferredCategories())) { // 没有任何偏好信息时给热门榜单 return bookMapper.selectHotBooks(20); } String[] categories user.getPreferredCategories().split(,); return bookMapper.selectBooksByCategories(categories, 20); }这里还用到了用户行为日志。用户在详情页停留超过一定时间、点击了某个分类下的多本书都会被记到t_user_behavior表里。跑推荐任务时如果行为日志里能挖掘出用户真实感兴趣的类别就对preferred_categories做动态校正。比如用户注册时选了“历史”但最近十次浏览全是“科幻”那推荐结果自然要偏向科幻。3.3 推荐结果的可解释性设计推荐系统做出来最怕用户觉得“莫名其妙为什么给我推这个”。所以我在推荐接口的返回数据里额外带了reason字段比如“因为你看过《三体》”或者“和你口味相似的用户也喜欢这本书”。前端在推荐卡片上把这个原因展示出来。这个设计成本很低但效果很好。用户在浏览推荐书单时能理解系统为什么推这本书信任感会大幅提升。答辩时也可以作为产品设计亮点讲——你不仅实现了算法还考虑了用户体验。4. 评分系统的业务闭环设计评分系统听起来简单——用户打分、存库、展示平均分。但真做起来细节多得能写一篇单独的文章。我实际开发中踩了不少坑这里把关键环节和避坑点一次说清楚。第一件事是评分表单的前端校验。评分我做成1到5分的星形控件默认5分可以半星。提交前必须校验分数不能为空、评论字数不能超过500字。这些校验放前端Element Plus的表单规则里很简单但后端也要做一遍因为接口是可以被直接调用的不能只靠前端防护。第二件事是评分提交的后端处理逻辑。前面说了用(user_id, book_id)联合唯一索引。但光有索引还不够代码里要先查再更新或插入这中间有并发问题。两个请求同时提交都查询不到记录就都走插入后插入的那个直接报唯一索引冲突。我的解决方案是捕获DuplicateKeyException然后转为更新操作。这样异常驱动编程虽然不算优雅但在并发量不高的场景下是最稳的。第三件事是评分成功后如何更新图书表的平均分。我的做法是先读当前avg_rating和rating_count如果是新评分新平均分 (旧平均分 * 旧数量 新分数) / (旧数量 1)如果是更新评分新平均分 (旧平均分 * 旧数量 - 旧分数 新分数) / 旧数量。要注意更新前先把旧分数查出来否则算出来的平均分会错。4.1 评分权限与防刷设计评分接口必须做登录校验。我用的是JWT令牌机制登录成功后前端拿到token存在localStorage里。每次请求通过axios拦截器在请求头加Authorization: Bearer token。后端用一个拦截器解析token解析不到或者过期就直接返回401。为了防止恶意刷分我做了三层限制。第一层同一个用户对同一本书只能评一次联合唯一索引兜底第二层接口层做频率限制同一个用户一分钟内最多提交10次评分请求第三层图书详情页展示的评分必须是评分数量超过5本才展示否则显示“暂无评分”。这些都是小细节但能有效避免评分数据被人为污染。4.2 评论与评分的联动展示评论和评分共用一个提交入口用户在详情页打分时既可以只打星也可以顺手写一段书评。展示上评论列表按时间倒序每条评论显示用户的昵称、评分星数、评论内容和时间。评论列表的数据我建议单独分页接口查不要和图书详情接口混在一起。因为详情接口返回的是图书基本信息加平均分评论是一个高频变动且数据量可能较大的列表分开查能降低详情接口的压力也方便前端做评论区懒加载。5. 前端Vue实现的关键细节前端部分我挑几个真正会影响用户体验和开发效率的点聊。不是把所有页面代码贴一遍——那是文档不是经验分享。状态管理用Pinia最核心的是用户状态和评分状态。用户登录后把用户信息、token存到Pinia里刷新页面时从localStorage恢复。所有涉及用户信息的组件都从Pinia读避免随手传state。路由守卫一定要做。前端路由在跳转前检查Pinia里有没有token没有就重定向到登录页。这个逻辑放在router.beforeEach里几行代码但体验完全不一样——用户没登录点时不是看到一个空白页面提示“请求失败”而是被引导去登录。5.1 图书列表的筛选与搜索交互图书列表页我用了Element Plus的el-table做PC端展示同时做了响应式布局移动端变成卡片流。搜索区域是书名关键字、作者、分类三个条件的组合筛选。后端接口用MyBatis-Plus的LambdaQueryWrapper动态拼条件LambdaQueryWrapperBook wrapper new LambdaQueryWrapper(); if (StringUtils.hasText(title)) { wrapper.like(Book::getTitle, title); } if (StringUtils.hasText(author)) { wrapper.like(Book::getAuthor, author); } if (StringUtils.hasText(category)) { wrapper.eq(Book::getCategory, category); } wrapper.orderByDesc(Book::getAvgRating);分页用的是MyBatis-Plus的分页插件前端传current和size两个参数返回total总数和records列表。注意前端切换页码时要把搜索条件一起传给后端不然用户搜完“科幻”翻到第二页结果又变回全部图书了。这个bug我在项目里遇到不止一次。5.2 评分组件的复用与交互优化评分组件我封装成了独立组件RateBook.vue在图书详情页和列表页都能用。核心逻辑是组件接收bookId和当前用户的历史评分如果有历史评分星形控件直接回显修改后调接口提交成功后刷新图书的平均分展示。组件的交互有几个细节值得注意。第一提交过程要显示loading状态防止用户狂点提交按钮产生重复请求第二提交成功后弹一个轻提示“评分成功”并用事件通知父组件刷新平均分第三如果用户没有登录点击评分星形时直接跳转登录页并携带回跳地址登录完成后自动回到原页面。这个回跳逻辑虽然小但用户好感度提升非常明显。5.3 推荐页面的搭建与前端展示推荐页面是系统的门面我用的是“瀑布流卡片”布局推荐结果从左到右排列每张卡片包含封面、书名、作者、分类、平均分和推荐理由。顶部加了一个Tab切换“为你推荐”和“热门榜单”。“为你推荐”走后端个性化推荐接口“热门榜单”走avg_rating排序接口。推荐卡片点击后跳转详情页。详情页里除了图书信息我还会调一个“相关推荐”接口基于当前图书的分类和作者推荐相似图书。这个可以用简单的规则实现——同分类下评分接近的图书。这样用户从推荐页进去再看到相关推荐就形成了一个浏览链路推荐系统的“连续性”就出来了。6. 常见问题与排查技巧实录这个项目开发过程中我记录了大量实际问题。挑几个有代表性的分享出来这些问题你在做类似项目时大概率也会遇到。6.1 推荐列表总是空的这个问题的坑最深。原因通常是当前用户没有任何评分数据走UserCF分支时用的是左连接查询相似用户算不出来候选集合就是空的。我排查了很久才发现问题不在SQL而在用户确实没有产生任何行为数据。解决办法就是前面说的冷启动兜底策略。每次推荐任务的最后检查最终结果列表是否为空如果为空就调用fallbackRecommend方法。这样推荐接口永远不会返回空列表用户的体验就不会“断片”。6.2 用户提交评分后平均分没变化如果你按照我前面说的逻辑更新平均分正常情况下不会有这个问题。但如果把更新逻辑写成了UPDATE t_book SET avg_rating #{avg} WHERE id #{bookId} AND avg_rating #{oldAvg}这种乐观锁写法就有可能在并发时更新失败导致平均分不变。我的建议是这里不用乐观锁直接先查后算再更新事务里加行锁就能保证一致性。个人项目追求的是稳定和简单过度设计反而容易埋坑。6.3 前端打包后接口地址不通本地开发时Vite代理配置得好好的打包丢到服务器上接口全部404。原因很简单前端.env.production里的接口地址没有改还在用http://localhost:8080。解决办法是改成后端的实际部署地址或者更推荐的做法——用Nginx反代让前端请求走相对路径/apiNginx再转发到后端服务。location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }这样配置的好处是前端不需要知道后端真实地址部署时只要改Nginx配置不用重新打包前端。6.4 数据库时区问题导致时间显示不对MySQL连接串最好显式加上时区和字符集参数。我第一次遇到时评论时间显示比实际时间晚了8个小时排查半天发现是驱动默认时区用的UTC。连接串改成jdbc:mysql://localhost:3306/book_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai这个问题很典型很多人都会忽略但排查起来又容易怀疑人生。6.5 前后端联调时的跨域问题本地开发时前端在5173端口后端在8080端口直接调用接口会触发跨域。开发环境我用Vite的代理解决// vite.config.js server: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } }后端同时加一个CORS配置类允许指定来源跨域。但生产部署时强烈建议用Nginx同源部署这样就不存在跨域问题了。7. 项目体验优化的独家心得最后聊几个我在实际使用中发现的小技巧属于常规博文不会写、但体验提升极其明显的细节。第一个是登录注册的过渡体验。图书推荐系统对普通用户来说最大的门槛是“为什么要注册”。我加了一个游客浏览模式——未登录用户可以看到热门榜单和图书详情但不能评分和看个性化推荐。这样用户先被内容吸引再被引导注册转化率比自己一上来就要注册高很多。第二个是推荐结果的刷新机制。我固定每半小时跑一次推荐任务但用户端不可能知道“半小时后”是什么时候。所以我在推荐页面加了一个“换一批”按钮前端请求时会带一个refreshtrue参数后端强制重算一次推荐结果并返回。这样用户想要新推荐时随时可以触发而不是干等定时任务。第三个是响应式布局。很多同类项目的登录页、详情页在手机上打开就是一坨。我用了一个响应式栅格PC端卡片一排显示5张平板显示3张手机显示2张。封面用的是懒加载v-lazy图片多的时候滚动浏览也不会卡。第四个是关于数据库索引。评分表加(user_id)普通索引因为推荐任务的核心操作是按用户ID查评分图书表加category索引因为分类筛选是高频操作。这些索引看着不起眼但对查询性能的改善是实打实的。以我个人的实际体会这类“带推荐功能的业务系统”最大的难点不在于算法本身有多高深而在于把算法落进去之后整个系统的数据链路是否通、用户反馈是否闭环。你做完了评分、推荐、展示、优化这一整条链路答辩、面试、作品展示都能讲出实实在在的东西。如果后面你打算把它再往前推一步可以考虑接入用户画像标签体系或者把协同过滤的结果实时化——但先把这篇文章里这套基础打扎实比什么都强。
RELATED

相关推荐

AI假期新闻刷屏背后:信息筛选四步法与趋势跟踪指南

AI假期新闻刷屏背后:信息筛选四步法与趋势跟踪指南

国庆七天假期,我本来的计划是把手机关成静音,把电脑屏幕扣上,好好补一补过去半年欠下的睡眠和手工活。结果从第一天开始,AI圈的动态就没停过。朋友圈有人半夜转新模型的评测链接,技术群里为某个开源权重吵到凌晨两点&a…

📅 2026/10/22 6:27:09
Celery任务系统容量规划与治理:从百万级到千万级的实战改造

Celery任务系统容量规划与治理:从百万级到千万级的实战改造

先说说结论:Celery不是一个装好就能躺平的组件,它是一个需要持续做容量规划和资源治理的分布式调度系统。这句话是我在凌晨三点被报警电话吵醒,盯着Redis监控面板上那条垂直拉升的内存曲线时,想明白的。事情的起因特别朴素。某天下…

📅 2026/10/22 6:27:09
高压环境下巡检机器人梯控系统抗电磁干扰设计实战

高压环境下巡检机器人梯控系统抗电磁干扰设计实战

做工业巡检机器人的朋友应该都有过这种经历:机器人一切动作都正常,唯独到了电梯口开始"犯傻"——呼梯信号发出去,电梯门开了又关、关了又开,或者干脆在非目标楼层停靠。大多数人第一反应是梯控协议没写好、传感器延时不…

📅 2026/10/22 6:22:09
MORE NEWS

更多资讯

📰

商用前必读:LFM2.5-24B-A2B-GGUF 授权协议详解与 LFM Open License v1.0 合规注意事项清单

人工智能大模型本地部署模型量化 【免费下载链接】LFM2.5-24B-A2B-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM2.5-24B-A2B-GGUF 点击查看 免费下载 LFM2.5-24B-A2B-GGUF 是 Liquid AI 推出的 LFM2.5-24B-A2B 混合架构大模型的 GGUF 量化版本&…

📰

6步给 Madeira 注入 increased-memory-limit:GetMoreRam 实战手册,告别游戏被系统秒杀

6步给 Madeira 注入 increased-memory-limit:GetMoreRam 实战手册,告别游戏被系统秒杀 【免费下载链接】Madeira Run x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT 项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira …

📰

D7015:高效高压降压型DC-DC转换器,赋能多领域应用

在当今电子设备日益复杂且对电源性能要求极高的背景下,D7015高效高压降压型DC-DC转换器,凭借其卓越的性能和广泛的适用性,为电源管理领域带来了一项极具价值的解决方案。一、产品简介D7015是一款固定150KHz开关频率的降压型DC-DC转换器&#…

📰

GetLogicalOrsMaxMinTmpSize 详解:如何为 LogicalOrs 选对临时空间大小

GetLogicalOrsMaxMinTmpSize 详解:如何为 LogicalOrs 选对临时空间大小 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API&am…

📰

如何读懂 dd_metastate 缓存:Llama-3.1-8B_rai_1.8.0_npu_4K 预填充/解码双阶段 NPU 状态文件完整解析

【免费下载链接】Llama-3.1-8B_rai_1.8.0_npu_4K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Llama-3.1-8B_rai_1.8.0_npu_4K 点击查看 免费下载 Llama-3.1-8B_rai_1.8.0_npu_4K 是 AMD 面向 Ryzen AI(NPU)深度优化的 Llama 3.1 8B 大…

📰

网盘直连高速下载完整笔记:500MB文件如何摆脱限速泥潭

网盘直连高速下载完整笔记:500MB文件如何摆脱限速泥潭 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬