文档说明
本文包含两类接口:AI 代码指标(聚合统计、排名、仓库与扩展名等)与 AI 代码追踪(Commit / Change 明细与 CSV 导出)。二者分页方式不同,请注意各节说明。调用前请完成 获取 API Key,并阅读 约定与规范。权限要求
- 使用有效的 API Key(
Authorization: Bearer)。 - API Key 必须关联到目标组织。
概述
AI 代码指标 API 提供组织级别的 AI 辅助编码统计数据,包括代码统计概览、每日趋势、成员排名、仓库列表和文件扩展名统计。主要功能
- 统计概览: 提交代码中 AI 贡献的总量和占比
- 每日趋势: 按天查看 AI 代码占比、Agent 代码分语言统计、Tab 补全接受率
- 成员排名: 按 AI 代码贡献量排名成员
- 仓库列表: 列出有 AI 代码活动的仓库
- 文件扩展名: 按文件类型统计 AI 代码指标
- 提交详情: 获取提交级别的 AI 代码归因详情(文件级行范围注解)
通用查询参数
以下参数适用于所有 AI Code 接口(各接口的必填性见具体说明):| 参数 | 类型 | 说明 |
|---|---|---|
start_date | string | 开始时间,支持 RFC 3339 格式或 Unix 毫秒时间戳 |
end_date | string | 结束时间,支持 RFC 3339 格式或 Unix 毫秒时间戳 |
repo_name | string | 按仓库名称过滤 |
primary_branch_only | string | 设为 true 仅统计主分支 |
user_id | string | 按用户 ID 过滤 |
file_extensions | string | 按文件扩展名过滤,逗号分隔(如 .go,.ts) |
API 列表
1. 获取 AI 代码统计概览
GET /v1/organizations/{organization_id}/ai-code/stats/overview
获取组织 AI 代码的整体统计数据。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,其中:| 参数 | 必填 | 说明 |
|---|---|---|
start_date | 是 | 开始时间 |
end_date | 是 | 结束时间 |
start_date和end_date均为必填,且时间范围不超过 90 天。
成功响应 (200 OK)
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
committedTotalLinesEdit | int64 | 已提交代码总编辑行数(新增 + 删除) |
committedAiLinesEdit | int64 | 已提交代码中 AI 编辑行数(新增 + 删除) |
acceptedLinesEdit | int64 | 已接受的 AI 编辑行数(新增 + 删除) |
aiShareRate | float64 | AI 代码占比(百分比) |
agentEditCount | int64 | Agent 编辑次数 |
tabCompletionCount | int64 | Tab 补全次数 |
messageCount | int64 | 对话消息数 |
2. 获取 AI 代码每日趋势
GET /v1/organizations/{organization_id}/ai-code/stats/daily-trend
获取 AI 代码的每日趋势数据,包含三组数据:AI 代码占比趋势、按语言分布趋势、Tab 补全接受率趋势。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,其中:| 参数 | 必填 | 说明 |
|---|---|---|
start_date | 是 | 开始时间 |
end_date | 是 | 结束时间 |
start_date和end_date均为必填,且时间范围不超过 90 天。
成功响应 (200 OK)
响应字段说明
items[ ] - AI 代码占比趋势(Chart 1)| 字段 | 类型 | 说明 |
|---|---|---|
date | string | 日期(ISO 8601) |
aiLinesAdded | int64 | AI 新增行数 |
otherLinesAdded | int64 | 非 AI 新增行数 |
aiShareRate | float64 | AI 代码占比(百分比) |
commitCount | int64 | 提交次数 |
| 字段 | 类型 | 说明 |
|---|---|---|
date | string | 日期(ISO 8601) |
fileExtension | string | 文件扩展名 |
totalLinesAdded | int64 | 总新增行数 |
aiLinesAdded | int64 | AI 新增行数 |
| 字段 | 类型 | 说明 |
|---|---|---|
date | string | 日期(ISO 8601) |
nextSuggestedCount | int64 | 建议次数 |
nextAcceptedCount | int64 | 接受次数 |
nextAcceptRate | float64 | 接受率(百分比) |
3. 获取成员 AI 代码排名
GET /v1/organizations/{organization_id}/ai-code/stats/member-ranking
获取组织成员按 AI 代码贡献量的排名。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,其中:| 参数 | 必填 | 说明 |
|---|---|---|
start_date | 是 | 开始时间 |
end_date | 是 | 结束时间 |
额外支持:start_date和end_date均为必填,且时间范围不超过 90 天。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
limit | integer | 否 | 10 | 返回的最大成员数 |
成功响应 (200 OK)
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
items | array | 成员排名列表 |
items[].userId | string | 用户 ID |
items[].email | string | 成员邮箱(可能为空) |
items[].displayName | string | 成员显示名(可能为空) |
items[].totalLinesAdded | int64 | 总新增行数 |
items[].aiLinesAdded | int64 | AI 新增行数 |
items[].aiShareRate | float64 | AI 代码占比(百分比) |
items[].commitCount | int64 | 提交次数 |
4. 列出仓库
GET /v1/organizations/{organization_id}/ai-code/repos
列出组织中有 AI 代码活动的仓库。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
start_date | string | 否 | — | 开始时间 |
end_date | string | 否 | — | 结束时间 |
query | string | 否 | — | 按仓库名称搜索 |
page | integer | 否 | 1 | 页码(从 1 开始) |
per_page | integer | 否 | 30 | 每页条数,最大 100 |
成功响应 (200 OK)
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
repos | array | 仓库列表 |
repos[].repoName | string | 仓库名称 |
repos[].commitCount | int64 | 提交次数 |
repos[].totalLinesAdded | int64 | 总新增行数 |
totalCount | int32 | 总仓库数 |
page | int32 | 当前页码 |
perPage | int32 | 每页条数 |
5. 列出文件扩展名
GET /v1/organizations/{organization_id}/ai-code/file-extensions
列出组织中有 AI 代码活动的文件扩展名统计。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
start_date | string | 否 | 开始时间 |
end_date | string | 否 | 结束时间 |
成功响应 (200 OK)
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
fileExtensions | array | 文件扩展名列表 |
fileExtensions[].extension | string | 文件扩展名 |
fileExtensions[].changeCount | int64 | 变更次数 |
fileExtensions[].totalLinesAdded | int64 | 总新增行数 |
fileExtensions[].aiShareRate | float64 | AI 代码占比(百分比) |
6. 获取提交 AI 归因详情
POST /v1/organizations/{organization_id}/ai-code-tracking/commits/detail
批量获取提交级别的 AI 代码归因详情,包含文件级的行范围注解。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
请求体 (JSON)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
commitHashes | string[] | 是 | 提交哈希列表,最多 50 个 |
branch | string | 否 | 分支名称(用于限定查询范围) |
请求示例
成功响应 (200 OK)
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
success | boolean | 请求是否成功 |
data.commits | array | 提交详情列表(保持请求顺序) |
data.commits[].commitHash | string | 提交哈希 |
data.commits[].rangeAnnotations | array | 文件级 AI 归因注解 |
data.commits[].rangeAnnotations[].filePath | string | 文件路径 |
data.commits[].rangeAnnotations[].groups | array | AI 会话贡献分组 |
data.commits[].rangeAnnotations[].groups[].conversationId | string | AI 会话 ID |
data.commits[].rangeAnnotations[].groups[].source | string | 来源:AGENT、NEXT、QUEST、INLINECHAT |
data.commits[].rangeAnnotations[].groups[].productType | string | 产品类型(小写,如 ide) |
data.commits[].rangeAnnotations[].groups[].type | string | 类型:added(新增)、deleted(删除) |
data.commits[].rangeAnnotations[].groups[].ranges | array | 行范围列表 |
data.commits[].rangeAnnotations[].groups[].ranges[].start | int32 | 起始行号 |
data.commits[].rangeAnnotations[].groups[].ranges[].end | int32 | 结束行号 |
使用示例
获取统计概览
获取每日趋势(指定仓库和主分支)
获取成员排名(前 20)
搜索仓库
获取文件扩展名统计
获取提交 AI 归因详情
错误码
| 错误码 | HTTP 状态码 | 说明 |
|---|---|---|
BadRequest | 400 | 请求参数无效(如 start_date / end_date 缺失、时间范围超过 90 天、commitHashes 为空或超过 50) |
Unauthorized | 401 | API Key 缺失或无效 |
Forbidden | 403 | 无权限访问该组织 |
InternalError | 500 | 服务器内部错误 |
AI 代码追踪 API
在 AI 代码指标(聚合统计)之外,本节提供 Commit / Change 级别的明细查询与 CSV 导出。鉴权方式与上文相同:Authorization: Bearer <api_key>。
使用前请确认组织已开通与控制台一致的 AI 代码数据分析 能力;若未开通或无权访问,接口可能返回 403 等错误,以实际响应为准。字段与枚举以线上接口与 OpenAPI 定义为准,本文仅作说明。
追踪能力说明
AI 代码追踪 API 提供 commit 级别和 change 级别的逐条明细查询与 CSV 导出能力,是对上文 AI 代码指标(聚合统计)的补充。两层数据模型
| 层级 | 含义 | 来源 | 可用过滤维度 |
|---|---|---|---|
| Commit | Git 提交 | 代码仓库(已推送到远程) | 时间、用户、仓库 |
| Change | IDE 内的 AI 代码编辑事件 | 来自 IDE 客户端的上报(尚未形成 Git 提交) | 时间、用户、source |
Change 是尚未 git commit 的 IDE 内事件,因此不具有repoName/branchName维度。
产品 x 场景交叉分解(Commit 级别)
每条 commit 记录包含 12 对linesAdded / linesDeleted 列,按「产品 x 场景」交叉拆解 AI 代码行:
| 字段前缀 | 产品 | 场景 |
|---|---|---|
ideNext | IDE (VS Code) | Tab 补全 (next) |
pluginNext | JetBrains 插件 | Tab 补全 (next) |
ideAgent | IDE (VS Code) | Agent |
pluginAgent | JetBrains 插件 | Agent |
cliAgent | CLI | Agent |
ideQuest | IDE (VS Code) | Quest |
ideInlineChat | IDE (VS Code) | Inline Chat |
jbInlineChat | JetBrains 插件 | Inline Chat |
nonAi | — | 无法归类的非 AI 行 |
主要功能
- Commit 明细查询: 逐条列出提交级 AI 代码统计(含产品 x 场景拆解)
- Commit CSV 导出: 流式导出全部 commit 数据
-
Change 明细查询: 逐条列出 IDE 内 AI 代码编辑事件(支持按
source过滤) - Change CSV 导出: 流式导出全部 change 数据
-
用户邮箱: 列表与导出中会尽量填充
userEmail(若数据中存在) -
按邮箱筛选: 支持通过
userEmail查询参数定位用户
分页方式
Tracking API 使用偏移量分页(page + pageSize),不同于其他接口常用的游标分页。响应包含 totalItems / totalPages,便于分页展示。
通用查询参数
以下参数适用于所有 Tracking 接口:| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
startDate | string | 否 | — | 开始时间,支持 RFC 3339 格式或 Unix 毫秒时间戳。未传时由服务端按产品策略约束可查范围(例如最长约 90 天),以实际行为为准 |
endDate | string | 否 | 当前时间 | 结束时间,支持 RFC 3339 格式或 Unix 毫秒时间戳 |
userId | string | 否 | — | 按用户 UUID 过滤 |
userEmail | string | 否 | — | 按用户邮箱过滤(服务端会解析为对应的用户标识) |
page | integer | 否 | 1 | 页码(从 1 开始) |
pageSize | integer | 否 | 100 | 每页条数,最大 200 |
userId和userEmail同时提供时,userId优先。
API 列表
1. 列出 Commit 明细
GET /v1/organizations/{organization_id}/ai-code-tracking/commits
逐条列出提交级 AI 代码统计数据,按提交时间倒序排列。每条记录包含产品 x 场景的交叉拆解。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,额外支持:| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
repoName | string | 否 | 按仓库名称过滤 |
成功响应 (200 OK)
响应字段说明
success -true 表示请求成功
data.items[ ] - Commit 明细列表
| 字段 | 类型 | 说明 |
|---|---|---|
commitHash | string | Git commit SHA |
userId | string | 用户 UUID |
userEmail | string | 用户邮箱(可能为空) |
repoName | string | 仓库名称 |
branchName | string | 分支名称 |
isPrimaryBranch | boolean | 是否为主分支 |
totalLinesAdded | integer | 总新增行数 |
totalLinesDeleted | integer | 总删除行数 |
ideNextLinesAdded | integer | IDE Tab 补全新增行数 |
ideNextLinesDeleted | integer | IDE Tab 补全删除行数 |
pluginNextLinesAdded | integer | JetBrains 插件 Tab 补全新增行数 |
pluginNextLinesDeleted | integer | JetBrains 插件 Tab 补全删除行数 |
ideAgentLinesAdded | integer | IDE Agent 新增行数 |
ideAgentLinesDeleted | integer | IDE Agent 删除行数 |
pluginAgentLinesAdded | integer | JetBrains 插件 Agent 新增行数 |
pluginAgentLinesDeleted | integer | JetBrains 插件 Agent 删除行数 |
cliAgentLinesAdded | integer | CLI Agent 新增行数 |
cliAgentLinesDeleted | integer | CLI Agent 删除行数 |
ideQuestLinesAdded | integer | IDE Quest 新增行数 |
ideQuestLinesDeleted | integer | IDE Quest 删除行数 |
ideInlineChatLinesAdded | integer | IDE Inline Chat 新增行数 |
ideInlineChatLinesDeleted | integer | IDE Inline Chat 删除行数 |
jbInlineChatLinesAdded | integer | JetBrains Inline Chat 新增行数 |
jbInlineChatLinesDeleted | integer | JetBrains Inline Chat 删除行数 |
nonAiLinesAdded | integer | 非 AI 新增行数 |
nonAiLinesDeleted | integer | 非 AI 删除行数 |
message | string | 提交信息(可能为空) |
commitTs | string | 提交时间(ISO 8601) |
createdAt | string | 记录创建时间(ISO 8601) |
| 字段 | 类型 | 说明 |
|---|---|---|
currentPage | integer | 当前页码 |
pageSize | integer | 每页条数 |
totalItems | integer | 总记录数 |
totalPages | integer | 总页数 |
2. 导出 Commit CSV
GET /v1/organizations/{organization_id}/ai-code-tracking/commits/export
以流式 CSV 格式导出 commit 数据。导出过程由服务端自动完成分页聚合,调用方无需自行翻页。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,额外支持:| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
repoName | string | 否 | 按仓库名称过滤 |
成功响应 (200 OK)
-
Content-Type:
text/csv; charset=utf-8 -
Content-Disposition:
attachment; filename="ai-code-commits.csv"
userName,JSON 响应中已移除):
3. 列出 Change 明细
GET /v1/organizations/{organization_id}/ai-code-tracking/changes
逐条列出 IDE 内 AI 代码编辑事件(仅 action=suggested 的记录),按事件时间倒序排列。
Change 是尚未 git commit 的 IDE 内事件,因此不支持 repoName 过滤。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,额外支持:| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
source | string | 否 | 按使用场景过滤,可选值:AGENT、NEXT、QUEST、INLINECHAT |
成功响应 (200 OK)
响应字段说明
success -true 表示请求成功
data.items[ ] - Change 明细列表
| 字段 | 类型 | 说明 |
|---|---|---|
changeId | string | 变更事件唯一标识 |
userId | string | 用户 UUID |
userEmail | string | 用户邮箱(可能为空) |
source | string | 使用场景(大写):NEXT、AGENT、QUEST、INLINECHAT |
model | string | 模型级别:lite、efficient、auto(可能为空) |
totalLinesAdded | integer | 总新增行数 |
totalLinesDeleted | integer | 总删除行数 |
metadata | array | 文件级别变更明细(可能为空) |
metadata[].fileName | string | 文件名 |
metadata[].fileExtension | string | 文件扩展名 |
metadata[].linesAdded | integer | 文件新增行数 |
metadata[].linesDeleted | integer | 文件删除行数 |
createdAt | string | 事件时间(ISO 8601) |
| 字段 | 类型 | 说明 |
|---|---|---|
currentPage | integer | 当前页码 |
pageSize | integer | 每页条数 |
totalItems | integer | 总记录数 |
totalPages | integer | 总页数 |
4. 导出 Change CSV
GET /v1/organizations/{organization_id}/ai-code-tracking/changes/export
以流式 CSV 格式导出 change 数据。导出过程由服务端自动完成分页聚合,调用方无需自行翻页。
CSV 导出为扁平格式,不包含 metadata(文件级明细)。
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
organization_id | string | 是 | 组织 ID |
查询参数
见「通用查询参数」,额外支持:| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
source | string | 否 | 按使用场景过滤,可选值:AGENT、NEXT、QUEST、INLINECHAT |
成功响应 (200 OK)
-
Content-Type:
text/csv; charset=utf-8 -
Content-Disposition:
attachment; filename="ai-code-changes.csv"
使用示例
查询 commit 明细(按仓库过滤)
按邮箱查询用户的 commit
导出 commit CSV
查询 change 明细(按 source 过滤)
导出 change CSV
错误码
| 错误码 | HTTP 状态码 | 说明 |
|---|---|---|
Unauthorized | 401 | API Key 缺失或无效 |
Forbidden | 403 | 无权限访问该组织 |
BadRequest | 400 | 请求参数无效(如 organization_id / userId 不是合法 UUID) |
InternalError | 500 | 服务器内部错误 |