跳转到主要内容
POST
/
api
/
v1
/
Analytics
自定义分析查询
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {
      "data_source": "<string>",
      "selections": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<string>"
        }
      ]
    }
  ]
}
'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

Documentation Index

Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt

Use this file to discover all available pages before exploring further.

概述

自定义分析 API 支持对 Autocomplete、聊天和 Command 数据进行灵活查询,并可自定义选择、筛选、聚合和排序。

请求

service_key
string
必填
你的服务密钥,需具有“Analytics Read”权限
group_name
string
将结果筛选为特定组中的用户 (可选)
query_requests
array
必填
用于定义要检索数据的查询请求对象数组

查询请求结构

每个查询请求对象包含:
  • data_source (必填) :要查询的数据源
  • selections (必填) :要获取的字段数组
  • filters (可选) :要应用的筛选条件数组
  • aggregations (可选) :用于分组的聚合数组

选择项

选择项用于定义要检索哪些字段,以及如何对这些字段进行聚合。
  • field (必填) :要选择的字段名称
  • name (可选) :字段别名
  • aggregation_function (可选) :应用的聚合函数

选择示例

{
  "field": "num_acceptances",
  "name": "total_acceptances",
  "aggregation_function": "QUERY_AGGREGATION_SUM"
}

过滤器

过滤器用于将数据范围缩小到满足特定条件的元素。
  • name (必填) :要筛选的字段名称
  • filter (必填) :筛选操作
  • value (必填) :用于比较的值

过滤示例

{
  "name": "language",
  "filter": "QUERY_FILTER_EQUAL",
  "value": "PYTHON"
}

聚合

聚合按指定条件对数据进行分组。
  • field (必填): 用于分组的字段名称
  • name (必填): 聚合字段的别名

聚合示例

{
  "field": "ide",
  "name": "ide_type"
}

可用字段

用户数据

所有用户数据均按每位用户、每小时聚合。
字段名称描述有效聚合
api_key用户 API key 的哈希值UNSPECIFIED, COUNT
date自动补全的 UTC 日期UNSPECIFIED, COUNT
date UTC-x带时区偏移的日期 (例如,PST 使用 date UTC-8)UNSPECIFIED, COUNT
hour自动补全的 UTC 小时UNSPECIFIED, COUNT
language编程语言UNSPECIFIED, COUNT
ide正在使用的 IDEUNSPECIFIED, COUNT
versionDevin Desktop 版本UNSPECIFIED, COUNT
num_acceptances自动补全接受次数SUM, MAX, MIN, AVG
num_lines_accepted接受的代码行数SUM, MAX, MIN, AVG
num_bytes_accepted接受的字节数SUM, MAX, MIN, AVG
distinct_users不同用户数UNSPECIFIED, COUNT
distinct_developer_days不同的 (用户、天) 元组数UNSPECIFIED, COUNT
distinct_developer_hours不同的 (用户、小时) 元组数UNSPECIFIED, COUNT

聊天数据

聊天数据与 Cascade 数据分开统计,对应我们旧版非 Agent 插件的用量
所有聊天数据反映的都是聊天模型的响应,而非用户提出的问题。
字段名称说明有效聚合方式
api_key用户 API key 的哈希值UNSPECIFIED, COUNT
model_id聊天模型 IDUNSPECIFIED, COUNT
date聊天响应的 UTC 日期UNSPECIFIED, COUNT
date UTC-x带时区偏移的日期UNSPECIFIED, COUNT
ide正在使用的 IDEUNSPECIFIED, COUNT
versionDevin Desktop 版本UNSPECIFIED, COUNT
latest_intent_type聊天意图类型 (见下方“意图类型”)UNSPECIFIED, COUNT
num_chats_received收到的聊天消息数量SUM, MAX, MIN, AVG
chat_accepted聊天是否被接受 (点赞)SUM, COUNT
chat_inserted_at_cursor是否点击了“Insert”按钮SUM, COUNT
chat_applied是否点击了“Apply Diff”按钮SUM, COUNT
chat_loc_used从聊天中使用的代码行数SUM, MAX, MIN, AVG

聊天意图类型

  • CHAT_INTENT_GENERIC - 常规聊天
  • CHAT_INTENT_FUNCTION_EXPLAIN - 函数说明 CodeLens
  • CHAT_INTENT_FUNCTION_DOCSTRING - 函数文档字符串 CodeLens
  • CHAT_INTENT_FUNCTION_REFACTOR - 函数重构 CodeLens
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - 代码块说明 CodeLens
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - 代码块重构 CodeLens
  • CHAT_INTENT_PROBLEM_EXPLAIN - 问题说明 CodeLens
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - 函数单元测试 CodeLens

Command 数据

