ECharts多系列柱状图零值占位解决方案:数据预处理与视觉映射实践
1. 问题场景当数据为零时柱状图为何“消失”了最近在做一个后台数据看板用到了ECharts这个强大的图表库来展示多列柱状图。需求很常见横轴是时间比如一周的每一天纵轴是数值每个时间点上有多个系列的数据比如“访问量”、“订单数”、“转化率”等等用不同颜色的柱子并排展示。开发过程本来挺顺利的直到测试同学提了一个Bug“为什么周三的‘订单数’这一列数据是0图表上就直接空了一块其他系列的柱子都挤过去了看起来像是周三没有‘订单数’这个指标一样。”我一看还真是。在ECharts默认的绘制逻辑里当某个系列在某个类目比如周三上的数据值为0时它对应的柱子高度就是0。这本身没问题但关键在于这个“高度为0”的柱子不参与占位。想象一下本来三个并排的柱子共享一个横轴刻度下的空间现在其中一个“隐身”了剩下的两个柱子就会自动向中间靠拢占据原本属于三个柱子的总宽度。从视觉上看周三这个位置就只有两个柱子很容易让看报告的人误以为周三缺失了“订单数”这个数据系列而不是数据为零。这个细节问题在数据对比分析场景下其实挺致命的。数据看板的核心价值之一是提供准确、无歧义的视觉信息。一个“消失”的柱子可能会引导业务方做出错误的判断比如认为某个渠道当天没有运营动作或者某个产品线停了。所以我们需要让值为0的柱子依然以一个“占位符”的形式存在明确告诉使用者“这个指标有但数值是零。”2. ECharts多系列柱状图的默认布局机制要解决问题得先理解ECharts是怎么画出一组并列柱子的。当我们配置一个包含多个series的柱状图时ECharts内部会为每个category类目即横轴的一个刻度点分配一段固定的绘图空间。假设我们有三个系列A, B, CECharts默认的barGap柱子间的间隙和barCategoryGap类目间的间隙会共同决定每个柱子的宽度和位置。计算过程大致是在一个类目宽度内减去两边的间隙和柱子之间的间隙剩下的总宽度平均分给当前类目下所有需要绘制的系列。这里的关键词是“需要绘制的系列”。ECharts在计算布局时会检查每个系列在当前类目下的数据。如果数据是null、undefined或者被判断为“不绘制”例如在折线图中connectNulls为false时该系列可能会被跳过。对于数值0ECharts的默认行为是绘制一个高度为0的图形元素。然而这个高度为0的元素在布局计算中可能被特殊处理了。从实际表现来看ECharts在多数版本和默认配置下似乎没有为这个高度为0的柱子保留独立的“占位”宽度导致布局空间被重新分配给了其他有效高度0的柱子。这背后的设计考量可能是为了优化视觉体验当数据为零时一个看不见的柱子如果还占着位置可能会让图表看起来稀疏、不紧凑。但在多系列对比的场景下这种“紧凑”恰恰破坏了系列之间位置的对应关系牺牲了图表的信息准确性。我们可以通过一个简单的配置来验证。以下是一个基础的多系列柱状图代码第二个系列在‘周三’的数据为0option { xAxis: { type: category, data: [周一, 周二, 周三, 周四, 周五] }, yAxis: { type: value }, series: [ { name: 访问量, type: bar, data: [120, 200, 150, 80, 70] }, { name: 订单数, type: bar, data: [100, 150, 0, 120, 90] // 周三的数据为0 }, { name: 转化率, type: bar, data: [0.8, 0.75, 0.82, 0.65, 0.9] } ] };用这段代码生成的图表你会清晰地看到‘周三’的位置上只有‘访问量’和‘转化率’两个柱子它们之间的间隙比别的日子要大因为共享了原本属于三个柱子的空间而‘订单数’的柱子“消失”了。3. 核心解决方案使用空数据占位与自定义视觉映射要让值为0的柱子也占位核心思路是欺骗ECharts的布局引擎让它认为这个位置上始终有一个“需要绘制”的系列。我们不能直接改变0这个值的布局行为但我们可以换一种数据表达方式。最直接有效的方案是将数值0替换为一个极小的正数如0.001然后通过视觉映射visualMap或标签格式化label.formatter将这个值在视觉上表现为0。这样做的原理是ECharts在计算布局时看到的是一个大于0的有效数值因此会为这个系列分配应有的宽度。然后我们再通过配置让这个“极矮”的柱子看起来和0没有区别。3.1 方案一数据预处理与视觉映射推荐这是最稳健和视觉可控的方案。我们在准备图表数据时就对数据进行一次转换。步骤一数据转换在将数据传入series.data之前遍历数据数组。如果遇到值为0的数据点我们将其替换为一个非常小的正数比如1e-90.000000001或0.001。同时我们需要记录下哪些位置是原始零值以便后续处理。// 假设这是原始数据 const rawSeriesData [100, 150, 0, 120, 90]; const placeholderValue 0.001; // 占位值 const processedData rawSeriesData.map(value { return value 0 ? placeholderValue : value; }); // processedData 变为 [100, 150, 0.001, 120, 90]步骤二配置视觉映射visualMap组件视觉映射组件可以将一个连续的数据值映射到视觉元素如颜色、透明度。我们可以用它来将我们设定的占位值0.001及其附近的一个极小范围映射到完全透明。option { // ... xAxis, yAxis 配置同上 visualMap: { type: continuous, dimension: 1, // 表示映射的是 series.data 里的第1个维度即y值 seriesIndex: 1, // 只对第二个系列订单数生效如果想对所有系列生效可以去掉此配置或指定多个index show: false, // 不显示visualMap的控制器 pieces: [ // 分段式视觉映射 { gt: 0, // 大于0 lte: 0.001, // 小于等于0.001我们的占位值 color: rgba(0,0,0,0) // 完全透明 }, { gt: 0.001, color: #5470c6 // 正常颜色 } ] }, series: [ {name: 访问量, type: bar, data: [120, 200, 150, 80, 70]}, { name: 订单数, type: bar, data: processedData, // 使用处理后的数据0已变为0.001 itemStyle: { color: #5470c6 // 系列的基础颜色 } }, {name: 转化率, type: bar, data: [0.8, 0.75, 0.82, 0.65, 0.9]} ] };通过这个配置所有值在(0, 0.001]区间的柱子即我们的占位柱子都会被渲染为完全透明rgba(0,0,0,0)肉眼完全看不见但它实实在在地占据了布局空间。其他正常数值的柱子则显示为正常的蓝色。注意pieces配置中的gt大于和lte小于等于的边界值需要根据你选择的占位值精心设置。确保占位值落在透明区间内而大于占位值的正常数据哪怕只大一点点落在有色区间。3.2 方案二自定义标签格式化与极细柱子如果你觉得配置visualMap稍显复杂或者你的图表中不需要复杂的颜色映射还有一个更轻量的替代方案依然使用占位值但不将其设为透明而是通过itemStyle将其宽度设得非常细并配合标签格式化将显示的数值纠正为0。步骤一同样进行数据转换将0替换为占位值如0.001。步骤二配置系列的itemStyle和label。series: [ // ... 其他系列 { name: 订单数, type: bar, data: processedData, // [100, 150, 0.001, 120, 90] barWidth: 60%, // 系列默认宽度 itemStyle: { // 对每个数据项单独设置样式 color: function(params) { // 如果数据值等于占位值则柱子颜色设为透明或背景色宽度也几乎为0 // 但为了占位我们保留一个极细的边框或线 if (Math.abs(params.value - 0.001) 1e-10) { // 判断是否为占位值 return rgba(0,0,0,0); // 填充透明 } return #5470c6; }, borderWidth: function(params) { if (Math.abs(params.value - 0.001) 1e-10) { return 1; // 保留1像素的边框形成一个极细的竖线证明存在 } return 0; }, borderColor: #ccc // 细线的颜色 }, label: { show: true, position: top, formatter: function(params) { // 将占位值格式化为0显示 if (Math.abs(params.value - 0.001) 1e-10) { return 0; } return params.value; } } } ]这个方案的效果是零值位置会显示为一条几乎看不见的、1像素宽的细线或根据边框颜色可见并且标签明确显示为“0”。它既完成了占位又清晰地传达了数据信息。缺点是视觉上可能不如完全透明干净尤其是在深色背景下。3.3 方案对比与选型建议特性方案一视觉映射透明化方案二极细柱子标签格式化实现复杂度中等需配置visualMap较低逻辑集中在itemStyle和label函数中视觉表现最干净零值位置完全空白但布局保留保留一条极细线或点有“痕迹”维护性较好映射规则集中管理尚可但样式逻辑分散在函数里适用场景对视觉纯净度要求高零值无需特殊标记需要明确提示此处有数据但为零不介意细微痕迹性能影响几乎无影响几乎无影响个人建议对于大多数后台数据看板我推荐方案一。因为它能最彻底地实现“视觉上为零布局上存在”的目标且配置一次后对后续数据更新透明只需保持数据预处理逻辑即可。方案二更适合需要强调“此处有零值”的场景比如一些需要打印的报表一条细线可以避免被误认为是漏印。4. 进阶处理应对动态数据与多系列统一配置在实际项目中数据往往是动态加载的系列也可能增减。我们需要一个更通用的处理方案。4.1 封装数据预处理函数我们可以编写一个通用的工具函数用于处理整个option中的series数据。/** * 处理ECharts柱状图数据将零值转换为占位符并自动配置visualMap * param {Object} echartsOption - ECharts配置项 * param {Number} placeholder - 占位值默认0.001 * returns {Object} 处理后的配置项 */ function processZeroValueForBar(echartsOption, placeholder 0.001) { const processedSeries []; const visualMapPieces []; echartsOption.series.forEach((seriesItem, seriesIndex) { if (seriesItem.type bar) { const originalData seriesItem.data; const processedData originalData.map(value { // 判断是否为0考虑数字和字符串情况 return (value 0) ? placeholder : value; // 使用 进行宽松比较兼容0 }); // 创建新的series配置 const newSeries { ...seriesItem, data: processedData }; processedSeries.push(newSeries); // 为该系列生成对应的visualMap分段配置 // 注意一个visualMap组件可以通过seriesIndex控制多个系列 // 这里我们为每个系列生成一个piece但实际可以合并 visualMapPieces.push( { gt: 0, lte: placeholder, color: rgba(0,0,0,0), seriesIndex: seriesIndex // 绑定到当前处理的系列索引 }, { gt: placeholder, color: seriesItem.itemStyle?.color || #5470c6 // 使用系列原颜色或默认色 } ); } else { // 非柱状图系列原样保留 processedSeries.push(seriesItem); } }); // 更新option echartsOption.series processedSeries; // 配置或更新visualMap if (!echartsOption.visualMap) { echartsOption.visualMap []; } // 这里简化处理添加一个新的visualMap配置。实际项目可能需要更复杂的合并逻辑。 echartsOption.visualMap.push({ type: continuous, show: false, pieces: visualMapPieces, // 注意上面的pieces写法在多个系列时可能需要调整更通用的做法是使用一个visualMap通过inRange和outOfRange配置函数 }); return echartsOption; } // 使用示例 let myOption { /* 你的原始option */ }; myOption processZeroValueForBar(myOption); myChart.setOption(myOption);这个函数提供了一个自动化处理的思路。但请注意实际应用中visualMap对于多系列的配置可能更复杂上述函数的visualMap部分可能需要根据你的图表结构进行调整。一个更简单的实践是统一将所有系列的零值替换为占位值然后只设置一个全局的、透明的颜色映射区间让所有系列的占位值都变透明。4.2 使用统一的透明区间假设我们统一使用0.001作为占位值那么可以这样配置一个全局的visualMapoption { // ... 其他配置 visualMap: { type: continuous, show: false, // 不指定seriesIndex默认对所有系列生效 pieces: [ { gt: 0, lte: 0.001, // 所有系列中值在(0, 0.001]区间的图形元素 color: rgba(0,0,0,0) // 全部透明 } // 注意这里没有配置“gt: 0.001”的区间因为ECharts会使用系列自带的或默认的颜色 ] }, series: [ // ... 所有系列的数据都已经将0预处理为0.001 ] };这种方式更简洁前提是你确保所有柱状图系列都经过了同样的数据预处理。4.3 在Vue/React等框架中的集成在现代化前端项目中我们通常在组件中管理数据和图表配置。以Vue 3 Composition API为例我们可以利用计算属性computed来自动完成数据转换。template div refchartRef stylewidth: 600px; height: 400px;/div /template script setup import { ref, onMounted, computed, watch } from vue; import * as echarts from echarts; const chartRef ref(null); const rawData ref({ // 模拟从API获取的原始数据 days: [周一,周二,周三,周四,周五], visit: [120, 200, 150, 80, 70], order: [100, 150, 0, 120, 90], // 包含0 conversion: [0.8, 0.75, 0.82, 0.65, 0.9] }); // 计算属性处理后的系列数据 const processedSeries computed(() { const placeholder 0.001; return [ { name: 访问量, type: bar, data: rawData.value.visit // 这个系列没有0可以不处理 }, { name: 订单数, type: bar, data: rawData.value.order.map(v v 0 ? placeholder : v) }, { name: 转化率, type: bar, data: rawData.value.conversion // 假设也没有0 } ]; }); // 计算属性完整的图表配置 const chartOption computed(() { return { xAxis: { type: category, data: rawData.value.days }, yAxis: { type: value }, visualMap: { type: continuous, show: false, pieces: [{ gt: 0, lte: 0.001, color: rgba(0,0,0,0) }] }, series: processedSeries.value }; }); let myChart null; onMounted(() { myChart echarts.init(chartRef.value); myChart.setOption(chartOption.value); // 监听数据变化更新图表 watch(chartOption, (newVal) { myChart.setOption(newVal); }, { deep: true }); }); /script这样无论rawData如何变化经过computed属性的处理传递给图表的始终是已将零值替换的数据并且视觉映射配置是全局生效的实现了关注点分离和逻辑复用。5. 避坑指南与性能考量在实施上述方案时有以下几个常见的坑需要注意1. 占位值的选择与Y轴刻度如果你设置的占位值如0.001相对于其他正常数据如100, 150过小在有些Y轴刻度配置下如min为0这个占位值对应的柱子可能因为高度计算的四舍五入在像素级别上仍然表现为0高度从而可能被某些浏览器或渲染引擎优化掉。虽然概率极低但为了绝对稳妥可以选择一个稍大但依然视觉上可忽略的值例如0.01或0.1。同时确保Y轴的min设置为0这样0.01的柱子也能有一个微小的、确定的高度。2. 视觉映射与系列颜色的冲突如果你在series.itemStyle中为系列设置了颜色又在visualMap中通过pieces或inRange映射了颜色那么visualMap的映射会覆盖itemStyle的设置。确保你的visualMap配置逻辑完整对于非占位值的数据要映射到正确的颜色。上面示例中使用pieces并只定义占位值区间为透明其他区间不定义这样ECharts就会回退到系列自身的颜色配置是一个安全的方法。3. 大量数据下的性能数据预处理和visualMap的实时计算对性能影响微乎其微。但是如果你有极大量的数据点例如上万个并且每个点都触发visualMap的颜色计算可能会有轻微开销。在这种情况下可以考虑在数据源头进行预处理并将“是否为占位值”作为一个布尔标志位存储在数据项中然后在itemStyle的color回调函数中根据这个标志位直接返回透明色避免visualMap的连续计算。不过对于绝大多数业务图表这点性能差异无需考虑。4. 与“数据过滤”或“动态系列”功能的兼容性如果你的图表支持交互比如用图例点击来隐藏/显示某个系列或者用数据缩放dataZoom上述方案仍然有效。因为我们的处理发生在数据层面隐藏系列或缩放视图只是改变了ECharts渲染的数据范围不会影响已处理数据的占位属性。5. 服务端渲染SSR或图片导出如果你的应用涉及ECharts的服务端渲染如Node.js环境使用echarts-node或需要导出图片上述方案同样适用。透明色的柱子在导出图片时就是完全透明的不会留下任何痕迹保证了图片与网页显示的一致性。6. 总结与最佳实践让ECharts多列柱状图中数值为0的柱子保持占位是一个对图表数据准确性至关重要的细节优化。通过将数据层面的0替换为一个极小的占位值如0.001并利用visualMap将其视觉映射为透明我们可以完美地实现“布局占位视觉为零”的效果。最佳实践流程如下数据准备阶段在将数据绑定到series.data之前进行一次遍历将所有严格等于0或你认为需要占位的零值的数据替换为一个约定的占位值例如0.001。可以使用map函数简洁地完成。图表配置阶段在option中配置一个visualMap组件将其设置为不显示show: false。配置一个分段pieces将数值范围(0, 占位值]映射为完全透明rgba(0,0,0,0)。无需为大于占位值的区间指定颜色ECharts会自动使用系列定义的颜色。框架集成在Vue/React等框架中利用响应式数据或计算属性来自动化步骤1将处理后的数据与图表配置解耦使业务逻辑更清晰。测试验证生成图表后重点检查数据为0的类目点。确保该位置上所有系列的柱子间距与其他数据点一致。可以将鼠标悬停在透明柱子的位置如果配置了tooltip应该能正常触发并显示该系列的数据值为0或你格式化后的显示值。这个方案的优势在于它非侵入性地解决了问题没有修改ECharts的内部逻辑完全依靠其现有的配置能力因此具有很好的稳定性和可维护性。它提醒我们在面对可视化库的默认行为不符合业务需求时灵活运用数据转换和视觉映射这两个强大工具往往能创造出更贴合实际使用场景的解决方案。

相关新闻

《盗信情缘》:从信息错位看现代社会的沟通失效与系统荒诞

《盗信情缘》:从信息错位看现代社会的沟通失效与系统荒诞

1. 先搞清楚《盗信情缘》到底是一部什么样的电影如果你在找一部能让你笑中带泪、看完后劲儿十足的电影,那1997年由萨布导演的《盗信情缘》绝对值得你花上两个小时。这部电影最核心的魅力,在于它用一种近乎荒诞的喜剧外壳,包裹了一个关于孤独、…

2026/8/12 23:24:48 阅读更多 →
Jellyfin字幕管理终极指南:如何实现自动下载和多语言支持

Jellyfin字幕管理终极指南:如何实现自动下载和多语言支持

Jellyfin字幕管理终极指南:如何实现自动下载和多语言支持 【免费下载链接】jellyfin The Free Software Media System - Server Backend & API 项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin Jellyfin作为开源媒体服务器,提供了…

2026/8/12 23:24:48 阅读更多 →
终极PS Vita游戏管理器:pkgj完全指南与快速安装教程

终极PS Vita游戏管理器:pkgj完全指南与快速安装教程

终极PS Vita游戏管理器:pkgj完全指南与快速安装教程 【免费下载链接】pkgj pkg download & installation directly on Vita 项目地址: https://gitcode.com/gh_mirrors/pk/pkgj pkgj是专为PS Vita设计的终极游戏下载管理器,让你无需电脑就能直…

2026/8/14 4:24:58 阅读更多 →

最新新闻

如何低成本快速建设一个微商的网站并实现销量爆发式增长全攻略

如何低成本快速建设一个微商的网站并实现销量爆发式增长全攻略

在这个万物互联、指尖触达一切的时代,如果你还在纠结要不要搞自己的私域流量池,要不要搞自己的独立商城,那我只能告诉你,你的竞争对手可能已经悄悄把客户圈走了。很多人一提到“建设一个微商的网站”,脑海中浮现的往往是那些花里胡哨、代码乱飞、加载慢得像蜗牛的科技产品…

2026/8/14 5:25:37 阅读更多 →
驾驶事故处理策略

驾驶事故处理策略

拿了驾照2个月,平时租车先练练,这里总结一下事故处理操作指南,防范于未然。其他blog如下: 学车过程与经验记录:(考证相关) https://blog.csdn.net/runafterhit/article/details/117394820 自动挡…

2026/8/14 5:25:37 阅读更多 →
Windows 10硬盘卡顿终极解决指南:从诊断到优化,告别系统延迟

Windows 10硬盘卡顿终极解决指南:从诊断到优化,告别系统延迟

1. 项目概述:当Windows 10遇上硬盘“卡顿”如果你正在用Windows 10,并且感觉电脑时不时就“卡”一下,鼠标转圈,程序无响应,那种感觉就像开车时突然踩了一脚急刹,非常影响效率。这种“卡顿”很多时候并非CPU…

2026/8/14 5:25:37 阅读更多 →
仅需25秒!山东科技大学开发高性能燃料电池阴极:高功率、耐CO₂、稳定运行250小时

仅需25秒!山东科技大学开发高性能燃料电池阴极:高功率、耐CO₂、稳定运行250小时

导读:中温固体氧化物燃料电池要降低工作温度,首先要跨过阴极氧还原反应变慢这道门槛;而含Sr钙钛矿阴极又容易受CO2侵蚀。山东科技大学Ye Han团队将Bi0.5Sr0.5FeO3−δ(BSFO)与Ce0.8Pr0.2O2−δ(CPO&#xf…

2026/8/14 5:25:37 阅读更多 →
揭秘叶县建设局网站背后的民生温度与工程品质

揭秘叶县建设局网站背后的民生温度与工程品质

在这个信息爆炸、指尖触达一切的时代,我们对于政府部门的印象,往往还停留在那些厚重的文件柜、繁琐的办事流程或者是那个总是排着长队的办事大厅里。很多人提到“叶县建设局”,脑海里浮现的可能是钢筋水泥的冰冷触感,或者是轰鸣作响的建筑工地。但是,当我真正沉下心来,去…

2026/8/14 5:25:37 阅读更多 →
Linux系统用户态根据虚拟地址获取物理地址的方式

Linux系统用户态根据虚拟地址获取物理地址的方式

之前做项目的时候,也会遇到过根据页表,由虚拟地址翻译物理地址的需求,一般的做法是HACK内核,在内核中加入HACK代码,思路无非就是通过页表进行转换,但是现在有了一种新的方式,这种方式下,不需要HACK内核,也不需要重新编译内核,便能够根据进程的虚拟地址,得到它的物理…

2026/8/14 5:24:37 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

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/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

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

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

2026/8/13 10:41:49 阅读更多 →
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/13 10:41:49 阅读更多 →