重构这件“小”事儿 | 得物技术

本文以一个Web项目的业务代码重构实践作为依据,来探讨项目业务代码重构过程中遇到的开发问题,以及重构过程中的一些注意点,希望可以给项目开发和服务开发维护重构提供一些通用的参考与思路。
这里不探讨大型项目的重构实践,毕竟一个大型项目的重构,更偏重于架构体系完善更新与业务领域拆分,它所涉及的架构体系、人力资源、部门协调等等其他问题都具有很大的挑战。 另外大部分开发所负责的仅是其中的一个服务或者模块,这里探讨的内容可能对拆分后的服务重构更具参考意义。

1、项目代码重构的背景

1.1 背景问题

2022年年初,我们小组接手了一个已经开发五六个月的项目,该项目正处于快速迭代时期。我们本以为迭代时间不长,接手之大概能很快上手轻松切入业务,但往往我们提到这个“但是”的时候,紧接着就是反转,理想和实际还是有差距的。

众所周知,一般快速迭代赶进度的项目,都会存在或多或少的问题。我们遇到的这个项目也正好精准的在这个范围之内。我们在接手后第一次版本迭代中,已经提前考虑对项目不熟悉的情况,并做了一定的准备,但依然有不少非预期的情况出现。

这一次的情况,让我们不得不再次提前评估以后迭代可能会遇到的问题!

1.2 需要改变现状

项目第一个版本迭代就出现难以预期的问题,这不合理!在解决完当前版本已经发现的问题之后,我们花费一些时间去大概梳理了一下原来的项目代码,看了不少接口的大致实现。

本身看看代码这是个小事情,但是这一看不要紧,好多的接口实现的逻辑都存在问题(比如在循环中调用数据库查询,多层次无效缓存实现,缓存淘汰机制复杂性能差等等... ),这些问题涉及性能、稳定性、业务异常等多个方面。如果不去解决,除了影响用户体验,还会给我们的正常项目迭代和维护造成了极大的干扰!

这个项目是用Python开发的内部项目,该项目本身是作为toB类型的内部工具来开发的。而目前因为项目业务场景的扩展,要越来越多的承担toC的功能,在得物App中使用场景也同样增加,这对项目性能和稳定性又带来了额外的挑战。

我们迫切需要解决这些不稳定因素,快速的切入业务,开展正常的业务迭代,以满足需求的变化。

1.3 重构的初步想法

对于那些已经发现的问题,如果可以快速修复的,我们都进行了修复并验证发布,也明显取得了一些效果。但是还有不少有共性的大类问题充斥在代码中,使我们不能轻易的去对现有的代码动刀,这些问题也是亟待解决的。

当时,正好结合公司部门技术栈统一(业务项目转为使用Java/Go语言)的要求,我们决定在切入业务的过程中,逐渐通过重构迭代,来提升性能,减少问题,并接入公司的技术基建体系,降低代码的维护成本。

虽然有了初步的重构想法,但是这显然不是一件容易的事情!

重构之前,我们还有很多前置工作要做。

2、重构的前置工作

2.1 熟悉业务流程并分析问题与痛点

在正式重构之前,我们浏览了项目的交接文档,往期的产品文档,以此做到对项目整体产品流程做到心中有数。

而后,我们根据现有的产品流程,评估了从头开发该项目应实施的主要架构和大致技术方案,经过评审完善再作为重构参照,这相当于给项目的整体重构优化提供了一个目标样板。

用以上的方案作为参考的话,再分析整个产品流程闭环上的接口,我们很快可以定位到项目中存在的一系列问题,当然这些问题大多数都是表面的和宏观的,细节上的很多还需要我们在项目中进一步挖掘。

2.2 评估重构成本与重构推进方式

我们作出重构决定的时候,已经做完了现有项目的基础分析。

现在我们将对比项目方案的差异,根据重构的难易程度和紧急程度来确定最终的处理方式。

  • 难易程度 根据 方案差异、修改难度、稳定要求、影响范围来 综合评估

  • 紧急程度 根据 迭代复用、接口性能、异常频次、受益范围来 综合评估

处理方式分析如下表:

难度 \ 紧急程度

紧急

中等

不急

简单

重构

重构,顺序次后

重构,顺序再次

中等

重构

重构,顺序次后

重构,顺序再次

困难

重构( 或迁移观察 )

重构( 或迁移观察 )

待定

由于我们整体项目处于快速迭代当中,并且有限的人力都要去跟版本需求,所以重构迁移的时间是极度受限的,我们虽然定了模块的重构顺序,但是怎么抽调人力去跟进这些事情呢?

需求迭代本身就涉及到大量的接口,如果我们本身已经将新的项目构建起来,这里迭代的接口顺势就可以迁移重构到新的项目代码库中去,在迭代的同时推进项目的重构。

其他时候再加上一些零散的时间,我们可以逐步的将重构向前推进,但是在这种情况下,我们一定要接受渐进重构的时间跨度会很长这个实际情况。

2.3 完善并确定流量迁移方案

大多数WEB项目基本都会有这些通用架构,如下图所示:

在这样的通用架构里,我们既然切换了底层语言,那公司基建支撑的相应架构,就可以用起来了。

我们最终选择的具体流量迁移方案如下:

  1. 初始化新的项目仓库并完善发布部署流程

  2. 打通新老两个项目的用户认证方式并做到双向兼容(如果网关统一承接用户认证,可以省去这一步)

  3. 利用网关层的能力去配置转发规则,使用特定或者通用规则将接口流量导入新项目中(如果没有网关可以考虑简单接入Nginx配置转发)

  4. 服务端完成一个批次的接口重构迁移后,在测试环境切换流量到新项目并测试整体流程,通过测试再发布

  5. 重构中部分接口需要变更的,推进前端将调用切换到新接口

  6. 上线后跟踪流量与新接口功能状态,如有问题随时回滚

到目前为止,我们已经做好了所有的前置工作,那么现在我们 ready go !

3.1 基本运维监控体系完善

在完善运维体系方面,先统一整合了trace、日志、监控与告警。

优化点

问题

收益

典型思想

全面接入trace

无链路追踪功能

做到全链路监控

链路追踪

完善日志等级

日志分级不够完善

分级日志便于排查

日志系统

日志注入trace

日志无trace不方便关联

日志有链路追踪

问题日志追踪

metric

无监控信息

监控项目程序实时状态

metric

目前log、trace、metrics三者的整合打通也显得尤其重要,例如 OpenTelemetry 这样的工具提供成套的规范,可以让开发者快速集成。

在企业基建可以支撑的情况下,可以选择这三者,如果不能支持,推荐按照以下顺序完善 日志、trace、日志注入trace信息、metric 整个体系。

看一下下面的实例展示:

trace信息可以帮助我们追踪每一次的调用链路

日志注入trace信息可让我们对独立调用链路日志做快速筛选和时间维度分析, 根据traceId追踪同一条链路数据

{
    "level":"error",
    "ts":"2022-07-22T21:26:00.073+0800",
    "caller":"api/foo_bar.go:38",
    "msg":"[foo]bar",
    "error":"Post \"https://xxx.com/abc/xxx\": context deadline exceeded",
    "traceId":"0aee15dc63f617e751d17060xcf74b9c",
    "content":{
        "body":"json str",
        "resp":""
    }
}

监控体系监测业务项目运行状态

3.2 重整业务逻辑

业务逻辑设计中,有一些问题对开发迭代有很大的阻碍,大概如下:

优化点

问题

收益

典型思想

展示接口的数据写入逻辑

迁移到数据写入接口

非要不可则缓存中转

部分展示接口有写数据逻辑

导致数据无限增长

展示接口性能也差

削减无效数据写入

提升查询性能

大部分系统都是读大于写

读接口不做写逻辑

避免无效数据写入

计数逻辑独立并使用缓存

使用异步方式入库

计数逻辑依赖明细统计性能差

需要独立计数并展示

释放数据库统计压力

提升数据展示性能

预计算代替实时统计

缓存代替DB查询

迁移信息表的计数字段

独立为单表并先缓存

部分计数字段在基础表

更新TPS高影响表结构变更

削减数据库TPS压力

隔离冷热数据

冷热数据隔离

双向反查数据使用独立表

替代简单的jsonStr

双向关联的数据存储格式不好

无法满足双向查询和变更

更新写入难度过大

减少数据更新的交叉关联

并提升查询性能

合理设计数据表(三大范式)

简化双向关联的模型

独立管理关联关系

改造不合理的缓存体系

逐步精简缓存

替换缓存结构和数据

缓存体系设计不合理

相关缓存使用场景多流程长

难以一次性迁移

清理无效缓存

减少缓存回收难度

提升缓存使用效果

缓存结构选择

合理使用淘汰策略

业务流程从管理后台的增删改查,到客户端的展示并回收数据,这整个流程中,很容易出现一个问题点就会影响全流程的情况。

以上几个问题在变更的过程中,也是会对整体业务流程有贯通影响的,特别需要注意,所以单列了出来!这几个点也是改造起来比较困难的,我们也是根据紧急程度以及整体的梳理进度进行逐步重构。

优化点

问题

收益

典型思想

数据库查询网络 I/O 优化

列表类接口 循环网络I/O

减少各类列表接口 RT

最小化网络 I/O

削减接口返回字段

接口返回无效字段过多

减少干扰、削减流量

减少网络带宽占用

统一返回值字段数据类型

弱类型语言类型乱用

统一数据类型,便于管理

强类型

分类树递归生成优化

单次查询并重构复用

循环多层查询数据库 I/O过多

生成算法复杂度略高

统一分类树生成

集成过滤规则

O(n)时间复杂度,

递归并防止数据异常而死循环

非强关联逻辑功能拆分

部分接口业务逻辑隔离

但是接口强相关

剥离不同模块为多个接口

分治

解决语法类问题

循环迭代中改变SET

数据类型不匹配

数据存储格式 等(Python)

提升主流程稳定性

杜绝答案提交异步流程中断

数据与语法兼容

抽离相同逻辑

达成方法重用

相同逻辑方法分散不兼容

部分逻辑缺失、维护难度高

复用方法与逻辑

统一逻辑并降低维护难度

复用

离线数据同步优化

全量同步数据未分批

不支持断点补偿

限制批次数量分批同步

支持中断恢复

分批、控制上限

中断补偿

优化批量导入数据处理

业务导入数据处理逻辑有问题

关联比对多次查询切不用MAP

减少算法时间复杂度

提升处理速度

批量提取

MAP对比的O(1)复杂度

Redis慢查询优化

低效缓存优化

清理或拆解大KEY

未选对正确的数据结构

未对数据结构选择正确操作方法

例如: 存储set数据取单个元素使用 smembers 命令读取后比对,而不是使用 sismember

部分smembers读取切换为sismember,RT>50ms查询平均减少5个/秒, 优化完几乎无RT>100ms请求,提升吞吐效率显著

数据结构

算法复杂度

Redis单线程模型阻塞

缓存淘汰机制优化

部分缓存无有效淘汰机制

代码SCAN淘汰管理难性能差

合理设计

利用Redis自动过期机制

合理利用缓存淘汰机制

SQL索引调优

低效索引,交叉索引干扰

提升查询性能

索引调优 索引覆盖查询

异步消费脚本优化

MQ消费任务的幂等、事务性、补偿 逻辑需要确认

防丢、防重、补偿处理

幂等、事务 等

配置迁移到配置中心

部分配置硬编码需要迁移

统一管理配置

代码不包含敏感信息

分环境隔离配置

隐藏重要信息

只有生产者无消费着队列待处理

生产向无消费队列无限注入数据

导致队列无限膨胀

打通生产消费流程

取消无用队列减少空间占用

队列有生产必有消费

以上这些典型问题都是经过提炼总结过后的了,看起来只是有限的几个,但项目代码库中,每一个问题点都可能出现数次甚至数十次,所以才不得不将整体的代码都重构。

下面列举一些实际的例子:

1.列表类接口循环网络I/O的优化

// 这里代码就不贴了,我大概做个说明:

// 数据库ORM使用时候处理粗糙,额外写的GET方法,独立查询关联表
// 在列表接口中循环获取该数据即造成数据库网络I/O的循环调用

// 而通过ORM预加载的方式,则是削减查询并二次组装的数据
// 当然我们也可以自己查询列表数据,然后先遍历提取外键,将关联数据转换为map接口,再次遍历列表来组装结果数据

2.大量数据处理的时候分批操作

// 大量数据处理分批次进行
// 一是考虑内存用量、二是考虑I/O交互流量、三是考虑处理分块时间、四是考虑中断恢复
// 例如: 从数据库批量获取数据,然后批量上传到某处
// 注意: 分页批处理需要保证每一页数据不变化,否则会有错漏或者重复
page := 1 
pageSize := 10000
for {
    // 判断已经存在的断点数据,将条件恢复成断点条件

    // 直接 模拟查询的结构列表
    dataList := make([]itemStruct{}, 0) 
    
    // 此处处理分批后的业务逻辑
    ......

    // 处理完当前批次可以记录断点
    // 断点可以缓存在数据库、Redis等其他媒介中
    
    // 分页查询,查不到数据或者低于pageSize可以当成数据处理完了
    if (len(dataList) < pageSize) {
        break
    }
    // 查询条件切换为下一页    
    page += 1
}

3. Redis主从版大Key导致的慢查询优化前后对比

4.合理利用Redis的缓存淘汰机制(杜绝掉SCAN扫描的方式来淘汰KEY)

5.敏感数据转移到配置中心(例如这种硬编码的配置,需要迁移走)

4、重构经验总结

4.1 重构的成果收益

经过接近一年的渐进重构,我们大概完成了80%以上的功能模块,解决了以上提到的绝大部分问题,并且取得了很不错的提升。

主要表现在以下几个方面:

  • 已经全线接入trace、log、metric和告警,并可以根据这几个工具来指导项目维护和优化
  • 业务稳定性明显提升,从刚接手时候的经常报错修BUG到现在几乎没有问题
  • 不再有循环数据库查询I/O ,除了报表类接口,基本杜绝慢查询
  • 部分重点接口的性能提升明显,有一些后台接口极端RT值从10s以上压缩到1s以内,C端主要接口RT的99线在150ms内(非高并发设计场景,勿喷)
  • 可复用逻辑已尽量整合,完善并统一了之前不一致的业务逻辑,维护难度明显降低
  • 长链路的数据提交整体流程无丢失数据的异常发生
  • 业务方使用满意度提升

另外我们因为资源限制,截止目前,并未完成所有的重构工作,后续如果有资源投入,我们会继续推进这些问题的处理。

4.2 人员技能要求

我们也分析了本次重构对于开发人员的一些技能要求。

在所有参与的开发人员都经验比较足的情况下,基本上可以通过自我驱动以及经验,来发现上面列举的这些问题,并主动去解决,而不需要额外的培训、规范以及纠错。对于经验不是很丰富的开发者,就需要适当的总结和规范去指导作业。

抽取上面的问题来具体分析的话,不外乎如下这些技能:

  • 熟练使用当前项目所需要的开发语言,避免产生一些基础的语言问题

  • 对数据库有比较深的了解,能根据实际情况设计比较合理的数据结构并做到适当优化

  • 对常用的中间件使用比较熟悉,了解一些原理,避免在使用的时候只知其一不知其二从而踩坑又难以排查

  • 计算机的基础扎实,操作系统知识,算法与数据结构知识熟悉,可以写高效的代码

  • 了解高并发高可用架构,可以根据一些基本思想来指导开发与优化

4.3 规范执行与Review

除了以上的技能,一些规范的制定与执行也十分重要,不过相反的是,这是自上而下的流程,需要一定的管理层面的推进。

规范本身指定了行为边界,完善合理的规范制定之后,只要遵照执行,就可以避免绝大部分问题。另外Review制度可以促进规范的落地,避免空有规范而实践偏离的情况。

现行的好设计,在经过一定的时间之后,随着业务需求变化以及用户量的提升,或许又需要开启新一轮的优化或者重构,这也是正常的。

5、让重构成为“小”事

5.1 任务阶段化来变“小”当前事项

纷繁复杂的整套重构流程,如果混在一起,可能会让人望而却步。但是通过具体分析,阶段拆解的方式,将任务切割成一件件“小”事情,可以让我们用比较容易的方式去一步步解决问题。

另外拆解不是无脑拆分,还是需要有一个整体上的架构设计,否则可能会导致整个重构任务不能达到目标,既延长了时间,又难有成效。

重构过程的质量把控,可以通过规范、强制lint检查、Review、单元测试、性能测试 等方式去保障,这在每一阶段都是要贯彻执行的。

5.2 开发的几个主要思路

其实还有很多我们项目中没有出现的问题,恕我们不能一一列举。

但是在开发过程中本着几个主要的思路,我们就可以设计并开发出完善且高性能的项目。例如:

  • 最小维护难度:系统设计结构完整、逻辑算法简洁高效

  • 单个接口最小RT:接口性能要高,RT尽可能的小

  • 最小限度的数据交互:接口请求参数以及返回值尽量精简,以节约网络带宽

  • 异步削峰限流等:使用异步方式剥离额外逻辑,提升接口性能并提升用户体验

  • 最少访问频次:了解计算机各个硬件以及网络I/O的性能层级,尽量减少长耗时的I/O,转换为程序内部处理

  • 最少数据写入:数据写入需要尽量削减,减少流量以及无效数据的产生

  • 缓存与缓存一致性:多级缓存、缓存一致性、缓存淘汰策略等思路

  • 分治与隔离:该思想除了在拆分资源上体现(对象储存CDN剥离图片文件等内容),还可以在业务模块上体现出来(界定业务边界,合理拆分具体的模块与流程)

  • 高可用性:注重稳定性,整体项目流程稳定无差错,降级与灾备需要提前考虑

5.3 提升技能与经验积累

当然,并不是掌握上面说的这些思路就高枕无忧了。

例如:我们重构的项目之前就有通过异步方式来处理问题,但这个异步是因为本身接口未设计好导致性能受限,所以不得已采取的方案。本身一些长异步流程带来的数据不一致也会产生不少问题,在我们重构接口之后,就着手取消了这些异步任务,将其做成事务流程,显然就比之前的功能要好很多。

所以我们还是要加深自己在计算机基础知识层面的认知,以及拓展完善开发知识体系,成体系的掌握高可用高并发系统设计,学习积累和总结开发经验,才能让自己在项目程序设计开发中游刃有余。

文/预子

本文属得物技术原创,来源于:得物技术官网  

得物技术文章可以任意分享和转发,但请务必注明版权和来源:得物技术官网

相关推荐

从中心调度到自驱协作多 Agent 架构的三次反转|得物技术

本文探讨多Agent系统中的控制权分配问题,提出三大协作架构:Master Agent(中心调度)、任务看板(共享状态)与Advisor(轻量咨询)。通过划清上下文边界与模型边界,强调应以信息相关性而非职业标签划分Agent。三种模式分别将决策权集中于中心、下放至共享状态、再下沉至执行者,形成控制权逐步下沉的演进路径。案例显示,合理设计可提升复杂任务的并行性、弹性与可维护性。

SmartCodeTech的博客 397

Jev 实战:为AI工作流引入轻量决策层 x10倍提速|得物技术

完成这三个场景后,我对适用边界有了更明确的认识:它们都可以先定义答案范围,再根据判断结果驱动下一步操作。接入时,我会优先明确输入、选项、采纳条件和兜底路径,再评估Jev是否适合承担这一环节。结合这些实践,我更容易理解Jev(TypeSafe System One)作为专用结构化决策模型不生成自然语言,而是返回带概率的判断结果。后续接入时,我会继续从脚本中边界明确的判断任务开始,分别验证准确性、耗时和费用,再决定是否扩大使用范围。下面整理了相关能力、限制和接入要点,便于查阅。

SmartCodeTech的博客 342

国产算力·昇腾 910C 大模型推理优化(下):源码修改与算子优化,提速30%|得物技术

本文延续上篇,深入vllm-ascend源码优化:通过多流重叠实现MoE共享专家并行计算,消除冗余事件开销,并解除与FUSED_MC2的互斥限制,实现c=1下TPOT从8.2ms降至8.0ms;优化decode阶段host侧开销,引入状态跟踪跳过冗余拷贝;设计Block Table CPU快路径,规避小batch下NPU kernel启动延迟;针对GDN层融合L2Norm至recurrent kernel,减少算子调用与内存往返。综合优化后推理性能显著提升,形成可复用的昇腾910C大模型推理优化方法论。

SmartCodeTech的博客 227

国产算力·昇腾 910C 大模型推理优化(上):镜像更新与参数调优,提速 40%|得物技术

文中详细给出每一项优化的动机、实现(含具体源码改动路径与关键代码片段)、验证数据与踩坑记录(包括十余项实测无效或负向的尝试),希望为同样在国产算力上做推理优化的团队提供一份可直接复用的工程参考。

SmartCodeTech的博客 214

动态规则的 Agent 实践:用确定性工程驾驭 LLM 的资产智能验收

面对财务验收中规则多变、材料非结构化、核对复杂等痛点,传统规则引擎难以应对。系统采用“规则即配置”思路,由大语言模型(LLM)负责理解合同、扫描件等非结构化材料并执行语义比对,工程系统则保障流程编排与可追溯性。通过异步处理、幂等设计、三类流量隔离及双通道(文本/图像)处理,实现高效稳定运行。结合用户反馈构建自动标准答案,辅以试跑、回测与发布门禁机制,形成闭环质量体系。底层采用确定性工作流架构,确保行为可预期、可测试,真正实现灵活规则的快速迭代与安全上线。

SmartCodeTech的博客 342

发一张图,它居然“跃“出屏幕了?一文读懂得物 3D 空间图片技术实践

3D 空间图片功能的落地,涉及模型生成、内容分发、客户端渲染之间的一系列取舍。本文重点分享如何生产出高质量、小体积的模型,以及如何在手机上流畅运行。

SmartCodeTech的博客 555

别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?

你搜"af1",它得给你"空军一号"。这一年,得物交易搜索把召回从"做选择题"改成了"写答案"——不再从商品池里"找"最像的,而是让模型自己"生成"你真正想要的。从 LLM 语义索引到 HLLM、语义 ID,搜索是怎么从"检索"走向"生成"的?

SmartCodeTech的博客 593

指标平台:从语义底座到智能消费的实践路径|得物技术

这篇文章想做的,不是在本体化的宏大叙事上再叠加一层理论,而是把我们在真实落地中验证过的路径讲清楚:语义底座怎么从零建立起来、怎么保证质量不失控、怎么支撑 Text2SQL 和 AI Coding 两条消费主线,以及沿着这条路径往前走,下一步该往哪个方向发力。

SmartCodeTech的博客 314

企业级 MultiAgent 落地:Plan 模式与主子 Agent 协作|得物技术

基于 AgentScope Java 的企业级 MultiAgent 平台,为研发、数据分析和知识问答等场景提供统一的模型调用、工具接入、任务编排、流式输出与运行追踪能力。

SmartCodeTech的博客 299

得物小摊 AI Native 演进实录:用 Harness 构建可控 AI 交付

AI Coding 一个人用很顺手,进了团队就漏:指令没人审、经验难沉淀、过程看不见、链路不闭环。作者团队基于 Multica 做了 EP-Harness,把 Agent 当成员管,给它套一层可执行、可观察、可治理的 Harness,并让反馈闭环。成果:可追溯决策、多 Agent 协作,高频异常从每 4 小时 2400 多条降到个位数,对得物技术补上团队级 AI 协作关键一环。

SmartCodeTech的博客 539

企业级 MultiAgent 的记忆系统:短期上下文与四层记忆架构实现|得物技术

在 MultiAgent 平台中,Agent 的"记忆"能力是实现智能对话和个性化服务的核心资产。本文深入剖析 Agent 记忆系统的设计理念与实现细节,重点解析长期记忆架构的写入与加载流程,涵盖 LLM 智能判断、语义检索、Token 预算控制、冲突处理等关键技术,为开发者提供完整的技术实现参考。

SmartCodeTech的博客 502

EP-Harness:从个人 AI Coding 到团队级 Agent 工作流|得物技术

AI Coding 个人用得爽,一到团队就崩。EP-Harness 把 Agent 从聊天工具变成团队协作成员——可管理、可追溯、可闭环。落地后高频异常从 2400+/4h 收敛到个位数。

SmartCodeTech的博客 688

得物知识问答:复合检索 Agent 的系统设计实践

从"搜到什么用什么"到"搜→筛→挖→验"自主决策闭环——我们造了一个有判断力的 RAG Agent,不是套壳。

SmartCodeTech的博客 732

实战从零开始构建一个Coding Agent:Violin |得物技术

理解了 coding agent 的构建原理,也就掌握了理解其他 agent 的一把钥匙。笔者对每天都在使用的 agent 原理很感兴趣,于是决定自己写一个:violin。

SmartCodeTech的博客 926

AI Native 交易核心系统的研发范式|得物技术

如何改造旧研发流程适配 AI 编码?本文提出五道标准化关口治理思路,依托 Claude Code Spec-Driven 插件打通需求澄清、方案设计、TDD 落地、门禁管控与埋点监控,构建带人工确认门控的完整工作流,以五层自底向上架构实现 AI 编码规范化落地。

SmartCodeTech的博客 971

推荐系统体验的数字化突破:得物自动化评测平台的技术实践|AICon 文章整理

「得物推荐 AI Harness 工程化实践系列」的末篇内容,本系列共三篇连载。本篇(末篇)详解得物推荐评测平台的完整技术体系:从主观体验量化到大模型自动化评测流水线,涵盖多维度指标设计、人机协作提示词校验闭环、分布式任务调度与成本精控等核心工程实现,以及单周百万级审计需求下实现 91% 资源成本优化的工业级落地实战细节。

SmartCodeTech的博客 1492

RAG 核心概念与原理:Chunking、Embedding、相似度、HNSW 与多路召回|得物技术

决定 RAG 效果的关键不在大模型,而是文本切块、查询改写、多路召回与精排。合理切块存好知识库内容,向量匹配抓语义、BM25 匹配关键词互补。先优化用户提问,快速召回一批相关文档,再用精排模型精细筛选,整套检索流程配合到位,问答准确度才会明显提升。

SmartCodeTech的博客 1079

从“机械应答“到“服务伙伴“:得物高可控智能客服的 Agent 工程实践|AICon 演讲整理

本次分享围绕以下核心技术展开:客服 Agent 挑战与架构设计(Single-Agent→Multi-Agent→Harness);高可控性数据飞轮(PE 自动化 + DPO 训练);RL 策略训练和人工经验对齐;多轮半双工消息流控制。

SmartCodeTech的博客 743

得物推荐系统诊断 Agent:从 “调接口” 到 “会思考”|AICon 演讲整理

本文是得物技术专家在 AICon 上海演讲整理的技术实录。AICon上海2026_全球人工智能开发与应用大会暨大模型应用生态展_InfoQ技术大会「得物推荐 AI Harness 工程化实践系列」的中篇内容,本系列共三篇连载。本篇(中篇)进一步详解得物推荐复杂业务场景下,AI代码从生成、防护校验到安全上线的完整技术体系、自研AI Harness整体架构框架、全流程安全防护机制、混合智能体核心算法实现,以及工业级工程落地的实战细节。

SmartCodeTech的博客 1361

得物 OceanBase 落地实践

得物选型OceanBase多模数据库应对业务挑战,通过验证其高可用架构、存储压缩技术及混合负载处理能力。测试显示OceanBase在复杂查询场景性能较MySQL提升130-200倍,在高并发TP/AP混合场景表现优异,存储成本降低40%+。通过DBA内部报表业务试点验证其稳定性后,逐步推广至核心业务场景,优化数据库技术栈,实现性能与成本的双重收益。

SmartCodeTech的博客 1380

AI UITester:AI Native 的 UI 自动化测试新范式|得物技术

ai_uitester 代表了 AI Native 的 UI 自动化测试新范式:这不仅是工具的升级,而是测试范式的转变 ------ 从 "代码驱动" 转向 "视觉驱动",从 "人工调试" 转向 "AI 自愈",从 "三端分离" 转向 "统一抽象"。

SmartCodeTech的博客 773

从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理

本文是得物技术专家在 AICon 上海演讲整理的技术实录。「得物推荐 AI Harness 工程化实践系列」的开篇内容,本系列共三篇连载。将系统拆解得物推荐复杂业务场景下,AI 代码从生成、防护校验到安全上线的完整技术体系,逐一详解自研 AI Harness 整体架构框架、全流程安全防护机制、混合智能体核心算法实现,以及工业级工程落地的实战细节。本篇(上篇):将整体介绍团队自研的 AI Harness 体系,包括建设思路、全生命周期防护机制、混合智能体架构及落地效果。

SmartCodeTech的博客 1079

从表单到 Agent:得物社区活动搭建的 AI 实践之路

一场营销活动从策划到上线,运营要在三个系统间跳转 10 + 次、填写 40 + 个字段。我们用 AI 重新设计了这条链路 —— 从 “AI 帮你填表单” 到 “两阶段 Agent + 聚合工作台”。这篇文章记录的不是技术细节,而是这条路上的选择和反思。

SmartCodeTech的博客 740

从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流

埋点和指标需求中,消耗数据承接方的不是生成答案,而是补齐证据链、对齐历史口径、识别下游影响,并在生产写入前留下可追溯的确认记录。本文数据承接方指承接业务需求的数据同学或业务合作伙伴;后文讨论内部研发、元数据、查询和门禁能力在流程中的角色。

SmartCodeTech的博客 655

让 Claude Code 拥有自我进化和记忆系统|得物技术

本文记录了为 Claude Code 构建的一套持久化记忆与自我学习系统的设计思路与实现细节。这套系统让 AI 助手能够跨越会话边界记住用户习惯,并在每次对话结束后自动提炼行为规律和系统信息,通过向量检索快速提取关键信息,下一次对话时主动应用,逐步进化为更懂你的编程伙伴。

SmartCodeTech的博客 993

用 LLM Agent 重构告警排查流程|得物技术

告警排查需频繁切换日志、APM、链路追踪等多个平台,耗时 10~30 分钟,且高度依赖个人经验。我们做了 Troubleshooter——用 LLM Agent 自动完成数据采集、根因分析和处置建议生成。上线后中位数排查耗时从 20 分钟降到 4.4 分钟,覆盖 11 个服务和 10+ 种告警类型。

SmartCodeTech的博客 1002

HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术

HorizonVault是一款面向Kafka远程存储的高吞吐分布式存储引擎,通过分布式并行写入和状态感知调度解决冷数据存储的三大核心问题:吞吐瓶颈、性能抖动和恢复能力。系统采用分层架构,Meta负责全局资源调度,Broker处理请求路由,Store实现本地磁盘管理,形成完整的写入治理链路。通过将HDD磁盘提升为一等资源,实现顺序追加写入、多盘并行和慢盘隔离,在保证高吞吐的同时控制延迟。存储结构采用DiskStore组织磁盘资源,LogSegment顺序写入数据,IndexSegment定位读取,Change

SmartCodeTech的博客 889

Claude Code Harness 工程:数仓侧落地方案|得物技术

Harness 工程通过职责分层实现研发流水线可靠性提升。Claude 负责需求理解与代码生成等语义层工作;hooks 负责规范检查等确定性执行;Subagents 隔离血缘查询、自测等高 token 操作;Memory 承载跨会话状态持久化。四层协同使数仓 AI 开发从"对话式辅助"转变为"规则驱动的自动化流程"。

SmartCodeTech的博客 1089

BP Claw 破解 AI 编码输入难题 ——FlinkSpec 需求智能化实践|得物技术

本文为 FlinkSpec 系列之开篇,亦是这场工程化变革的序章。BP Claw 所立之处,不过链路之源。FlinkSpec 所图,乃以 AI 之力,将实时数仓从需求落地至验收上线的全程工序,熔铸为一套精密自洽、生生不息的智能工程体系。宏图未竟,后续系列将逐章揭幕,敬请期待!

SmartCodeTech的博客 1034

基于 Harness + SDD + 多仓管理模式的 AI 全栈开发实践|得物技术

Harness(约束)思维的本质是:给 AI 一个已有的实现作为参照,让它照着复刻一份,而不是凭空创造。就像给一个新入职的工程师说 "你照着这个模块的风格,写一个类似的",而不是 "你自由发挥"------ 前者往往能更快产出符合团队规范的代码。

SmartCodeTech的博客 1181
上一篇: 如何从1到99做好产品 | 得物技术
下一篇: 走进社区客户端测试 | 得物技术
得物技术
得物技术 得物技术官方账号 得物技术官方账号
博客等级 码龄6年 2492粉丝 407原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值