跳转到主要内容

概览

Devin 现在会自动为你的代码库建立索引,并生成包含架构图、源码链接和代码库摘要的 Wiki 文档。 使用它来快速上手你在代码库中尚不熟悉的部分——可在侧边栏中查看 Ask Devin 会使用 Wiki 中的信息,更好地理解并定位你代码库中的相关上下文。
在入门流程中接入代码仓库时,DeepWiki 会自动生成。

适用于公共仓库

适用于公共 GitHub 仓库的 DeepWikiAsk Devin 免费版本现已推出。它会自动生成架构图、文档以及指向源代码的链接,帮助你快速理解不熟悉的代码库。你还可以就代码库提出复杂问题,获取基于上下文的准确回答。 访问 deepwiki.com,开始探索 React、TensorFlow、LangChain 等热门开源仓库及更多项目。你也可以提交自己的公共 GitHub 仓库 URL 以便收录。 立即试用 DeepWiki →

控制 DeepWiki

可定制的 Wiki 界面 .devin/wiki.json 文件允许你控制 Devin 的默认 wiki 生成行为,这对可能达到内置限制的大型代码库尤为重要。 在生成 wiki 时,如果在代码库的根目录中发现 .devin/wiki.json 文件,我们会使用其中提供的 repo_notespages 来引导 wiki 的生成。如果提供了 pages,我们会跳过默认的基于聚类的规划,严格按照你指定的页面进行创建。这样一来,即使自动系统原本会跳过某些内容,你的代码库中重要的部分也能有相应的文档记录。

配置格式

在仓库根目录中创建一个 .devin/wiki.json 文件,结构如下:
{
  "repo_notes": [
    {
      "content": "此代码仓库的 cui/ 文件夹包含主要 UI 组件,在编写文档时应优先处理",
      "author": "Team Lead"
    }
  ],
  "pages": [
    {
      "title": "CUI 组件概览",
      "purpose": "记录 cui/ 文件夹结构和主要 UI 组件",
      "parent": null
    },
    {
      "title": "身份验证系统",
      "purpose": "记录身份验证流程和相关组件",
      "parent": null
    },
    {
      "title": "登录组件",
      "purpose": "登录相关 UI 组件的详细文档",
      "parent": "身份验证系统"
    }
  ]
}

配置选项

repo_notes (数组)

为文档系统提供上下文和指引,帮助其更好地理解你的代码仓库。
  • content (字符串,必填):笔记内容(最多 10,000 个字符)
  • author (字符串,可选):笔记作者

pages(数组,可选)

指定在你的 wiki 中应创建的具体页面。 此字段为可选项。即使你只提供 repo_notes,系统仍会生成 wiki,并使用你的备注来引导结构与侧重点,而无需你逐一列出每个页面。 当你提供 pages 时,它们会被视为明确指令。系统只会生成你在 JSON 中定义的那些页面,不多也不少。
  • title(字符串,必填):页面标题(必须唯一且非空)
  • purpose(字符串,必填):该页面应当记录/说明的内容
  • parent(字符串,可选):用于层级组织的父页面标题
  • page_notes(数组,可选):该页面特有的补充备注

验证限制

  • 最多 30 个页面(企业版为 80 个)
  • 笔记总数最多 100 条(repo_notes 与所有 page_notes 之和)
  • 每条笔记最多 10,000 个字符
  • 页面标题必须唯一且不能为空

实践示例

示例 1:使用 Repo Notes 引导 Wiki 生成

如果你不想定义具体页面,你可以只提供 repo_notes 来引导 Wiki 的生成。这样可以让 Devin 自动创建文档结构,同时仍然会考虑到你的优先级和关注重点。当你希望在不需要自己显式列出每一个页面的情况下,获得更好的覆盖范围和强调时,这种方式尤其有用。
{
  "repo_notes": [
    {
      "content": "该代码仓库包含三个主要部分:frontend/ 目录存放 React 组件,backend/ 目录存放 API 服务,infra/ 目录存放部署脚本。文档应着重说明这些部分之间的交互方式,并将后端 API 层作为最高优先级进行重点阐述。"
    }
  ]
}

