Spring Boot配置安全实践:环境变量与外部化配置实现敏感信息零提交
最近在项目开发中经常遇到需要将代码中的敏感信息如密码、密钥、API Token进行脱敏处理但又希望团队内部能方便地查看和调试的情况。直接提交明文到代码库风险极高而完全加密又给日常开发带来不便。本文将分享一套基于环境变量与配置文件分级管理的“无码”即无敏感信息明文版本控制实践这可能是你需要的最后一次在代码库中提交敏感信息明文的方案。无论你是独立开发者还是团队协作这套方法都能帮你建立安全、便捷的配置管理流程。1. 背景与核心概念为什么需要“无码版本”在软件开发中“无码版本”通常指的是在版本控制系统如 Git中不包含任何硬编码的敏感信息如数据库密码、第三方服务密钥、个人访问令牌等的代码版本。与之相对的是“有码版本”即敏感信息直接以明文形式写在配置文件中并提交到了代码库。为什么这是个大问题安全风险代码库可能被公开如误传到公开仓库或被未授权人员访问导致敏感信息泄露。权限扩散所有能访问代码库的人都能看到生产环境的密钥违背了最小权限原则。环境耦合不同环境开发、测试、生产的配置混杂在一起难以管理。协作困难新成员克隆项目后需要手动修改配置才能运行容易出错。理想的解决方案是什么我们的目标是实现代码仓库中永远不出现敏感信息明文但开发者能在本地和各类服务器环境中轻松、安全地加载正确的配置。这需要将配置与代码分离并通过安全的渠道进行管理。2. 环境准备与版本说明本文将使用一个典型的 Spring Boot 应用作为示例但核心思想适用于任何技术栈Node.js, Python Django, Go 等。环境与工具操作系统macOS / Linux / Windows (WSL2 推荐)Java 版本JDK 11 或 17 (本文示例使用 JDK 17)构建工具Maven 3.6 或 Gradle 7.x项目框架Spring Boot 2.7.x版本控制Git配置管理使用application.yml和.env文件配合spring-boot-starter原生支持及dotenv理念可选高级配置中心如 Apollo, Nacos用于更复杂的环境管理。项目结构预览your-spring-boot-app/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ └── resources/ │ │ ├── application.yml # 公共、非敏感配置 │ │ └── application-dev.yml # 开发环境特定配置模板无密码 │ ├── test/ │ └── ... ├── .env.example # 环境变量模板文件 ├── .gitignore # 确保 .env 被忽略 ├── pom.xml 或 build.gradle └── README.md关键原则.env文件和包含真实密码的application-{profile}.yml文件必须列入.gitignore永不提交。3. 核心方案多层级配置加载策略Spring Boot 提供了强大的外部化配置支持加载优先级从高到低如下简化命令行参数。SPRING_APPLICATION_JSON属性内嵌在环境变量或系统属性中的 JSON。操作系统环境变量。application-{profile}.properties/yml配置文件仅来自打包的 jar 外部的目录。application-{profile}.properties/yml配置文件打包在 jar 内部。application.properties/yml配置文件外部。application.properties/yml配置文件内部。Configuration类上的PropertySource注解。默认属性通过SpringApplication.setDefaultProperties指定。我们的安全策略基于第3点环境变量和第4点外部配置文件。3.1 策略一使用环境变量推荐用于简单密钥这是最安全、最通用的方式几乎所有云平台和容器环境都原生支持。在application.yml中引用环境变量# src/main/resources/application.yml spring: datasource: url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:mydb}?useSSLfalseserverTimezoneUTC username: ${DB_USERNAME:root} password: ${DB_PASSWORD:} # 默认值为空必须由外部提供 driver-class-name: com.mysql.cj.jdbc.Driver custom: api: endpoint: https://api.example.com key: ${API_KEY:} # 第三方API密钥如何设置环境变量Linux/macOS (终端)export DB_PASSWORDyour_strong_password_here export API_KEYsk_live_xxx # 然后启动应用 ./mvnw spring-boot:runWindows (CMD)set DB_PASSWORDyour_strong_password_here set API_KEYsk_live_xxx mvnw.cmd spring-boot:run使用.env文件配合 IDE 或 docker-compose 创建.env文件务必加入.gitignore# .env DB_HOST127.0.0.1 DB_PORT3306 DB_NAMEmydb DB_USERNAMEapp_user DB_PASSWORDSuperSecret!123 API_KEYsk_live_abc123def456然后通过工具加载此文件。对于 Spring Boot可以使用spring-boot-starter并配置spring.config.importoptional:file:.env[.properties]Spring Boot 2.4或者使用第三方库如dotenv-java。3.2 策略二使用外部配置文件推荐用于复杂配置将包含敏感信息的配置文件放在 jar 包之外例如与 jar 包同级的config/目录下。步骤在src/main/resources/下创建application-prod.yml.template作为模板提交。# src/main/resources/application-prod.yml.template # 生产环境配置模板 # !!! 重要将此文件复制到外部填入真实值并重命名为 application-prod.yml !!! spring: datasource: password: #PROD_DB_PASSWORD# # 替换为真实密码 logging: file: name: /var/log/myapp/app.log custom: encryption: salt: #ENCRYPTION_SALT# # 替换为真实的盐值在部署时将模板复制到外部目录如/opt/myapp/config/填入真实值并重命名为application-prod.yml。启动应用时通过--spring.config.location指定外部配置目录。java -jar myapp.jar --spring.config.locationfile:/opt/myapp/config/Spring Boot 会自动加载file:/opt/myapp/config/application-prod.yml并覆盖 jar 包内部的默认配置。3.3 策略三结合使用最佳实践通常我们将非敏感、公共的配置放在application.yml中并提交。将环境特定的、非敏感的配置放在application-dev.yml,application-test.yml中并提交。而将所有敏感信息都通过环境变量或外部机密文件如 Kubernetes Secrets, HashiCorp Vault来提供。一个综合的application.yml示例# src/main/resources/application.yml - 提交到仓库 spring: profiles: active: activatedProperties # Maven/Gradle 过滤构建时替换 config: import: optional:file:.env[.properties] # Spring Boot 2.4尝试导入 .env 文件 datasource: url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:testdb} username: ${DB_USERNAME:root} password: ${DB_PASSWORD:} hikari: connection-timeout: 30000 maximum-pool-size: 10 redis: host: ${REDIS_HOST:localhost} port: ${REDIS_PORT:6379} password: ${REDIS_PASSWORD:} app: security: jwt: secret: ${JWT_SECRET:} # 必须通过环境变量设置4. 完整实战案例构建一个“无码”的 Spring Boot 应用让我们从头创建一个简单的用户服务实践上述策略。4.1 创建项目结构使用 Spring Initializr 或 IDE 创建项目依赖选择Spring Web,Spring Data JPA,MySQL Driver,Lombok。最终pom.xml关键依赖dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies4.2 编写“无码”配置1. 主配置文件 (src/main/resources/application.yml):spring: application: name: user-service # 使用环境变量 SPRING_PROFILES_ACTIVE 或命令行参数激活 profile # profiles: # active: dev jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: dialect: org.hibernate.dialect.MySQL8Dialect format_sql: true # 数据源配置全部由环境变量驱动 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:user_db}?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai username: ${DB_USERNAME:root} password: ${DB_PASSWORD:} # 关键密码为空必须外部提供 hikari: maximum-pool-size: 10 minimum-idle: 5 connection-timeout: 30000 # 自定义配置也使用环境变量 app: admin: email: ${ADMIN_EMAIL:adminexample.com} # 默认值可被覆盖 feature: enable-beta: ${ENABLE_BETA_FEATURES:false}2. 开发环境配置模板 (src/main/resources/application-dev.yml):# 开发环境配置 - 可提交只包含非敏感或本地默认值 spring: datasource: url: jdbc:mysql://localhost:3306/user_db_dev # 本地开发数据库名可不同 # username 和 password 依然从环境变量读取本地可在 .env 设置 jpa: show-sql: true hibernate: ddl-auto: create-drop # 开发环境方便 logging: level: com.example.userservice: DEBUG org.hibernate.SQL: DEBUG org.hibernate.type.descriptor.sql.BasicBinder: TRACE app: feature: enable-beta: true # 开发环境开启测试功能3. 创建环境变量模板文件 (.env.example):# 环境变量模板文件 # 复制此文件为 .env 并填入真实值 # 切勿提交 .env 文件 # 数据库配置 DB_HOSTlocalhost DB_PORT3306 DB_NAMEuser_db DB_USERNAMEyour_db_user DB_PASSWORDyour_strong_password_here # 应用特定配置 ADMIN_EMAILadminyourcompany.com ENABLE_BETA_FEATURESfalse JWT_SECRETyour_super_long_and_secure_jwt_secret_key_here_at_least_32_chars4. 更新.gitignore文件:# 忽略环境变量文件 .env .env.local .env.*.local # 忽略包含真实密码的配置文件 config/application-*.yml !config/application-*.yml.template # 但保留模板 # 忽略 IDE 和构建文件 target/ *.iml .idea/4.3 编写一个简单的实体和控制器实体类 (User.java):package com.example.userservice.entity; import lombok.Data; import javax.persistence.*; import java.time.LocalDateTime; Entity Table(name users) Data public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; private String username; private String email; private LocalDateTime createdAt; PrePersist protected void onCreate() { this.createdAt LocalDateTime.now(); } }控制器 (UserController.java):package com.example.userservice.controller; import com.example.userservice.entity.User; import com.example.userservice.repository.UserRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.List; RestController RequestMapping(/api/users) public class UserController { private final UserRepository userRepository; Value(${app.admin.email}) private String adminEmail; public UserController(UserRepository userRepository) { this.userRepository userRepository; } GetMapping public ListUser getAllUsers() { return userRepository.findAll(); } PostMapping public User createUser(RequestBody User user) { return userRepository.save(user); } GetMapping(/admin-info) public String getAdminInfo() { return Admin contact: adminEmail; } }仓库接口 (UserRepository.java):package com.example.userservice.repository; import com.example.userservice.entity.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; Repository public interface UserRepository extends JpaRepositoryUser, Long { }4.4 运行与验证准备环境将.env.example复制为.env并填入你本地 MySQL 的真实信息。cp .env.example .env # 编辑 .env 文件填入 DB_PASSWORD 等激活开发环境设置环境变量SPRING_PROFILES_ACTIVEdev并确保.env被加载。方式A直接设置环境变量并运行export SPRING_PROFILES_ACTIVEdev # 手动导出 .env 中的所有变量或使用工具 export $(grep -v ^# .env | xargs) ./mvnw spring-boot:run方式B使用 IDE在 IntelliJ IDEA 或 Eclipse 的运行配置中添加环境变量SPRING_PROFILES_ACTIVEdev并启用Enable EnvFile插件或类似功能加载.env。验证配置加载应用启动后观察日志。你应该看到数据源连接成功并且app.admin.email的值是你.env文件中设置的或默认值。... Tomcat started on port(s): 8080 ... ... Started UserServiceApplication in 3.456 seconds ...测试 API# 创建用户 curl -X POST http://localhost:8080/api/users \ -H Content-Type: application/json \ -d {username:testuser, email:testexample.com} # 获取用户列表 curl http://localhost:8080/api/users # 获取管理员信息从配置读取 curl http://localhost:8080/api/users/admin-info4.5 关键验证点代码仓库检查 Git 状态确保.env和任何包含真实密码的文件没有被跟踪。配置生效API 返回的管理员邮箱应与.env中设置的一致。数据库连接应用能正常连接并操作数据库证明密码通过环境变量正确传递。5. 常见问题与排查思路问题现象可能原因排查步骤与解决方案启动报错Failed to configure a DataSource: url attribute is not specified1. 环境变量未设置或未正确加载。2.spring.datasource.url在配置文件中被错误覆盖。1. 检查.env文件是否存在变量名是否正确。2. 在启动命令中添加--debug查看所有配置属性来源确认spring.datasource.url的最终值。3. 确保SPRING_PROFILES_ACTIVE设置正确。数据库连接失败Access denied for user rootlocalhost1.DB_PASSWORD环境变量值错误或为空。2. 数据库用户权限不足。1. 使用echo $DB_PASSWORD或打印环境变量验证密码是否正确加载。2. 尝试用相同的用户名密码通过命令行客户端连接数据库。3. 检查.env文件中的密码是否有特殊字符可能需要转义或使用引号。配置属性Value(${app.admin.email})注入为null或默认值1. 属性键名拼写错误。2. 包含该属性的配置文件未被激活或加载。3..env文件未被加载。1. 检查application.yml中属性路径是否正确。2. 查看/actuator/env端点需引入spring-boot-starter-actuator确认所有属性源和值。3. 确认 Spring Boot 版本是否支持spring.config.import或检查加载.env的机制。生产环境部署时配置不生效1. 外部配置文件路径错误。2. 启动命令中未指定--spring.config.location。3. 环境变量在容器或系统中未设置。1. 确认外部配置文件如/opt/app/config/application-prod.yml存在且有读权限。2. 使用java -jar app.jar --spring.config.locationfile:/opt/app/config/明确指定。3. 在容器启动脚本或系统服务文件如 systemd unit file中正确设置所有必需环境变量。敏感信息在日志中泄露1. 配置了logging.level.rootDEBUG且日志框架打印了包含密码的配置。1.永远不要在日志中记录spring.datasource.password等敏感属性。确保生产环境的日志级别为 INFO 或 WARN。2. 使用spring.boot.admin.client.instance.metadata.*或自定义属性源时需谨慎。6. 最佳实践与工程建议实现“无码版本”只是第一步将其融入工程流程才能持久生效。标准化.env.example文件为每个新项目创建.env.example并包含所有必需和可选的配置项。为每个配置项添加清晰的注释说明用途、格式和示例。在README.md中明确说明如何复制.env.example到.env并填写。配置项分类与验证必需项没有默认值启动时必须提供如DB_PASSWORD,JWT_SECRET。应用启动时应做校验。可选项有合理的默认值如DB_HOSTlocalhost。考虑使用ConfigurationProperties和Validated进行类型安全和分组验证。不同环境的配置管理开发环境使用.env文件方便个人设置。测试/预发环境使用 CI/CD 管道注入环境变量或从配置中心读取。生产环境绝对不要使用配置文件。必须使用容器编排平台K8s的 Secrets。云服务商提供的密钥管理服务如 AWS Secrets Manager, Azure Key Vault, GCP Secret Manager。专业的配置中心如 Apollo, Nacos的私有命名空间。通过安全的发布流程注入环境变量。安全加固密码复杂度确保数据库密码、JWT Secret 等有足够的长度和复杂度。权限最小化数据库用户应只有应用所需的最小权限SELECT, INSERT, UPDATE, DELETE而非ALL PRIVILEGES。定期轮换建立密钥轮换机制并确保应用支持动态更新配置如使用 Spring Cloud Config 或 Apollo 的配置热更新。审计与监控监控对包含敏感信息的环境变量或配置文件的访问日志。团队协作流程在 Pull Request 审查中加入对配置文件的检查确保没有新的敏感信息被硬编码。新成员加入时通过.env.example和README即可快速搭建本地环境。使用 Docker Compose 时通过env_file指令引入.env但确保.env不在镜像构建上下文中。备份与恢复将.env.example和所有application-*.yml.template文件纳入版本控制。生产环境的真实配置如 K8s Secrets 的定义文件不含具体值也应进行版本控制但存储在只有运维人员有权限访问的私有仓库中。7. 总结通过本文的实践我们彻底告别了在代码库中提交敏感信息明文的历史。核心要点总结如下核心原则代码与配置分离敏感信息永不入库。关键技术利用环境变量和 Spring Boot 的外部化配置机制。关键文件application.yml提交存放公共和非敏感配置。.env.example提交作为环境变量的模板和文档。.env和外部application-*.yml忽略存放个人或环境的真实敏感信息。安全链条本地开发靠.env测试环境靠 CI 变量生产环境靠云平台 Secret 管理或配置中心。团队规范通过.gitignore、代码审查和标准化流程保障规范落地。这套方案不仅适用于 Spring Boot其思想可以平移到任何语言和框架。关键在于建立团队共识和规范的流程。从今天开始检查你的项目将残留的“硬编码”密码迁移出来这可能是你最后一次需要处理“有码”版本的问题。养成良好的配置管理习惯是迈向专业开发运维的重要一步。如果在迁移过程中遇到具体问题欢迎在评论区交流讨论。

