Skip to main content

简介

Keq 是什么?

Keq 是一个为 AI 编程时代设计的 TypeScript HTTP 客户端。它基于 Fetch API 构建,融合了 Koa 的中间件设计和 SuperAgent 的链式调用体验。

与传统 HTTP 客户端不同,Keq 天然为 AI 编程助手提供了完整的 API 感知能力——你的 AI 助手不仅能理解项目中的每一个 API 接口,还能直接生成类型安全的调用代码。

为 AI 编程而生

告诉 AI 你要什么,代码自己就写好了

当你的 AI 编程助手接入 Keq 后,开发体验会变成这样:

👤 开发者:帮我写一个猫咪领养页面,展示可领养的猫咪列表,支持按品种筛选

🤖 AI 助手:
   → 搜索 API:"猫咪"、"品种"
   → 找到:GET /cats (catService#getCats)
   → 找到:GET /breeds (catService#getBreeds)
   → 生成请求代码并构建页面...
import { getCats, getBreeds } from "./apis/cat_service"

export function AdoptionPage() {
  const [breed, setBreed] = useState("")

  const breeds = await getBreeds()
  const cats = await getCats({ breed, status: "adoptable" })
  //                           ^^^^^ 参数类型由 OpenAPI 文档推断,拼错字段编译器直接报错

  return (/* 渲染猫咪列表... */)
}

AI 在编写功能的过程中,自动通过语义搜索定位所需接口、生成类型安全的请求代码。TypeScript 编译器确保生成的代码类型正确——即使 AI 犯错,编译器也会拦住它。

一行配置,解锁 AI 能力

不需要学习新概念,只需在项目中添加一行配置,AI 助手就能自动理解你的所有 API:

.mcp.json
{
  "mcpServers": {
    "keq": { "command": "npx", "args": ["@keq-request/cli", "mcp"] }
  }
}

配置完成后,AI 助手即刻获得以下能力:

  • 🔍 自然语言搜索 — 用中文或英文描述你想要的接口,AI 从数百个 API 中语义匹配
  • 🏗️ 按需生成代码 — AI 判断需要哪些接口,自动生成类型安全的 TypeScript 请求函数
  • 📋 过滤规则管理 — AI 自动维护 .keqfilter,只生成项目实际用到的接口代码
  • 🔄 实时感知变更 — API 文档更新时自动同步,AI 始终基于最新接口信息工作

为什么 AI 编程需要 Keq?

AI 编程助手面对 HTTP 请求时,最大的问题是缺乏 API 上下文——它不知道项目有哪些接口、参数是什么结构。Keq 通过将 OpenAPI 文档转化为 AI 可感知的结构化知识,让 AI 精确掌握每个接口的路径、方法、参数和响应结构,生成的代码自带完整类型推断,编译器自动校验正确性。

核心特性

⚡ 链式调用

流畅的 API 设计,让手写和 AI 生成的代码都直观易读:

await request
  .post("/cats")
  .send({ name: "mimi", age: 3 })
  .set("Content-Type", "application/json")
  .timeout(5000)
  .retry(2);

🧩 洋葱模型中间件

通过中间件组合复杂功能,官方提供开箱即用:

为什么是中间件而非拦截器?

拦截器的能力上限有限——它将请求和响应割裂为独立钩子,无法共享上下文,一些场景(如条件重试、请求计时、基于响应的二次请求)根本无法实现。中间件虽然编写更复杂,但它提供了一个能力上限极高的架构模型。在 AI 编程时代,编写复杂度已不再是瓶颈——让架构本身具备足够的灵活性,比降低手写门槛更重要。

📘 TypeScript 全链路类型推断

从请求参数到响应体,类型一路贯通:

// 自动推断响应体类型
const cat = await request.get<Cat>("/cats/1");
//    ^? Cat

// @keq-request/cli 生成的函数,参数类型严格校验
await getCats({ breed: "siamese" });
//              ^^^^^^ 未定义的参数会在编译时报错

🎨 灵活的路由系统

精准控制中间件的应用范围:

request
  .apply(authMiddleware()).forRoutes({ host: "api.example.com" })
  .apply(adminAuth()).forRoutes({ pathname: "/admin/**" })
  .apply(logMiddleware()).forRoutes({ method: "POST" });

🌐 跨平台

基于标准 Fetch API,在浏览器和 Node.js (≥20) 中使用同一套代码。

设计哲学

  1. AI 协作优先 — 让 AI 助手能精确理解和操作项目的 API 层
  2. 优雅的 API — 链式调用让代码更易读易写
  3. 可组合性 — 通过中间件组合复杂功能,而非臃肿的配置
  4. 类型安全 — 充分利用 TypeScript,在编译期发现问题
  5. 开发效率 — 通过 CLI 工具和 AI 集成减少重复劳动
  6. 灵活可控 — 提供足够的扩展点,满足各种定制需求