示例 2:确保特定文件夹被纳入文档

如果你的大型代码库中有一些重要文件夹未被纳入 wiki,可以显式指定它们:
{
  "repo_notes": [
    {
      "content": "cui/ 文件夹包含需要编写文档的关键 UI 组件。backend/ 文件夹包含主要的 API 逻辑。utils/ 文件夹包含在整个代码库中使用的共享工具函数。"
    }
  ]
}

示例 3:处理缺失的组件

如果你发现代码库中的某些部分没有出现在文档中:
{
  "repo_notes": [
    {
      "content": "testing/ 目录包含开发人员需要掌握的重要测试工具和模式。scripts/ 目录包含对运维操作至关重要的部署和维护脚本。"
    }
  ]
}

示例 4:层级文档结构

对于复杂的代码仓库,请采用层级结构来组织页面:
{
  "repo_notes": [
    {
      "content": "这是一个全栈应用程序,包含独立的前端、后端和共享组件,应分别编写文档但需明确各部分之间的关联关系。"
    }
  ],
  "pages": [
    {
      "title": "架构概览",
      "purpose": "应用程序架构及组件交互方式的高层概述"
    },
    {
      "title": "前端",
      "purpose": "前端应用程序结构和组件",
      "parent": "架构概览"
    },
    {
      "title": "React 组件",
      "purpose": "React 组件的详细文档,包括其 props 和使用方法",
      "parent": "前端"
    },
    {
      "title": "状态管理",
      "purpose": "应用程序状态的管理方式,包括 store 和数据流",
      "parent": "前端"
    },
    {
      "title": "后端",
      "purpose": "后端服务、API 和数据层",
      "parent": "架构概览"
    },
    {
      "title": "API 端点",
      "purpose": "REST API 文档,包括端点、请求/响应格式",
      "parent": "后端"
    }
  ]
}

最佳实践

1. 战略性地使用 Repo Notes

  • 提供代码库中哪些部分最重要的背景信息
  • 指出需要优先关注的特定文件夹或组件
  • 说明系统各个部分之间的关系

2. 合理组织页面结构

  • 从概览性页面入手
  • 使用父子页面关系构建清晰的层级结构
  • 将相关功能分组放在一起

3. 明确页面目的

  • 清晰说明每个页面应当说明的内容
  • 指明需要重点关注的具体目录、文件或概念
  • 提供足够的细节,以便系统理解你的意图

4. 补上已知空白

  • 如果你知道代码库中的某些部分被遗漏了,请明确地将它们包含进去
  • 使用清晰且具有描述性的标题,让需要覆盖的内容一目了然

常见问题排查

”只有部分文件夹被收录进文档中”

这是典型的大型代码仓库问题。 解决方案: 使用 .devin/wiki.json 明确指定代码库中哪些部分需要生成文档。
先只更新 repo_notes,并基于这些新增的上下文重新生成 wiki,查看更新后的 wiki 是否包含之前遗漏的文件夹。仅在必要时再添加 pages 数组。

“Wiki 中缺少重要组件”

为这些组件添加独立页面,并使用 repo_notes 强调它们的重要性。
请记住:DeepWiki 只会生成此数组中包含的页面,因此要确保该数组中包含所有页面,而不仅仅是缺失的那个页面。
{
  "repo_notes": [
    {
      "content": "[missing-component] 目录对应用程序至关重要,必须详细记录文档。"
    }
  ],
  "pages": [
    {
      "title": "关键组件名称",
      "purpose": "记录 [missing-component] 目录及其功能"
    }
  ]
}

入门指南

  1. 在代码库根目录创建 .devin/wiki.json
  2. 添加 repo_notes,说明代码库结构和优先级
  3. 如有必要,明确列出你希望创建的所有页面,并为其提供清晰的标题和用途说明
  4. 提交该文件并重新生成你的 wiki
系统现在会根据你的明确指示,而不是完全依赖自动分析来创建文档,从而为大型代码仓库提供更全面、更准确的文档覆盖。