相关新闻

Unity Hub模块管理失效?彻底解决Add Modules按钮消失问题

Unity Hub模块管理失效?彻底解决Add Modules按钮消失问题

1. 问题现象与根源剖析 如果你正在为Unity Hub里那个本该出现的“Add Modules”按钮消失不见而抓狂,相信我,你绝对不是一个人。这个问题我见过太多次了,尤其是在团队协作、更换电脑或者从旧版本迁移项目时,几乎成了Unity新手的“入…

2026/8/10 20:10:22 阅读更多 →
深入解析NewTab-Redirect:5个高效配置技巧实现浏览器新标签页完全自定义

深入解析NewTab-Redirect:5个高效配置技巧实现浏览器新标签页完全自定义

深入解析NewTab-Redirect:5个高效配置技巧实现浏览器新标签页完全自定义 【免费下载链接】NewTab-Redirect NewTab Redirect! is an extension for Google Chrome which allows the user to replace the page displayed when creating a new tab. 项目地址: https…

2026/8/10 20:10:39 阅读更多 →
Matlab实现综合能源系统优化:碳交易与氢能应用

Matlab实现综合能源系统优化:碳交易与氢能应用

1. 项目背景与核心价值 在能源结构转型的大背景下,综合能源系统的优化调度正面临碳排放约束与氢能应用的双重挑战。我们团队开发的这个Matlab解决方案,针对性地整合了阶梯式碳交易机制和电制氢(P2H)技术,实现了热电联供系统在经济性和环保性上…

