【原创唯一】基于SpringBoot+Vue的固定资产管理系统 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)
摘要企事业单位办公设备、家具等固定资产数量庞大传统依赖 Excel 或纸质台账的管理方式存在信息分散、领用流程不规范、库存账实不符等问题。本文设计并实现了一套基于 B/S 架构的固定资产管理系统采用前后端分离模式面向管理员与员工两类角色覆盖办公设备采购入库、领用登记、归还与报废审批、库存盘点及资产分类统计等核心业务。系统后端基于 Spring Boot 构建 RESTful 服务持久层采用 MyBatis-Plus 访问 MySQL 数据库通过 JWT 实现无状态身份认证与基于角色的访问控制前端采用 Vue 3 单页应用配合 Element Plus 与 ECharts 实现统一后台界面与数据可视化。数据库设计包含管理员、员工、资产分类、固定资产、领用记录、库存盘点及盘点明细共七张业务表领用状态采用「待审批→借用中→已归还/已报废」的完整流转模型并与库存数量联动。经功能测试系统各模块运行稳定满足办公资产从采购入库、员工申领、管理员审批到归还报废及盘点的业务闭环需求对同类 Web 管理系统的开发具有一定的参考价值。技术栈 Spring Boot 3 MyBatis-Plus MySQL Vue 3 Element Plus EChartsSpring Boot3uni-appVue3uViewPlusViteMybatsiPlusEcharts微信小程序数据库表5张文末获取联系文末获取联系作者介绍专注计算机课设、毕设辅导个人开发坚持原创非工作室源码全网唯一。✅技术主流SpringBoot Vue 前后端分离MySQLEcharts数据统计可本地运行✅配套资料源码 数据库 实验报告/论文 答辩 PPT部署演示远程调试问题解答技术范围SpringBoot、Vue、数据可视化、小程序、HLMT、Nodejs、uni-app、MySQL数据库、ElementUi等设计与开发。适用范围软件工程、软件技术、数据库课程设计、计算机科学与技术、数据库系统原理、JavaWeb开发、JavaEE、Java、Web应用开发、动态网页设计的课程设计、课设、大作业、课程实验、期末作业实验报告参考内容实验报告可供大家参考使用功能展示角色功能模块说明管理员采购入库登记新资产或补货入库增加库存总量与可领数量管理员资产分类维护计算机设备、办公桌椅等分类管理员领用登记直接为员工登记领用状态为借用中管理员申领审批审批员工在线申领批准或驳回管理员归还/报废审批确认员工归还或报废申请管理员库存盘点创建盘点单、录入实盘、完成盘点并调整库存管理员分类统计KPI 与 ECharts 图表展示管理员员工管理员工账号增删改查、启用停用员工申领资产选择可领用资产提交申请员工我的领用查看本人领用记录申请归还或报废员工管理员数据库及架构系统数据库设计为Controller及Service层核心代码写法package com.springboot.controller; import com.springboot.auth.RequireRole; import com.springboot.dto.*; import com.springboot.entity.BorrowRecord; import com.springboot.entity.UserRole; import com.springboot.service.BorrowRecordService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; RestController RequestMapping(/api/borrows) RequiredArgsConstructor public class BorrowController { private final BorrowRecordService borrowService; GetMapping(/page) RequireRole({UserRole.ADMIN, UserRole.USER}) public ApiResponsePageResultBorrowRecord page( RequestParam(required false) String keyword, RequestParam(required false) String status, RequestParam(defaultValue 1) int page, RequestParam(defaultValue 10) int size) { return ApiResponse.ok(borrowService.page(keyword, status, page, size)); } GetMapping(/pending-approval) RequireRole({UserRole.ADMIN}) public ApiResponsePageResultBorrowRecord pendingApproval( RequestParam(defaultValue 1) int page, RequestParam(defaultValue 10) int size) { return ApiResponse.ok(borrowService.pagePendingApproval(page, size)); } GetMapping(/{id}) RequireRole({UserRole.ADMIN, UserRole.USER}) public ApiResponseBorrowRecord detail(PathVariable Long id) { return ApiResponse.ok(borrowService.getById(id)); } PostMapping(/apply) RequireRole({UserRole.USER}) public ApiResponseBorrowRecord apply(RequestBody BorrowApplyDTO dto) { return ApiResponse.ok(申领已提交, borrowService.apply(dto)); } PostMapping(/register) RequireRole({UserRole.ADMIN}) public ApiResponseBorrowRecord register(RequestBody BorrowRegisterDTO dto) { return ApiResponse.ok(领用登记成功, borrowService.register(dto)); } PutMapping(/{id}/approve) RequireRole({UserRole.ADMIN}) public ApiResponseBorrowRecord approve(PathVariable Long id, RequestBody(required false) BorrowRemarkDTO dto) { return ApiResponse.ok(审批通过, borrowService.approve(id, dto)); } PutMapping(/{id}/reject) RequireRole({UserRole.ADMIN}) public ApiResponseBorrowRecord reject(PathVariable Long id, RequestBody(required false) BorrowRemarkDTO dto) { return ApiResponse.ok(已驳回, borrowService.reject(id, dto)); } PutMapping(/{id}/request-return) RequireRole({UserRole.ADMIN, UserRole.USER}) public ApiResponseBorrowRecord requestReturn(PathVariable Long id) { return ApiResponse.ok(归还申请已提交, borrowService.requestReturn(id)); } PutMapping(/{id}/request-scrap) RequireRole({UserRole.ADMIN, UserRole.USER}) public ApiResponseBorrowRecord requestScrap(PathVariable Long id) { return ApiResponse.ok(报废申请已提交, borrowService.requestScrap(id)); } PutMapping(/{id}/approve-return) RequireRole({UserRole.ADMIN}) public ApiResponseBorrowRecord approveReturn(PathVariable Long id, RequestBody(required false) BorrowRemarkDTO dto) { return ApiResponse.ok(归还已确认, borrowService.approveReturn(id, dto)); } PutMapping(/{id}/approve-scrap) RequireRole({UserRole.ADMIN}) public ApiResponseBorrowRecord approveScrap(PathVariable Long id, RequestBody(required false) BorrowRemarkDTO dto) { return ApiResponse.ok(报废已确认, borrowService.approveScrap(id, dto)); } DeleteMapping(/{id}) RequireRole({UserRole.ADMIN}) public ApiResponseVoid delete(PathVariable Long id) { borrowService.delete(id); return ApiResponse.ok(删除成功, null); } } package com.springboot.service; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.springboot.auth.AuthContext; import com.springboot.dto.BorrowApplyDTO; import com.springboot.dto.BorrowRegisterDTO; import com.springboot.dto.BorrowRemarkDTO; import com.springboot.dto.PageResult; import com.springboot.entity.*; import com.springboot.mapper.AssetCategoryMapper; import com.springboot.mapper.AssetMapper; import com.springboot.mapper.BorrowRecordMapper; import com.springboot.mapper.CustomerMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; Service RequiredArgsConstructor public class BorrowRecordService { private final BorrowRecordMapper borrowMapper; private final AssetMapper assetMapper; private final AssetService assetService; private final CustomerMapper customerMapper; private final AssetCategoryMapper categoryMapper; public PageResultBorrowRecord page(String keyword, String status, int page, int size) { var wrapper buildQuery(keyword, status); PageBorrowRecord result borrowMapper.selectPage(new Page(page, size), wrapper); enrich(result.getRecords()); return PageResult.of(result); } public PageResultBorrowRecord pagePendingApproval(int page, int size) { var wrapper Wrappers.BorrowRecordlambdaQuery() .in(BorrowRecord::getStatus, BorrowStatus.RETURN_PENDING, BorrowStatus.SCRAP_PENDING) .orderByDesc(BorrowRecord::getId); PageBorrowRecord result borrowMapper.selectPage(new Page(page, size), wrapper); enrich(result.getRecords()); return PageResult.of(result); } public BorrowRecord getById(Long id) { BorrowRecord r borrowMapper.selectById(id); if (r null) throw new RuntimeException(领用记录不存在); if (AuthContext.isUser() !Objects.equals(r.getUser_id(), AuthContext.getUserId())) { throw new RuntimeException(无权查看该记录); } enrich(List.of(r)); return r; } Transactional public BorrowRecord apply(BorrowApplyDTO dto) { validateApply(dto); Asset asset assetMapper.selectById(dto.getAsset_id()); if (asset null || asset.getEnabled() ! 1) throw new RuntimeException(资产不存在或已停用); if (asset.getQuantity_available() dto.getQuantity()) throw new RuntimeException(可领用库存不足); BorrowRecord r new BorrowRecord(); r.setRecord_no(generateRecordNo()); r.setUser_id(AuthContext.getUserId()); r.setAsset_id(dto.getAsset_id()); r.setQuantity(dto.getQuantity()); r.setPurpose(dto.getPurpose()); r.setRecord_type(申领); r.setStatus(BorrowStatus.PENDING); r.setApply_date(LocalDateTime.now()); r.setExpected_return_date(dto.getExpected_return_date()); r.setCreated_at(LocalDateTime.now()); r.setUpdated_at(LocalDateTime.now()); borrowMapper.insert(r); enrich(List.of(r)); return r; } Transactional public BorrowRecord register(BorrowRegisterDTO dto) { if (dto.getUser_id() null) throw new RuntimeException(请选择领用人); if (customerMapper.selectById(dto.getUser_id()) null) throw new RuntimeException(领用人不存在); validateQuantity(dto.getAsset_id(), dto.getQuantity()); BorrowRecord r new BorrowRecord(); r.setRecord_no(generateRecordNo()); r.setUser_id(dto.getUser_id()); r.setAsset_id(dto.getAsset_id()); r.setQuantity(dto.getQuantity()); r.setPurpose(dto.getPurpose()); r.setRecord_type(登记); r.setStatus(BorrowStatus.BORROWING); r.setApply_date(LocalDateTime.now()); r.setBorrow_date(LocalDateTime.now()); r.setExpected_return_date(dto.getExpected_return_date()); r.setCreated_at(LocalDateTime.now()); r.setUpdated_at(LocalDateTime.now()); borrowMapper.insert(r); assetService.deductStock(dto.getAsset_id(), dto.getQuantity()); enrich(List.of(r)); return r; } Transactional public BorrowRecord approve(Long id, BorrowRemarkDTO dto) { BorrowRecord r getForAdmin(id); if (!BorrowStatus.PENDING.equals(r.getStatus())) throw new RuntimeException(仅待审批记录可批准); assetService.deductStock(r.getAsset_id(), r.getQuantity()); r.setStatus(BorrowStatus.BORROWING); r.setBorrow_date(LocalDateTime.now()); r.setAdmin_remark(dto ! null ? dto.getAdmin_remark() : null); r.setUpdated_at(LocalDateTime.now()); borrowMapper.updateById(r); enrich(List.of(r)); return r; } Transactional public BorrowRecord reject(Long id, BorrowRemarkDTO dto) { BorrowRecord r getForAdmin(id); if (!BorrowStatus.PENDING.equals(r.getStatus())) throw new RuntimeException(仅待审批记录可驳回); r.setStatus(BorrowStatus.REJECTED); r.setAdmin_remark(dto ! null ? dto.getAdmin_remark() : null); r.setUpdated_at(LocalDateTime.now()); borrowMapper.updateById(r); enrich(List.of(r)); return r; } Transactional public BorrowRecord requestReturn(Long id) { BorrowRecord r getOwnedOrAdmin(id); if (!BorrowStatus.BORROWING.equals(r.getStatus())) throw new RuntimeException(仅借用中可申请归还); r.setStatus(BorrowStatus.RETURN_PENDING); r.setUpdated_at(LocalDateTime.now()); borrowMapper.updateById(r); enrich(List.of(r)); return r; } Transactional public BorrowRecord requestScrap(Long id) { BorrowRecord r getOwnedOrAdmin(id); if (!BorrowStatus.BORROWING.equals(r.getStatus())) throw new RuntimeException(仅借用中可申请报废); r.setStatus(BorrowStatus.SCRAP_PENDING); r.setUpdated_at(LocalDateTime.now()); borrowMapper.updateById(r); enrich(List.of(r)); return r; } Transactional public BorrowRecord approveReturn(Long id, BorrowRemarkDTO dto) { BorrowRecord r getForAdmin(id); if (!BorrowStatus.RETURN_PENDING.equals(r.getStatus())) throw new RuntimeException(仅待归还审批可确认); assetService.restoreStock(r.getAsset_id(), r.getQuantity()); r.setStatus(BorrowStatus.RETURNED); r.setReturn_date(LocalDateTime.now()); r.setAdmin_remark(dto ! null ? dto.getAdmin_remark() : null); r.setUpdated_at(LocalDateTime.now()); borrowMapper.updateById(r); enrich(List.of(r)); return r; } Transactional public BorrowRecord approveScrap(Long id, BorrowRemarkDTO dto) { BorrowRecord r getForAdmin(id); if (!BorrowStatus.SCRAP_PENDING.equals(r.getStatus())) throw new RuntimeException(仅待报废审批可确认); assetService.scrapStock(r.getAsset_id(), r.getQuantity()); r.setStatus(BorrowStatus.SCRAPED); r.setScrap_date(LocalDateTime.now()); r.setAdmin_remark(dto ! null ? dto.getAdmin_remark() : null); r.setUpdated_at(LocalDateTime.now()); borrowMapper.updateById(r); enrich(List.of(r)); return r; } Transactional public void delete(Long id) { BorrowRecord r getForAdmin(id); if (!BorrowStatus.PENDING.equals(r.getStatus()) !BorrowStatus.REJECTED.equals(r.getStatus())) { throw new RuntimeException(仅待审批或已驳回记录可删除); } borrowMapper.deleteById(id); } private BorrowRecord getForAdmin(Long id) { BorrowRecord r borrowMapper.selectById(id); if (r null) throw new RuntimeException(领用记录不存在); return r; } private BorrowRecord getOwnedOrAdmin(Long id) { BorrowRecord r borrowMapper.selectById(id); if (r null) throw new RuntimeException(领用记录不存在); if (AuthContext.isUser() !Objects.equals(r.getUser_id(), AuthContext.getUserId())) { throw new RuntimeException(无权操作该记录); } return r; } private void validateApply(BorrowApplyDTO dto) { if (dto.getAsset_id() null) throw new RuntimeException(请选择资产); validateQuantity(dto.getAsset_id(), dto.getQuantity()); if (!StringUtils.hasText(dto.getPurpose())) throw new RuntimeException(请填写用途说明); } private void validateQuantity(Long assetId, Integer quantity) { if (assetId null) throw new RuntimeException(请选择资产); int qty quantity ! null ? quantity : 0; if (qty 0) throw new RuntimeException(数量须大于0); Asset asset assetMapper.selectById(assetId); if (asset null || asset.getEnabled() ! 1) throw new RuntimeException(资产不存在或已停用); if (asset.getQuantity_available() qty) throw new RuntimeException(可领用库存不足); } private com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapperBorrowRecord buildQuery(String keyword, String status) { var wrapper Wrappers.BorrowRecordlambdaQuery() .eq(StringUtils.hasText(status), BorrowRecord::getStatus, status) .and(StringUtils.hasText(keyword), w - w .like(BorrowRecord::getRecord_no, keyword) .or().like(BorrowRecord::getPurpose, keyword)); if (AuthContext.isUser()) { wrapper.eq(BorrowRecord::getUser_id, AuthContext.getUserId()); } wrapper.orderByDesc(BorrowRecord::getId); return wrapper; } private String generateRecordNo() { return LY LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyyMMddHHmmss)) String.format(%04d, new Random().nextInt(10000)); } private void enrich(ListBorrowRecord list) { if (list null || list.isEmpty()) return; ListLong userIds list.stream().map(BorrowRecord::getUser_id).filter(Objects::nonNull).distinct().toList(); ListLong assetIds list.stream().map(BorrowRecord::getAsset_id).filter(Objects::nonNull).distinct().toList(); MapLong, Customer userMap userIds.isEmpty() ? Map.of() : customerMapper.selectBatchIds(userIds).stream().collect(Collectors.toMap(Customer::getId, c - c)); MapLong, Asset assetMap assetIds.isEmpty() ? Map.of() : assetMapper.selectBatchIds(assetIds).stream().collect(Collectors.toMap(Asset::getId, a - a)); ListLong catIds assetMap.values().stream().map(Asset::getCategory_id).filter(Objects::nonNull).distinct().toList(); MapLong, AssetCategory catMap catIds.isEmpty() ? Map.of() : categoryMapper.selectBatchIds(catIds).stream().collect(Collectors.toMap(AssetCategory::getId, c - c)); for (BorrowRecord r : list) { Customer u userMap.get(r.getUser_id()); if (u ! null) r.setUser_name(u.getReal_name() ! null ? u.getReal_name() : u.getUsername()); Asset a assetMap.get(r.getAsset_id()); if (a ! null) { r.setAsset_name(a.getName()); r.setAsset_code(a.getAsset_code()); AssetCategory c catMap.get(a.getCategory_id()); if (c ! null) r.setCategory_name(c.getName()); } } } }擅长功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。获取联系项目功能完整可在本地运行并可远程调试确保运行顺利获取联系方式课程设计获取https://blog.csdn.net/qq_59059632/article/details/163685632?spm1001.2014.3001.5501

