其他
在编写新工具函数或共享代码前…
适用于需要在代码库中新增工具函数、复用逻辑或维护共享代码时,提前发现并复用已有能力,避免 AI 重新实现相同目的代码。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在编写新工具函数或共享代码前,用能力索引通用
解决思路
- 在任何新代码、共享工具或新函数之前,先执行「写前检查」:检查是否已有相同能力,而不是直接实现。
- 写前检查第 1 步:用自然语言描述你需要的功能,例如「我需要把日期格式化为相对时间」。
- 写前检查第 2 步:在 `CODE_INDEX.md` 中搜索相关关键词(如 date、time、format、relative)。
- 写前检查第 3 步:评估已有代码是否可用;完全匹配则复用。
- 写前检查第 3 步补充:接近但不完全满足时,扩展现有函数或代码。
- 写前检查第 3 步补充:完全找不到合适实现时,才创建新代码并更新索引。
- 写前检查第 4 步:如果要扩展现有代码,检查破坏性变更;优先增加可选参数,不改变现有行为。
- 写前检查第 4 步补充:为新增功能更新测试。
- 写后立即更新 `CODE_INDEX.md`。
- 周期性运行 `/audit-duplicates` 捕捉能力重叠。
- 在项目根目录维护 `CODE_INDEX.md`。
- `CODE_INDEX.md` 按能力组织,而不是按文件位置组织。
- 在索引中维护 `Last updated` 时间戳和 `/update-code-index` 重新生成提示。
- 在索引中加入 Quick Reference 表,列出 Category、Count、Location。
- 按能力分类维护索引表(例如 Date/Time、Validation、API Clients、Auth 等)。
- 每个能力条目记录:函数、位置、做什么(用平实语言说明)、参数或返回值。
- 每个文件都添加摘要头。
- TypeScript/JavaScript 文件头使用:`@file` 简短描述、`@description` 文件职责、Key exports 列表、`@see` 相关文件。
- Python 文件头使用模块 docstring:说明职责、Key exports 列表、See Also 相关文件。
- 每个函数都添加一行摘要说明。
- TypeScript 函数用 JSDoc 一行描述它做什么,并给示例或返回值说明。
- Python 函数用 docstring 一行描述它做什么,并给示例或返回值说明。
- 决策树:需要新功能时,先查 `CODE_INDEX.md` 中是否有相似能力。
- 决策树分支:找到完全匹配时直接使用。
- 决策树分支:找到相似实现时,判断能否扩展;能则增加参数扩展,不能则创建新实现并更新索引。
- 决策树分支:什么都没找到时创建新实现并更新索引。
- 防止模式 1:不要重复实现已有工具函数(例如已有 `isEmail()` 时不要新建 `validateEmail()`);先查索引并导入已有实现。
- 防止模式 2:不要创建多个略有差异的版本(例如多个日期格式化函数);合并为一个带 options 的函数。
- 防止模式 3:不要在多处散落相同内联逻辑(例如邮箱校验);提取一次并到处导入。
- 定期审计清单:检查工具函数是否有功能相似者。
- 定期审计清单:检查 API 调用是否存在多种方式获取同一数据。
- 定期审计清单:检查验证逻辑是否散落为内联代码。
- 定期审计清单:检查错误处理模式是否不一致。
- 定期审计清单:检查 UI 组件是否相似且可合并。
- 定期审计清单:检查自定义 Hooks 是否有重叠逻辑。
- 审计输出按优先级分组:高优先级「Merge These」;中优先级「Consider Merging」;低优先级「Monitor」。
- 审计输出中为每项重复记录涉及的文件或函数、位置,并给出 Action(如合并到某文件、提取到某工具、统一模式、记录差异)。
- 大型代码库(100+ 文件)可选加入向量搜索。
- ChromaDB 方案:导入 chromadb 与 embedding_functions;用 `PersistentClient(path="./.chroma")` 初始化。
- ChromaDB 方案:使用 `DefaultEmbeddingFunction()` 并 `get_or_create_collection("code_index", embedding_function=ef)`。
- ChromaDB 方案:索引函数时调用 `collection.add(documents=[描述], metadatas=[{function,file,line}], ids=[id])`。
- ChromaDB 方案:写新代码前调用 `collection.query(query_texts=[需求描述], n_results=5)` 搜索相似函数。
- LanceDB 方案:导入 lancedb;连接 `./.lancedb`。
- LanceDB 方案:用数据项 `{function,file,description}` 创建表 `db.create_table("code_index", data)`。
- LanceDB 方案:用 `table.search("需求描述").limit(5).to_list()` 搜索。
- 向量库选用建议:<50 文件只用 Markdown 索引。
- 向量库选用建议:50–200 文件用 Markdown + 周期审计。
- 向量库选用建议:200+ 文件加入向量库。
- 向量库选用建议:500+ 文件向量库是必需的。
- 会话开始时:读取 `CODE_INDEX.md`(如果存在)。
- 会话开始时:记录可用分类和关键函数,并在本次会话中保留该上下文。
- 写新代码前:暂停并自问「是否已有类似实现?」
- 写新代码前:搜索 `CODE_INDEX.md` 中的相似能力。
- 写新代码前:如果不确定,在代码库中运行 `grep -r "functionName\|similar_term" src/`。
- 写新代码前:只有确认没有合适实现时才创建新代码。
- 写新代码后:立即更新 `CODE_INDEX.md`。
- 写新代码后:如果是新文件,添加文件头。
- 写新代码后:添加函数 docstring。
- 写新代码后:把索引更新与代码一起提交。
- 当用户说「添加 X 功能」时:实现前先说明要检查是否已有类似功能。
- 检查后在 `CODE_INDEX.md` 中找到相似函数时,向用户列出选项:1 按原样使用;2 扩展新能力;3 若确实不同则新建;并询问用户偏好。
- 使用 `/update-code-index` 更新索引。
- 使用 `/audit-duplicates` 执行重复审计。
- 使用文件头模板(TypeScript:`@file`、`@description`、Key exports)。
- 使用函数模板(TypeScript:一行描述 + `export function name(params): ReturnType`)。
- 使用索引条目模板:`| functionName() | path/file.ts:line | 用平实语言说明做什么 | (params) |`。
适用边界 · 注意事项
- 不适用于非常小的代码库或一次性脚本:维护能力索引和审计的成本可能高于收益;<50 文件只需 Markdown 索引,不必上向量库。
- 不适用于无人维护索引的项目:若写后不更新、不定期审计,索引会失真,反而误导复用决策。
- 不适用于确实语义不同的功能:不要为了去重强行合并不同用途的代码,应记录差异或保持独立。