2026/8/10 19:39:56 阅读更多 →

最新新闻

完整指南:OpenCore Legacy Patcher技术解析与高级应用

完整指南:OpenCore Legacy Patcher技术解析与高级应用

完整指南:OpenCore Legacy Patcher技术解析与高级应用 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher(OCLP&…

2026/8/10 20:10:21 阅读更多 →
MyTonWallet多账户管理技巧:轻松切换和管理你的数字资产

MyTonWallet多账户管理技巧:轻松切换和管理你的数字资产

MyTonWallet多账户管理技巧:轻松切换和管理你的数字资产 【免费下载链接】mytonwallet A crypto wallet youll actually enjoy. 项目地址: https://gitcode.com/gh_mirrors/my/mytonwallet MyTonWallet是一款让你真正享受使用体验的加密货币钱包,…

2026/8/10 20:10:21 阅读更多 →
Mermaid Live Editor实战指南:浏览器中实时图表创作的终极解决方案

Mermaid Live Editor实战指南:浏览器中实时图表创作的终极解决方案

Mermaid Live Editor实战指南:浏览器中实时图表创作的终极解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid…

2026/8/10 20:10:21 阅读更多 →
DevOps Interview Guide中的数据安全:加密与访问控制的终极指南

DevOps Interview Guide中的数据安全:加密与访问控制的终极指南

DevOps Interview Guide中的数据安全:加密与访问控制的终极指南 【免费下载链接】DevOps-Interview-Guide DevOps Interview Guide 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Interview-Guide 在当今DevOps环境中,数据安全已成为…

2026/8/10 20:10:21 阅读更多 →
Claude自动模式:如何防御提示注入,提升AI代码生成安全

Claude自动模式:如何防御提示注入,提升AI代码生成安全

在实际使用 Claude 这类大型语言模型进行代码生成或技术任务时,开发者最关心的问题之一就是“提示注入”。简单来说,提示注入是指用户通过精心设计的输入,试图绕过或覆盖开发者预设的系统指令、角色设定或安全护栏,从而让模型执行…

2026/8/10 20:10:20 阅读更多 →
Kaleido-base vs 其他价值观模型:为什么它能实现83.5%的关联准确率?

Kaleido-base vs 其他价值观模型:为什么它能实现83.5%的关联准确率?

Kaleido-base vs 其他价值观模型:为什么它能实现83.5%的关联准确率? 【免费下载链接】kaleido-base 项目地址: https://ai.gitcode.com/hf_mirrors/LLM-Research/kaleido-base Kaleido-base作为HuggingFace镜像项目中的重要模型,在价…

2026/8/10 20:09:20 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

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

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

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

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

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

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

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

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

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

2026/8/10 1:05:29 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/10 1:05:29 阅读更多 →
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/10 17:07:33 阅读更多 →