Command 数据 包含所有命令,包括被拒绝的命令。使用 accepted 字段可仅筛选已接受的命令。
Field NameDescriptionValid Aggregations
api_key用户 API key 的哈希值UNSPECIFIED, COUNT
date命令的 UTC 日期UNSPECIFIED, COUNT
timestamp命令的 UTC 时间戳UNSPECIFIED, COUNT
language编程语言UNSPECIFIED, COUNT
ide当前使用的 IDEUNSPECIFIED, COUNT
versionDevin Desktop 版本UNSPECIFIED, COUNT
command_sourceCommand 的触发来源 (请参见下方的 Command 来源)UNSPECIFIED, COUNT
provider_source生成或编辑模式UNSPECIFIED, COUNT
lines_added新增的代码行数SUM, MAX, MIN, AVG
lines_removed删除的代码行数SUM, MAX, MIN, AVG
bytes_added新增的字节数SUM, MAX, MIN, AVG
bytes_removed删除的字节数SUM, MAX, MIN, AVG
selection_lines选中的行数 (生成时为 0)SUM, MAX, MIN, AVG
selection_bytes选中的字节数 (生成时为 0)SUM, MAX, MIN, AVG
accepted命令是否已被接受SUM, COUNT

Command 来源

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - 典型的 Command 用法
  • COMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTOR
  • COMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENS
  • COMMAND_REQUEST_SOURCE_FOLLOWUP
  • COMMAND_REQUEST_SOURCE_CLASS_CODE_LENS
  • COMMAND_REQUEST_SOURCE_PLAN
  • COMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS

提供程序来源

  • PROVIDER_SOURCE_COMMAND_GENERATE - 生成模式
  • PROVIDER_SOURCE_COMMAND_EDIT - 编辑模式

PCW 数据

Percent Code Written 数据,分别跟踪 Autocomplete 和 Command 的贡献。
字段名称说明支持的聚合方式
percent_code_written计算方式为 codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesCodeium 生成的总字节数UNSPECIFIED
user_bytes用户编写的总字节数UNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocomplete来自 Autocomplete 的 Codeium 字节数UNSPECIFIED
codeium_bytes_by_command来自 Command 的 Codeium 字节数UNSPECIFIED

PCW 过滤器

字段名称描述示例
language编程语言KOTLIN, GO, JAVA
ide使用的 IDEjetbrains, vscode
versionDevin Desktop 版本1.28.0, 130.0
要在 PCW 查询中按日期筛选,请在主请求体中使用 start_timestampend_timestamp

请求示例

用户数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
        {
          "field": "num_acceptances",
          "name": "total_acceptances",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "num_lines_accepted",
          "name": "total_lines",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "date",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "date",
          "filter": "QUERY_FILTER_LE",
          "value": "2024-02-01"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

聊天数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "lines_used",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "latest_intent_type",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "ide_type"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Command 数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
      "selections": [
        {
          "field": "lines_added",
          "name": "total_lines_added",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "total_lines_removed",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "provider_source",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "PROVIDER_SOURCE_COMMAND_EDIT"
        },
        {
          "name": "accepted",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "true"
        }
      ],
      "aggregations": [
        {
          "field": "language",
          "name": "programming_language"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

PCW 数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "start_timestamp": "2024-01-01T00:00:00Z",
  "end_timestamp": "2024-12-22T00:00:00Z",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_PCW_DATA",
      "selections": [
        {
          "field": "percent_code_written",
          "name": "pcw"
        },
        {
          "field": "codeium_bytes",
          "name": "ai_bytes"
        },
        {
          "field": "total_bytes",
          "name": "total"
        },
        {
          "field": "codeium_bytes_by_autocomplete",
          "name": "autocomplete_bytes"
        },
        {
          "field": "codeium_bytes_by_command",
          "name": "command_bytes"
        }
      ],
      "filters": [
        {
          "filter": "QUERY_FILTER_EQUAL",
          "name": "language",
          "value": "GO"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

响应

queryResults
array
查询结果数组,每个查询请求对应一个结果
responseItems
array
结果项数组
item
object
包含所选字段及其对应值的对象

响应示例

用户数据响应

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "total_acceptances": "125",
            "total_lines": "863"
          }
        }
      ]
    }
  ]
}

聊天数据响应

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "lines_used": "74",
            "ide_type": "jetbrains"
          }
        },
        {
          "item": {
            "lines_used": "41",
            "ide_type": "vscode"
          }
        }
      ]
    }
  ]
}

Command 数据响应

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "programming_language": "PYTHON",
            "total_lines_added": "21",
            "total_lines_removed": "5"
          }
        },
        {
          "item": {
            "programming_language": "GO",
            "total_lines_added": "31",
            "total_lines_removed": "27"
          }
        }
      ]
    }
  ]
}

PCW 数据返回

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "ai_bytes": "6018",
            "autocomplete_bytes": "4593",
            "command_bytes": "1425",
            "pcw": "0.61",
            "total": "9900"
          }
        }
      ]
    }
  ]
}

重要说明

  • PCW (代码编写百分比) 在单日或单个用户层面的波动较大,建议按周汇总,以获得更有意义的洞察
  • 所有选取字段必须要么都使用聚合函数,要么都不使用 (不能混用)
  • 名称匹配 “distinct_*” 模式的字段不能用于聚合
  • 在所有选取字段和聚合中,字段别名都必须唯一
  • 如果未指定聚合函数,则默认为 UNSPECIFIED