简介
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:
- Claude Code
- Cursor
- VS Code
{
"mcpServers": {
"keq": { "command": "npx", "args": ["@keq-request/cli", "mcp"] }
}
}{
"mcpServers": {
"keq": { "command": "npx", "args": ["keq", "mcp"] }
}
}{
"servers": {
"keq": { "command": "npx", "args": ["keq", "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);🧩 洋葱模型中间件
通过中间件组合复杂功能,官方提供开箱即用:
- 超时控制 - 防止请求长时间挂起
- 失败重试 - 灵活的重试策略
- 并发控制 - 管理并发请求数量
- 智能序列化 - 根据 Content-Type 自动处理响应
- 异常处理 - 统一的错误处理机制
- 请求缓存 - 减少不必要的网络请求
拦截器的能力上限有限——它将请求和响应割裂为独立钩子,无法共享上下文,一些场景(如条件重试、请求计时、基于响应的二次请求)根本无法实现。中间件虽然编写更复杂,但它提供了一个能力上限极高的架构模型。在 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) 中使用同一套代码。
设计哲学
- AI 协作优先 — 让 AI 助手能精确理解和操作项目的 API 层
- 优雅的 API — 链式调用让代码更易读易写
- 可组合性 — 通过中间件组合复杂功能,而非臃肿的配置
- 类型安全 — 充分利用 TypeScript,在编译期发现问题
- 开发效率 — 通过 CLI 工具和 AI 集成减少重复劳动
- 灵活可控 — 提供足够的扩展点,满足各种定制需求