AI编程里面怎么固化对生成代码的基本要求(例如不能使用魔数、圈度复杂度低于10、函数行数小于300、一行长度小于80等)

核心不是让它记住规则,而是把规则做成它每次都会调用的能力

1)System Prompt / 自定义指令

把规范直接写进系统级指令里,作为默认行为。例如:必须避免魔数、函数不超过 300 行、单行不超过 80 字符、圈复杂度不超过 10。 这是最基础的一层,但单靠它不够稳。

2)Skill / 项目级规则包

如果工具支持 Skill、Project Instructions、Rules、Custom GPT Instructions 这类能力,就把“代码规范”做成一个可复用包。 里面放三样东西最好用:

  1. 规范文本:风格、复杂度、命名、魔数等
  2. 示例:什么算合格、什么算不合格
  3. 检查清单:生成后必须自查哪些项

这样 AI 每次接任务时,不是临时记规则,而是直接加载这套“技能”。

3)RAG / 知识库引用

把团队代码规范、最佳实践、禁用项放到知识库或项目文档里,让 AI 生成前先检索再写。 适合规范很多、经常更新的场景。 它的作用是:AI 不是“猜规则”,而是“查规则”。

4)工具调用 / Function Calling

这是最关键的一层。 让 AI 生成代码后,自动调用这些工具去检查:

  1. lint
  2. 复杂度分析
  3. 行长度检查
  4. AST 规则检查
  5. 魔数检测

AI 看见检查结果后,再自动修正。 这就把“靠自觉”变成“可执行约束”。

5)多轮代理流程(生成 → 审查 → 修复)

把 AI 拆成三个角色更稳定:

  1. 生成 Agent:先写代码
  2. 审查 Agent:专门挑毛病
  3. 修复 Agent:根据审查结果改代码

这类流程特别适合你说的这些硬指标,因为它天然适合做“二次约束”。

6)结构化输出 / Schema 约束

如果工具支持 JSON schema 或固定格式输出,可以让 AI 先输出:

  1. 代码
  2. 自检结果
  3. 风险点
  4. 是否满足规范

这样你就能让它“先说检查结论,再交代码”,减少漏项。

7)Few-shot 示例

给 AI 看几组“合格代码”和“违规代码”的对照样例。 这对“不要用魔数”“函数拆分”“复杂度控制”很有效,因为它会模仿你给的风格。

如果你真想在 AI 编程里固化这些要求,最稳的是: Skill / 项目规则包 + 知识库 + 工具调用校验 + 生成后自动修复

一句话理解就是: 规则靠 Skill 统一,知识靠文档补充,质量靠工具验证,最终靠 AI 自动改回去。

你可以直接这样设计一套 AI 编码能力 把它拆成四个角色最清楚:

  1. 规则加载:读取 Skill / 项目规范
  2. 代码生成:按规范写代码
  3. 自动审查:调用 lint / complexity 工具
  4. 自动修复:发现问题就重写

这样 AI 不是一次性出结果,而是一个闭环。

AI编程里面让AI修改的时候不影响以前的业务逻辑,只修改需要修改的

问题本质是:怎么让 AI 做“最小侵入修改(minimal diff)”,而不是整段重写。 实现上要靠“约束修改范围 + 强制对比 + 分阶段修改”。

1)不要让 AI“直接输出完整代码”,而是要求: 方式1:只输出 diff(强烈推荐) 方式2:只输出“修改片段” 避免: “请帮我优化这段代码” → 100%会重写 “给我更好的实现” → 逻辑可能变

2)在 prompt / skill 里加这种规则:

1
2
3
4
5
6
7
8
修改代码时必须遵守:

1. 不允许改变已有业务逻辑
2. 不允许修改未明确要求的代码
3. 不允许重构函数结构(除非明确要求)
4. 只允许最小必要修改(minimal change)
5. 所有未修改代码必须保持完全一致
6. 优先使用“补丁式修改”而不是重写

3)让 AI 先“理解影响范围” 增加一步:

1
2
3
4
5
步骤:
1. 分析需要修改的点
2. 列出受影响的函数/变量
3. 判断是否影响现有逻辑
4. 再进行修改

4)两阶段执行(最稳)

不要一步改完,拆成两步:

第一步:分析 让 AI 输出:修改点在哪、是否影响现有逻辑、修改范围、风险点

第二步:再改代码

AI 会“先思考再动手” 修改更保守

5)加“对比校验”

让 AI 自己做 diff 检查(让 AI 自己当 reviewer):

1
2
3
4
5
请对比修改前后代码:

1. 是否有非必要修改
2. 是否有逻辑变化
3. 是否删除了任何原有功能

6)AST / 结构感知编辑

AI 只修改语法节点,而不是文本

7)codebuddy插件的功能(局部编辑、inline edit、apply patch)而不是“生成整文件”

Redis里面的key会不会越来越多,怎么清理

过期策略:由于 Sorted Set 的 member 无法单独设置 TTL,采用以下策略:

  1. 查询时清理:每次查询前执行 ZREMRANGEBYSCORE key 0 <7天前时间戳>
  2. Key 级别 TTL:设置 8 天过期,作为兜底清理不活跃 key
  3. Lua 脚本原子操作:将清理、查询、写入合并,减少网络往返

每次启动服务的时候Redis会不会要重新拉MySQL离线表数据,Redis是从消息队列里面拉去最新的告警吗?

需要抢一个分布式锁,抢到分布式锁的服务会启动两个线程:消费线程和同步线程,没抢到分布式锁的服务会启动一个消费线程。 同步线程分批同步数据,没数据需要同步后会释放分布式锁。保证同时只有一个线程在同步数据。

每次启动服务是Redis内部会有老数据,同步数据时会重复需要去重,根据 模块名+监控id+告警的时间戳 去重

需要重新拉取MySQL离线表数据,Redis会从消息队列中拉取最新的告警数据。

冷启动,启动消费线程和同步线程双线程,同步需要消耗一段时间,这时MySQL里面一直增加数据,消息队列也来数据了,怎么保证数据不重复?

会出现数据重复。根据 模块名+监控id+告警的时间戳 去重。

  1. https://www.notion.so/Redis-314254b59a8380878cade73c89631ef7

当前存在一个告警消息队列,承载着告警事件的实时流转。有一个服务持续消费该队列,并将消息写入数据库的表中进行持久化存储。约2000万条

需要开发一个新的告警分析服务,该服务需要:实时消费消息队列中的告警消息;判断每条告警是否在最近7天内出现过;如果出现过,分别是哪些天出现过;将判断结果写入新的表中供后续业务使用

备注:线程1(消费线程)在冷启动期间,由于redis中没有最近7天的历史告警信息,可能会有短暂的窗口期,只能当作是首次出现告警。

测试时间序列异常检测方法减少误告