相关新闻

Day2 数据结构(2)

Day2 数据结构(2)

今天学习了数据结构中的链表中的单向链表,在学习中主要有以下几点困难地方1.对于指针来操作一些结构体还是不太熟练,比如在练习单向链表中的对数据进行倒序的时候,指针指向结构体不太清楚,还有访问结构体里面的指针的时候指向节点…

2026/8/15 8:48:08 阅读更多 →
TKMyBatis实战指南:告别重复CRUD,提升MyBatis开发效率

TKMyBatis实战指南:告别重复CRUD,提升MyBatis开发效率

1. 项目概述:为什么我们需要TKMyBatis? 如果你用MyBatis做过几个项目,尤其是那种表结构复杂、实体类众多的后台管理系统,你大概率会和我有一样的感受:写SQL是爽,但写那些重复的增删改查(CRUD&am…

2026/8/15 8:48:08 阅读更多 →
告别LaTeX表格手工编码:超强工具实现图形化设计与代码自动生成

告别LaTeX表格手工编码:超强工具实现图形化设计与代码自动生成

1. 项目概述:告别LaTeX表格的“手工活” 如果你用过LaTeX排版,尤其是写过论文、技术报告或者书籍,那你一定对制作表格这件事又爱又恨。爱的是它最终呈现出的那份严谨、精致和专业感,恨的是在代码编辑器里手动调整 \hline 、 \m…

2026/8/15 8:48:08 阅读更多 →

最新新闻

JavaScript函数编程:从基础到高阶实战指南

JavaScript函数编程:从基础到高阶实战指南

1. JavaScript函数:从基础到实战的完整指南 作为一名前端开发者,我经常被问到如何真正掌握JavaScript函数。函数是JavaScript编程的核心概念,但很多初学者往往停留在基础语法层面,无法灵活运用。今天,我将分享一套完整…

2026/8/15 9:33:26 阅读更多 →
奇点大会后的安全攻防,AI系统怎么建防御纵深

奇点大会后的安全攻防,AI系统怎么建防御纵深

从传统安全到AI原生威胁:防御思维的范式转换 奇点智能技术大会2026上,AI安全议题的分量明显加重。当模型能力持续突破,攻击面也在同步扩张——对抗样本能让自动驾驶识别失效,模型窃取可在几轮查询中复制核心能力,而供…

2026/8/15 9:33:26 阅读更多 →
奇点大会的多模态讨论,内容产品团队怎么跟进

奇点大会的多模态讨论,内容产品团队怎么跟进

从大会热词到产品落地:多模态能力如何嵌入内容生产 奇点智能技术大会2026的多模态议题,对内容产品团队来说不是"要不要跟进"的问题,而是"怎么避免踩坑"的问题。文生图、图生视频这些能力听起来性感,真正落地…

2026/8/15 9:33:26 阅读更多 →
网页完整保存实战指南:从PDF到爬虫的5种方案与避坑技巧

网页完整保存实战指南:从PDF到爬虫的5种方案与避坑技巧

1. 网页保存的“完整”之困与破局思路 干了这么多年技术,处理过无数网页存档的需求,从产品经理要留个竞品快照,到法务部门要求证据保全,再到自己写博客想做个离线备份。我发现一个挺普遍的现象:很多人以为点了浏览器的…

2026/8/15 9:33:26 阅读更多 →
从奇点大会看TinyML,端侧智能的落地门槛在哪

从奇点大会看TinyML,端侧智能的落地门槛在哪

TinyML 不是「小模型」那么简单 在奇点智能技术大会的边缘智能分论坛上,TinyML 被反复提及,但讨论焦点早已不是「能不能在 MCU 上跑神经网络」这种初级阶段的问题。真正让嵌入式工程师和 AI 架构师头疼的是:模型压缩到何种程度,业…

2026/8/15 9:33:26 阅读更多 →
Wireshark 3.6.3 Windows安装与配置全指南:从零抓包到实战分析

Wireshark 3.6.3 Windows安装与配置全指南:从零抓包到实战分析

1. 项目概述:为什么我们需要Wireshark?如果你是一名网络工程师、安全研究员,或者是一名对计算机底层通信充满好奇的开发者,那么Wireshark这个名字你一定不陌生。它被誉为“网络世界的显微镜”,是迄今为止最强大、最流行…

2026/8/15 9:32:26 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →