40-AI代码评审出现幻觉问题应该怎么处理

在之前的文章《37-AI 时代,代码评审方式究竟怎样优化?关键要点有哪些?》中已经提到,AI 代码评审基于 Code-Review-GPT-Gitlab 进行使用,因为这个开源库包含评分机制、问题反馈、修改建议和修正后的代码等部分,比较符合我的预期。 在使用了一段时间之后,考虑到要基于流程规范来操作,项目成员提交代码后,最好能看到 AI 代码评审报告,然后根据反馈的问题修改后再提交代码。 但怎样才算修改好了呢?这就需要制定一个标准,比如将 90 分作为评分标准,每个分支提交到仓库时,都需要达到 90 分以上,代码才能入库。 然而,以 90 分作为标准执行一段时间后,有同事反馈这个标准可能不太合理。因为通过 AI 代码评审,出现了一些幻觉问题,这会导致评分不准确,使得 90 分的要求难以达成。 幻觉问题一直是当下 AI 面临的较大难题,在我看来,这并非完全是由于私有化部署时使用的模型小、性能不够强大所致,很多市面上很强大的 AI 工具,同样存在这个问题。 加上,其实提交的代码只是变更部分,AI 代码评审时,只会对 diff 部分进行检查,这就会存在对业务认知不完整的问题,因为项目中一个完整的业务功能,并不一定就在一个文件里完整呈现的。 因此,流程调整为采用 “AI 预评审 + 人工复核” 的方式,依旧按照 90 分的评分要求,具体问题具体分析。如果出现幻觉问题,则灵活处理,而非因噎废食。 关于幻觉问题,一方面可以考虑升级配置,比如购买性能更好的显卡;另一方面只能等待行业发展,以有效解决 AI 幻觉问题。 在《当 99% 可靠性是及格线,我们如何为大模型装上工程 “安全带”?》这篇文章中,提到了对幻觉问题的探索和解决,后续发展情况仍需持续关注: 在 2025 世界人工智能大会(WAIC)上,蚂蚁集团旗下蚂蚁密算宣布对外开源高阶程序(High-Order Program)大模型可信应用技术框架,通过外部化控制与核验,为构建可信、可控、可维护的大模型应用提供了务实的参考标准。 除此之外,项目成员在提交代码之前,需要在 VSCode 中使用豆包 AI 插件,对所有改动的文件进行检查。 这样至少能在提交代码、进行分支合并之前,在本地提前暴露问题,无需等到提交代码后再用 AI 进行代码评审,从而简化大量工作。 不过,在本地使用豆包 AI 插件检查改动的代码时,无需过度检查。因为我发现,每次提问都会得到问题反馈,即便复制它建议的代码去询问,仍然会收到很多建议,这会让人感觉没完没了。 毕竟代码的写法、规范并非只有一套,功能的实现细节也千差万别,并非绝对统一。所以,只需检查一次,把特别明显的问题改掉即可,若是吹毛求疵,只会陷入无尽的循环。 至此,我之前认为代码评审完全可以由 AI 来完成并让整个流程顺畅运转的想法,显然有些激进了。 以当前情况来看,无论 AI 代码评审能达到何种程度,即便幻觉问题能得到有效解决,也不应该完全由 AI 来承担这项工作。 ...

2025-08-13 · 1 分钟 · 78 字

39-项目负责人怎么安排不同技术栈成员的任务

一般而言,项目的任务计划都是由项目负责人制定的,其中需要明确每一条任务的优先级、开发周期和开发负责人。 但是,有些项目负责人的技术背景是前端,有的是后端,还有的是终端。 这就会遇到一个问题:他们怎么去制定其他技术栈成员的任务并进行验收? 在此之前,我们默认都是由项目负责人完成这些工作的。比如,项目负责人张三是前端出身,现在他要给后端的李四制定开发任务。 通常的做法是,张三会和李四沟通要开发的功能,然后由李四给出功能开发所需的时间,接着张三填写任务时间,任务安排便完成了。 这里就存在可操作的空间,因为李四给出的时间没有第二人进行审核。而张三是前端出身,并不具备审核后端任务时间的能力。如此一来,任务安排就完全取决于李四是否厚道了。 我们一直反复强调人性,可依赖人性做事情,迟早会出问题。 今天李四心情好,可能就凭良心给出合理时间;哪天他心情不好,或许就会把任务时间拉长,好趁机摸鱼。 写到这里,我想起 2020 年的几场培训,培训老师说过的一句话让我印象深刻: “如果你不想吃亏的话,要以最坏的情况去判断你的员工。” 即便李四为人厚道、兢兢业业,不会偷奸耍滑,那你能保证王五、赵六也不会这样吗? 你真的有时间和精力去仔细分析每个人,或者持续观察他们的一言一行吗? 那样的话,你自己就不用干活了。 所以,还是要回归到流程规范上来,不回避任何问题,把它暴露在阳光下,通过望闻问切,仔细分析原因和我们的诉求。 接着就是大家沟通达成共识,用规定来约束,用流程从源头解决问题。 那接下来,如何从流程规范入手解决这个问题呢? 这要从我们的目的出发,我们的目的是对任务进行有效制定、跟进和验收,而不是流于形式。 既然要 “有效”,就要实事求是,杜绝虚假。而规避虚假的办法,就是专业的事情交给专业的人。 现实情况是,项目负责人并非全能全知,所以可以把这部分工作交给对应的同事来执行,引入技术端负责人的角色。 各项目可根据实际情况,设立前端负责人、后端负责人和终端负责人。他们的职责是协助项目负责人明确对应技术端任务的开发所需时间,跟进任务进展,并负责验收。 整个项目的人员架构就变成:项目成员 - 技术端负责人 - 项目负责人。 那么,项目成员的任务申请时间变更,由谁来审核呢? 本来我觉得,项目的全部任务本应由项目负责人审核,而技术端负责人已经对开发周期(即天数)进行了把关,项目负责人依据这一点判断即可。 但技术端负责人需要覆盖三个关键环节:制定、跟进和验收。变更属于跟进部分,如果这一环节改由项目负责人执行,整个任务的生命周期就无法形成闭环了。 在项目管理系统中,曾经的设计思路是:项目成员的任务时间变更,审核人都是项目负责人。 如果现在引入端负责人的角色,那么技术端成员的任务时间变更就应由对应的技术端负责人审核,而技术端负责人的任务变更则由项目负责人审核。 至此,我认为可以解决项目负责人如何制定、跟进和验收不同技术栈成员任务的问题。

2025-08-10 · 1 分钟 · 34 字

38-别让进度汇报成流水账,拆解任务加明确要求就管用

在这篇文章《19 - 过进度方式二:项目成员依次说明和演示任务完成情况》中,已经讲明了当前项目过进度的方式:要求各项目成员到前面的座位来,把上两周以及下两周要做的工作情况汇报一下。 但是,在执行大半年的时间里,发现有的项目成员在会议上汇报自己任务情况时,只是简单说明内容,两三句话就说完了。 怎么引导项目成员更多地反馈工作中的情况,而不是让会议变成形式化、流水账式的无意义会议呢? 我反复思考了一下,项目成员为什么不想说那么多呢?这个点其实在《19 - 过进度方式二:项目成员依次说明和演示任务完成情况》中也有过分析,这里就不再过多赘述了,无外乎就是多一事不如少一事 —— 只要我说得越少,问题也就越少。 不过,我也能想到其他的可能,比如 “就是线上修复了几个 Bug,没有什么可说的”“就是正常的功能开发,没什么可说的”“我做的是其他项目的,跟其他人关系不大,没什么可说的”。 关键点就在于 “没有什么可说的”。 为什么没有什么可说的呢? 难道每个人在开发的过程中,真的一点问题都没有吗? 每一条任务的制定,都包含需求、方案、研发、技术笔记和验收等多个环节。 这几个环节中,总该有可以说的点吧? 但是,为什么没有什么可说的呢?原因就是没有做好相关的工作。 很多需求只是一句话,或者口头说一下;很多方案也只是当面沟通一下,沟通好就完事了,没有整理成方案文档记录下来。 至于研发过程中遇到的问题,有些 Bug 在没解决之前是 Bug,解决之后恍然大悟,就会觉得问题不值一提 “原来如此,我居然会犯这个低级错误?” 所以,也就觉得没有什么值得总结和记录的了。 还有技术笔记,写这个是要花时间的,完全看每个人是否自觉去做,那真的太难了,大多数人的想法是,还不如省下这些时间去做下一条任务。 甚至,有些人会觉得,这种知识点还要写技术笔记,会不会让人觉得自己技术很菜、水平很低,还不如不写。 任何问题都要透过表象抓住本质,一般这种问题,只是从人身上入手,效果不会很理想的,你可以口头要求对方一次两次,过段时间,只要你稍微疏忽了,对方也就松懈了,所以,还是要从源头去解决,也就是要从流程入手、从规章制度入手,经过沟通讨论,定下一些规定,让大家一起遵守就好。 比如,项目负责人在制定任务的时候,需要把任务要求写清楚,任务要先整理详细的需求文档、解决方案和技术笔记。 之前可能只是 1 条 “支持 10 万台设备接入”的开发任务,里面涵盖着想让成员写各种文档的期望,现在这个事情直接挑明了,拆分成 3 条任务: 支持 10 万台设备接入需求文档 支持 10 万台设备接入解决方案 XXX 框架基本使用、疑难问题解决等技术笔记 这样,就把之前依赖项目成员自觉的工作,变成硬性要求,以任务形式下达,让工作从无序变成有序,从无条理变为有章法。 在这个基础上,项目进度会议中项目成员汇报进度时,就可以把这些资料都过一遍,然后再进行验收,应该能有效解决会议流水账的问题。

2025-07-21 · 1 分钟 · 49 字

37-AI 时代,代码评审方式究竟怎样优化?关键要点有哪些?

背景 在项目开发过程中,代码评审还是很重要的,主要是为了解决代码规范、功能开发方式、相互学习等问题,代码是否符合规范,关系到项目成员协作的问题。 如果写出来的代码风格五花八门,那么,在沟通交流上面,就额外增加了难度,而这是完全没有必要的。 除此之外,上面说到的功能开发方式问题,意思就是,每个人都有可能是孤岛,一个人的想法可能会有缺陷,如果多个人沟通以及探讨,相互学习,有可能会从不同视角发现潜在的问题。 人工代码评审 一直以来,我们要做项目代码评审,通常都是有这几种方式,比如项目组成员交叉验收各自的功能代码,然后把问题整理到文档,再一起组织代码评审会议,把问题都过一遍,然后安排任务去调整。一方面解决了代码存在的问题,另一方面通过深入交流,大家相互学习。 还有,就是在 GitLab 代码合并阶段,项目成员发起功能分支合并至主分支,由项目负责人去审查项目成员提交的代码分支。 如果没有问题,则合并到主分支;如果有问题,则反馈给项目成员。待项目成员修复完成再次发起分支代码合并,然后,项目负责人确认之后,合并到主分支。这个应该就是常规的代码评审流程。 但是,随着团队的发展以及对降本增效的要求,开始着手去研究,团队中哪些工作是有可优化的空间? 项目负责人承担的工作事务越来越多,怎么去有效简化无意义的工作,成为了当前亟需解决的问题。 SonarQube 基于上面降本增效的目的,我之前调研了 SonarQube 代码检测工具。 它基本支持了市面上的 Java、Go、JavaScript、TypeScript 等十多种语言,并提供几千条代码规则,用于代码规范检查、代码优化提示等代码质量问题。 支持结合 GitLab 的 CI/CD 做流水线事件中断,方便代码提交人员,自行去查看反馈的问题。 并且,提供 SonarLint 这个 IDE 插件,在代码编写时,就反馈存在的问题,并给出修改建议。 后来为了减少项目负责人的代码评审工作,整个部门的项目,就都接入了 SonarQube 来实现代码问题检查工作。 在使用 SonarQube 的过程中,给我印象深刻的主要有以下几点: 如果一个历史项目要接入使用 SonarQube 工具去检查代码,这个时候,势必会有很多问题反馈,比如可能 2000 个问题,这个时候,是否要立马安排时间去解决呢? 立马安排的话,就需要比较多的时间了,如果不立马安排解决的话,这些问题应该什么时候去解决呢? SonarQube 提出了一个 “新代码” 的概念了,意思就是,可以不立即就把这 2000 个问题修复掉,而是在项目功能迭代的过程中,逐步把有问题的代码修复掉。 因为项目功能有迭代,意味着,这部分代码就需要去改动,趁此机会,刚好同步解决掉遗留的代码问题,慢慢地,遗留的 2000 个问题就会以这种方式解决掉。 至于哪些没有迭代的,说明功能已经很稳定了,或者功能不重要,那优先级也相对更低了。 SonarQube 官网文档的这篇说明 《Clean as You Code》 提出的这个方法论,我觉得理念还是很不错的: SonarQube 旨在通过帮助您(开发人员)确保您提交到项目中的每个代码更改都没有问题,从而确保高代码质量和安全性。通过始终提交干净的代码,您可以逐步提高项目的整体质量。我们称这种方法为“Clean as You Code”。 Clean as You Code 的核心思想是将注意力和精力集中在新代码上。在您进行功能和改进时,SonarQube 会在每次新提交时分析您的代码,并在任何代码质量问题和安全问题上提醒您。然后,您可以立即解决这些问题,并确保添加到项目中的所有新代码始终是干净的。 ...

2025-07-02 · 1 分钟 · 130 字

36-《精力管理》摘要

精力就是做事情的能力。包括体能、情感、思维、意志四个方面。 今天我们要分析一条革命性的理论——管理精力,而非时间,才是是高效表现的基础。 我们与运动员合作成功的秘诀并非在于技巧或战略。人们通常认为,才华横溢的人面对挑战时只要配备足够技能,就能够发挥出最好的水平。从我们的经验来看却并非如此。精力才是完全点燃才华和技能的正解。 人们极少考虑我们消耗了多少精力储备,总是想当然地认为它能够随用随取。事实上,不断增长的需求逐步耗尽了我们的精力储备——尤其由于我们不对随着年龄出现的能力减退做任何补救。通过全方位的训练,我们可以极大地减缓身体和思维的衰退,并切实地深化情感和精神的能力,直至生命的尽头。 如果某件事你每次做之前都需要思考,你很可能不会长久坚持这件事。 通过运动和休息交替进行可以最大限度提高表现,这条理论最初由斐洛斯特拉图斯提出,他是古希腊运动员训练手册的编撰者。随着训练强度增大、对运动员要求提高,能力的恢复和补偿程度也必然相应增加,否则,运动员的表现将会逐渐下降。 持续健身能带来身心改善,但若停止一周,曾经的改善就会大幅退步,只要停止4周,这种改善就会完全消失。 自然本身存在规律的脉动,在活跃和休息之间有节奏、波浪形地交替。涨潮退潮,四季更替,日升日落,不胜枚举。同理,所有有机体都遵从恒久的节奏——鸟类迁徙,熊类冬眠,松鼠收集坚果,鱼儿产卵,生物的活动都有一定的间歇。 张弛有度是全情投入、维持机能和保持健康的关键。相反,单线化运动最终会导致机能障碍和死亡。想象一幅健康的脑电图或心电图是如何起伏波动的,再想象它的反面,是不是一条直线? 我拥有在任何情况下高度集中的能力,摒弃那些让我分心的事物。然而,我无法在打完18洞的过程里始终集中精力,即便可以,我怀疑我的思维也会过度损耗,思维变得混沌,最终还是无法推杆入洞。因而我制订了一套步骤,帮助我完成从高度集中到惬意放松的过渡,反之亦然。 从最实用的角度看,全情投入的能力取决于周期性休息的能力。 科技的进步永不止息。它本该帮我们更好地感知周围的事物,然而却成为现实中导致我们无法全情投入的祸因。 《心流》的作者、心理学家米哈里·契克森米哈写道,“最佳时刻,往往发生在一个人的身心为了达成艰难目标或完成有意义的事情,而自愿达到极限的时候。” 我们还发现,喝水或许是最常被人忽略的体能再生方式。口渴不会像饥饿一样散发出明显的信号,等我们感到口渴的时候,身体或许已经缺水很久了。一家研究机构称,每天至少饮用1.8公斤水对维持体能有诸多好处。 睡眠需求随年龄、性别、基因体能而异,但普遍的科学共识是:人体每晚需要7至8小时的睡眠才可以运转良好。还有数项研究发现,即使将人们隔绝自然光或钟表,他们还是会每24小时睡眠7至8个小时。 小憩就是一种精力恢复手段。斯坦皮发现,小睡片刻的工人即便不能长时间睡眠,仍可以保持超过24小时的惊人高效和敏锐。唯一需要注意的地方就是小憩需要定时,以免受试者陷入更深的睡眠中。如果小憩超出30或40分钟,许多受试者会感到眩晕无力,甚至比不睡更加疲倦。 即便适度锻炼有诸多益处,大多数美国人还是几乎不锻炼。原因很简单,提升力量与耐力需要我们踏出舒适区,体验不适的感觉,并且需要持续一定时间才能见效。但大多数人在看到明显的效果之前就放弃了。 对需要坐在办公桌前工作的大批白领来说,日常锻炼的缺乏阻碍了机体的自然增强,导致年龄增长后,大多数人应对挑战和压力的能力都逐渐下降。 定期锻炼可以缓解他的紧张感,帮助他更好地控制情感。 身体锻炼是思维和情感精力的极佳源泉。 盖洛普公司发现,保持优秀表现的诀窍之一是在工作环境中至少交一位好朋友。一段稳固的关系包括付出与回报、倾诉与倾听、珍视他人和被人同等珍视。如果一段关系中总是付出而得不到相应的回馈,不免会感到空虚和失落。以自我为中心的关系,也称不上真正的情感关系。 当愤怒逐渐累积时,保罗会选择用腹部做深呼吸,放松肩膀和面部肌肉,掐断自己一触即发的情绪。当情绪逐渐平复下来,他会想办法将沮丧的感觉用一种大家更容易接受的方式表现出来——通常是自嘲的方式。如果保罗认为有必要提出批评的意见,他会采用 “三明治”技巧。首先真诚地对该员工的良好表现给出正面评价,然后以讨论而非宣讲的形式提出批评意见——因为自己的看法或许并非完全准确,最后以鼓励结尾。用“三明治”的方式提出意见不仅让他看起来充满善意和关怀,而且更容易让员工听取他的建议,不会产生逆反心理。 只有接受那些看似相反的品质,不逼自己在其间二选一,才有可能获得最深刻最丰富的情感能力。情感层面的全情投入需要遵循斯多葛派哲学家的“破格文体”——美德的共同存在性。从这一角度看来,没有一种美德是不依赖其他品质而成为美德的。所有的美德都有条件。例如,毫不留情的诚实只是残酷而已。 越来越多证据表明,大脑的运作方式也类似肌肉——积极使用能够提升能力,使用不足就会萎缩。 尼采有句名言 :“知晓生命的意义,方能忍耐一切。”任何能够点燃人类精神的事物都有助于全情投入、促进最佳表现。意志精力的关键动力在于性格品质——一个人如果有自己的人生目标,他的勇气和信念,即使面对艰难困苦和个人牺牲也会在所不惜。意志精力由激情、奉献、正直与诚实支持着。 弗兰克尔是纳粹集中营中幸存的心理学家,他创作了《活出生命的意义》这本经典巨著。书中他引用了尼采的名言:“知晓生命的意义,方能忍耐一切。”弗兰克尔也描述了在不断有人死去的环境中,这个认知如何挽救了他的生命:生而没有意义的人是痛苦的,没有目标、没有目的、无需继续忍受。他很快就会迷失。我们的人生态度需要从根本上转变。我们既要自己学着转变,也要向绝望之人伸出援手,告诉他我们对生活的期待其实并不重要,重要的是生活于我们有何期望。我们要停止追问生命的意义所在,每时每刻提醒自己接受生命的检视。我们的回应不仅体现在言语和冥想中,还要贯穿我们的行为举止。生命的终极意义是担起责任,找寻难题的答案,并且完成生命为每个人设定的任务。 每个人都拥有许多未知的潜力,只能在困境中才会激发它们。 当目标感从消极流向积极、从外部流向内部、从自己流向他人,它就成为生活中最强大也最持久的精力源。 设想一下,如果你坐在一艘行驶在海上的小船里,船底突然开始漏水,你的目的肯定是阻止小船沉下去。但如果你一直忙着舀水,肯定无暇顾及小船的航向。生活也是如此。当我们忙着填补漏洞,不让自己沉底,就没有多余精力探寻更深层的意义了。 出于对内心深处软弱无力的恐惧,恃强的人会蛮横粗暴地对待他人。因为不愿承认内心的不足,成功的领导者永远都在吹嘘自己的成就,炫耀自己认识多少大人物。 “邪恶的本质缺陷并非是罪恶本身,而是自我否认。”《少有人走的路》的作者斯科特·派克写道,“邪恶攻击他人,而不承认自己的失败……因为必须否认自己是坏人,所以只能把别人当作坏人。” 若困在狭隘的自我视角中,我们也不会注意到或有意培养自己的能力。我们或许可以尽力压制自己令人反感的一面,但同时也很难认可自己的优秀品质。 使用许多手段否认生活中的不如意或逃避为此承担责任。责怪他人并将自己看作受害者是一种常见的方式。 所有表现卓越的人都依靠积极的仪式习惯管理精力和规范行为。如果你一直久坐不动,打算开始锻炼身体,你可以最开始每周3次、每次步行15分钟,然后逐周增加步行时间或加快步伐。 不管面对什么样的事情,他要么全情投入,要么有策略地离开。 人类行为只有5%是受自我意识支配的。我们是习惯的造物,因而我们的行为有95%都是自动反应或对于某种需求或紧急情况的应激反应。 在任何表现至上的领域,压力与恢复的平衡都至关重要。我们越能高效恢复精力,越能尽快储备资源以备调用。

2025-06-14 · 1 分钟 · 39 字