Code Scans(代码扫描)
摘要
Devin 推出 Code Scans,这是一款基于 AI 的工具,可根据用户定义的目标对代码库进行调查,识别改进点,并自动生成拉取请求以实施变更,旨在减少工程开销。
暂无内容
查看缓存全文
缓存时间: 2026/09/18 06:18
# 介绍代码扫描
来源:[https://devin.ai/blog/introducing-code-scans](https://devin.ai/blog/introducing-code-scans)
[https://devin.ai/blogCognition](https://devin.ai/blogCognition) 2026年9月16日 · 阅读5分钟
今天,我们正式推出**代码扫描**:这是一种将宏观工程目标转化为代码库具体改进的新方法。告诉Devin你想要实现什么,它会帮助你调查需要修改的内容、评估发现,并将其转化为拉取请求(Pull Requests)。
许多工程任务始于具体的改动。但也有一些任务始于期望达成的成果:
- **提升SEO表现**
- **降低维护开销**
- **加快应用编译速度**
这些目标常常被搁置在待办事项中,因为仅第一步——调查代码库以确定从何处着手——就是一个相当大的工程。此外,识别出改进机会只是一半的工作——还需要有人去实施这些改动,而且往往是大量的改动。
代码扫描能同时解决这两个问题。
代码扫描基于**代理式MapReduce**(Agentic MapReduce)([https://devin.ai/blog/agentic-map-reduce](https://devin.ai/blog/agentic-map-reduce))——这是我们在Devin安全集群(Devin Security Swarm)中构建的架构。它将大规模调查分解成专注的批次,分发给并行的代理执行,并将它们的发现汇总成一份报告。然后,Devin会将其发现转化为可供评审的PR。
在上线前参与测试代码扫描的团队已经看到了成效:
> 代码扫描对我们最关心的方面产生了显著影响:软件质量、错误修复、稳定性、性能和合规性(包括安全与隐私)。
> 在几个代码库中,拉取请求的**合并率估计达到96%**,在我们短暂的测试期内,**节省了超过700个工程小时**。
拉取请求合并率:96%
节省的工程小时数:700+
要开始使用,请在Devin网页应用中输入`/scan`,或阅读[文档](https://docs.devin.ai/work-with-devin/code-scans)。
## 从目标开始
你无需在开始扫描前就知道要查看哪些文件。相反,你只需定义你要查找的内容,Devin会与你合作,将该目标转化为具体的代码库调查。
例如:
> 查找我们Web应用中的未使用代码。排除生成的文件和测试夹具,并在推荐移除前检查是否存在间接引用。
你也可以提供自己的标准:团队的编码规范、无障碍访问检查清单,或是即将进行的迁移所需的要求。Devin有助于确定检查什么、跳过什么,以及什么应算作一项发现。
在你确认范围和设置后,Devin会执行调查,并返回一份按优先级排序的发现列表。之后,你可以查看证据、与Devin讨论结果,并让它为你想要解决的问题创建PR。
### 提升Rust编译时间
我们让代码扫描来加速Dioxus仓库的编译。Devin发现了优化依赖项和构建配置的机会,包括将重量级的CLI功能设为可选而非默认编译。在本地应用这些改动后,**干净的调试构建时间从58.6秒降至21.0秒——在测试的22个工作区crate中减少了64%**。
#### 扫描发现
dioxus · 编译时间扫描
1. 默认`mounted`特性为每个非Web渲染器强制引入了`web-sys`/`js-sys`/`wasm-bindgen`(而`serialize`特性强制引入`serde`)。默认特性集启用了mounted,这激活了重量级的可选`web-sys`依赖(并传递性地引入了`js-sys` + `wasm-bindgen`)——然而这些绑定……
2. 过大的基础crate:稳定的生成元素/属性表与易变逻辑捆绑,导致完全重新展开和下游重新编译。`dioxus-html`是每个渲染器都依赖的基础crate,它捆绑了其庞大的、近乎静态的生成元素/属性API(`elements.rs`、`global_attributes.rs`)……
3. `builder_constructors!`元素表是html crate的主要编译成本(约112个元素,每个元素约112次过程宏调用,重复的热重载遍历)。单一的`builder_constructors!`调用是html crate的主要编译时间成本。它将112个HTML/SVG元素中的每一个都展开为一个单元结构体、TAG_NAME/NAME_SPACE……
4. `cargo-generate`在`dioxus-cli`中被无条件编译,但仅由`dx create`使用。`cargo-generate`是一个非可选依赖项,仅用于dx create/dx init脚手架路径,但它引入了git2/libgit2-sys(一个本地C库构建)、liquid模板……
5. `dioxus-ssr`拉取了tokio的"full"(默认开启)特性,但仅使用了`fs` + `io-util`。`dioxus-ssr`声明了`tokio = { version = "1.28", features = ["full"], optional = true }`,但该crate仅在一个模块(`incremental.rs`)中使用tokio,并且只使用了`tokio::fs`和……
### SEO优化
我们对 [devin.ai](https://devin.ai/?utm_source=x&utm_medium=organic_social&utm_campaign=code-scans&utm_content=seo-example) 和 [cognition.com](https://cognition.com/?utm_source=x&utm_medium=organic_social&utm_campaign=code-scans&utm_content=seo-example) 进行了SEO问题扫描。它在两个仓库中发现了44个问题,并在接下来的几天内修复了这些问题。
对比Ahrefs爬取前后的数据:
- 在devin.ai上,**Ahrefs健康评分从87提升到92**。
- 在devin.ai上,**加载缓慢的页面减少了73%**。
- 在cognition.com上,**消除了缺失的图片替代文本**。
#### 扫描发现
devin.ai + cognition.com · SEO扫描
1. 客户案例页面发送了相对路径的`og:image` / `twitter:image` / JSON-LD图像……每个客户案例页面(`/customers/`)将其Open Graph图片、Twitter图片和Article JSON-LD图像设置为原始的`frontmatter.ogimagePath`值,这是一个没有域名、不以斜杠开头的根相对路径。Open Graph / Twitter Card规范和schema.org要求绝对URL,因此预览和Article富文本结果图像会中断。
devin-website
2. 重定向链 `/resources/university` → `/university` → 外部 在某处丢失了一跳。`vercel.json`定义了 `/resources/university` -> `/university` 以及单独的 `/university` -> `https://learn.devinenterprise.com`。因为第一个重定向目标是另一个重定向源,对 `/resources/university` 的请求会遍历一个两跳的301链,而不是直接前往最终目的地。Ahrefs确认 `/resources/university` 有157个活跃的反向链接(22个引用域名)。
devin-website
3. 首页`og:url`解析为非规范路径 `/index`(与规范URL `https:...` 不匹配)。根布局在每个页面上设置了`openGraph.url: './'`。这对子路由是成立的,但对首页则不然:Next.js将 `./` 作为根路由解析为路径名 `/index`,因此提供的首页输出`og:url = https://cognition.com/index`,而其规范链接标签是`https://cognition.com`。
cognition-marketing-website
4. 终端布局省略了每个基础/桌面页面都输出的JSON-LD结构化数据。`_terminalLayout`的`head`组件组装了title/description/canonical/OG/hreflang,但没有输出JSON-LD,而不像`_baseLayout`和`_desktopLayout`,它们都包含一个默认的SoftwareApplication块。其消费者`/cli`(Devin CLI产品页面)和`/auto-triage`都是可索引的核心产品界面。
devin-website
5. 已结束的活动页面仍然可索引,且其元描述仍在宣传一个直播研讨会。`whats-new-in-devin-06-24-26`活动页面在页面上宣布活动已结束("此活动已结束"、"活动已结束"、"注册已关闭"),但其元数据中不包含`robots: {index:false}`,其元/OG描述仍在将该研讨会宣传为直播和即将举行。因此,一个过期的页面仍然可索引,而其搜索片段将一个过去的活动宣传得仿佛注册仍在开放。
cognition-marketing-website
## 代理式MapReduce
代码扫描构建在**代理式MapReduce**([https://devin.ai/blog/agentic-map-reduce](https://devin.ai/blog/agentic-map-reduce))之上,这是我们在Devin安全集群中构建的架构,旨在使代码库范围的调查变得可行。它分4个阶段工作:
1. **规划。** Devin研究你的代码库,并定义识别与你目标相关代码的规则。
2. **分片。** 这些规则在代码库上运行,匹配的代码被分成专注的批次。
3. **映射。** 并行的Devin代理调查每个批次,根据需要阅读周围代码并报告其发现。
4. **归约。** 一个最终的代理合并发现,去除重复项,并将结果按优先级整合成一份报告。
#### 代理式MapReduce流水线 示例:死代码扫描
##### 1. 规划
代理式Devin研究仓库,并为与你目标相关的代码定义规则——在这里,是可能不再使用的符号、模块和依赖项。
- 没有导入者的导出
- 未被引用的模块
- 未使用的依赖项
- 过时的功能标志
这使每个代理的上下文保持专注,并将推理预算导向相关代码,而非重复搜索。
这种架构也确保了完整性:每个选定的批次都必须被处理。
代码扫描将这种方法从安全领域扩展到你定义的工程目标。
## 你会扫描什么?
代码扫描可以调查广泛的工程问题,使用你代码库的约定和你提供的标准。以下是一些示例:
| 扫描 | 目标 | 性能 | 找出可能使你的应用变慢的瓶颈路径、冗余计算和错失的缓存机会。 |
| :--- | :--- | :--- | :--- |
| **数据库查询** | 寻找N+1查询、不必要的往返传输、无界读取以及其他低效或不可靠的数据访问模式。 |
| **测试覆盖** | 识别未被测试覆盖的重要流程、边缘情况和故障路径。 |
| **死代码** | 查找未使用的函数、模块、依赖项和过时的功能标志,并提供哪些内容可以安全移除的证据。 |
| **代码质量** | 查找重复的逻辑、不必要的复杂性、更好的抽象机会以及违反团队编码规范的模式。 |
| **清理** | 识别冗余的抽象、过多的样板文件以及可以在不改变行为的情况下简化的代码。 |
| **遥测** | 查找日志、指标和跟踪中的空白,这些空白使得故障难以诊断或重要行为难以衡量。 |
| **无障碍访问** | 查找缺失的标签、损坏的键盘交互以及不符合你指定的WCAG标准的其他问题。 |
| **合规性** | 根据你组织的监管要求和政策,调查敏感数据处理、审计跟踪和数据保留逻辑。 |
| **迁移规划** | 追踪现有的依赖关系、端到端流程和业务逻辑,为即将到来的迁移制定计划。 |
| **SEO优化** | 查找影响搜索可见性的代码级问题,包括缺失或重复的元数据、不正确的规范URL、索引指令以及站点地图或结构化数据中的空白。 |
| **你自己的标准** | 定义一个你希望Devin在整个代码库中查找的模式。 |
最有用的扫描可能来自你的团队一直搁置的一个问题,因为回答它意味着要查看所有地方。
在你的Devin会话中输入`/scan`,指定你想调查的内容,一起确定范围,然后开始优化你的代码库。
现在就在 [devin.ai](https://devin.ai/?utm_source=x&utm_medium=organic_social&utm_campaign=code-scans&utm_content=try-cta) 尝试代码扫描,并在[代码扫描文档](https://docs.devin.ai/work-with-devin/code-scans)中了解更多。
相似文章
@Star_Knight12: 有人开源了一个工具,可以读取你的整个代码库并为你解读。 → 你加入一个新团队,面对200…
一款开源工具,能够扫描整个代码库,构建交互式可视化仪表板,支持语义搜索,并显示变更影响分析,旨在帮助开发者快速上手新项目。
@NainsiDwiv50980: AI 智能体变得更聪明了,但理解代码库的方式却没变。大多数仍然逐个文件地爬取仓库……
SocratiCode 是一个完全开源的代码库智能引擎,它利用语义搜索、依赖关系图、影响分析和共享索引帮助 AI 导航仓库,无需供应商锁定。
Open Code Review – 一款由 AI 驱动的代码审查 CLI 工具
阿里巴巴已将 Open Code Review 开源,这是一款由 AI 驱动的代码审查 CLI 工具,将确定性工程方法与 LLM 智能体能力相结合。该工具最初作为内部工具使用,服务于数万名开发者,已识别出数百万处缺陷。它通过读取 Git diff 输出,利用可配置的模型端点生成结构化的行级审查意见。
你现在可以为AI编码代理赋予其自身的高级开发直觉(起草、测试、审查、利用等)。
讨论如何集成 API Doctor、Socket、Semgrep、CodeRabbit、Postman、Playwright、GitHub Actions、Sentry 和 PostHog 等工具,让 AI 编码代理具备资深级别的代码质量、安全性和监控直觉,将关注点从速度转向质量。
构建了一个工具用于对大型变更进行代理代码审查,并使用代理来理解和审查代码。
作者构建了Seendiff,一个用于代理代码审查的工具,以跟踪进度、与Claude等语言模型协作,并简化大型代码变更,同时询问其他人的审查流程。