EdgeChains
基于Jsonnet声明式管理的全栈GenAI开发框架,让Prompt和Chain像代码一样版本化、测试化、部署化
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于Jsonnet声明式管理的全栈GenAI开发框架,让Prompt和Chain像代码一样版本化、测试化、部署化
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:你是一家电商公司的 AI 工程师,产品经理提出了一个需求——"用户上传商品 PDF 手册,我们用 AI 提取参数,回答用户关于这个商品的任何问题"。你会怎么做?
最朴素的做法是直接调用 OpenAI API,把 PDF 内容塞进 prompt。但当你真正动手时会发现:这涉及到多个环节——PDF 解析、文本分块、向量化存储、相似度检索、上下文注入、prompt 链式组装……每一步都需要精心设计。更要命的是,当你想在另一个场景(比如客服对话)复用这套逻辑时,发现 Prompt 已经"写死"在代码里了,改动成本极高。
EdgeChains.js 正是为解决这个痛点而生。它的核心主张是:GenAI 应用不是"调 API",而是"工厂流水线"——需要用工业级配置管理思维来管理 Prompt 和 Chain。
EdgeChains 由 Arakoo 团队开发,核心作者 Prakash(GitHub @arakoodev)是一个在云原生基础设施领域有深厚背景的开发者。EdgeChains 的设计灵感来源于 Google 内部管理 Borg 配置文件的经验——Google 用 Jsonnet 来管理海量的基础设施配置,而 EdgeChains 把这套方法论迁移到了 Prompt 工程领域。
这个选择绝非偶然。Prompt 工程有三个天然的"工程化难题":
EdgeChains 的答案是:让 Prompt 活在代码之外。
EdgeChains 的技术架构可以类比为"给 GenAI 应用装上了配置管理层"。它基于两个成熟的基础设施库构建:
在 EdgeChains 中,一个完整的 AI Chain 只需要两个文件:
// main.jsonnet
local OPENAI_API_KEY = import "secrets.jsonnet".openai_api_key;
{
chain: {
steps: [
{ type: "prompt", template: "请总结以下内容:{input}" },
{ type: "llm", provider: "openai", model: "gpt-4", api_key: OPENAI_API_KEY }
]
}
}
所有 Chain 逻辑以 Jsonnet 文件形式存在,具备:
EdgeChains 提供了完整的文档处理链路:
| 模块 | 功能 |
|---|---|
document-loader | 解析 PDF、网页、Markdown 等多格式文档 |
splitter | 智能文本分块,保持语义完整性 |
vector-db | 集成 Supabase 向量数据库,支持语义检索 |
arakooserver | 内置 Hono HTTP 服务,暴露 REST API |
scraper | 网页内容抓取,构建实时知识库 |
以 PDF 问答为例(chat-with-pdf 示例),完整流程是:
PDF上传 → cheerio/pdf-parse解析 → 1536维OpenAI Embedding → Supabase向量存储
↓
用户提问 → Embedding检索 → 上下文组装 → GPT-4生成回答
EdgeChains 内置了函数调用(Tool Use)的能力,支持将外部 API(如天气查询、数据库查询)无缝集成到 Chain 中。例如 getWeather-or-time-function-calling 示例,展示了如何让 LLM 自主决定调用哪个工具:
// 声明工具
const tools = [
{ name: "get_weather", description: "获取城市天气", params: { city: "string" } },
{ name: "get_time", description: "获取当前时间", params: { timezone: "string" } }
];
// EdgeChains 自动处理 Tool Selection、调用和结果回填
research-agent 示例是 EdgeChains 最复杂的应用场景之一:让 AI 自主规划研究路径、搜索信息、整合结论。用户只需要描述研究目标,系统自动完成多轮信息检索与分析,最终输出结构化报告。这个模式特别适合竞品分析、市场调研、学术综述等场景。
react-chain 示例展示了如何将 EdgeChains 后端与 React 前端结合。React 组件通过 /src/routes/react-chain.ts 暴露的 API 与后端通信,前端只需几行代码即可接入复杂的 AI Chain:
// React 组件调用示例
const response = await fetch('/react-chain', {
method: 'POST',
body: JSON.stringify({ query: userInput })
});
const result = await response.json();
EdgeChains 提供三种部署路径:
cd JS/edgechains/examples/chat-with-llm
npm install
npm run start # 启动 Hono 服务
这是最简单的上手方式,适合快速验证和本地开发。Hono 作为底层框架,服务启动极快(冷启动 <10ms)。
仓库中包含一个多阶段 Dockerfile,将应用打包为生产镜像:
FROM node:20 as builder
RUN npm install && npm run build
FROM tanjim/wasmjs:latest
COPY --from=builder /app/bin /app
ENTRYPOINT [ "wasmjs-runtime", "/app" ]
需要注意的是,Docker 镜像依赖自定义的 wasmjs-runtime 基础镜像,需要先确保该镜像可用。
这是 EdgeChains 最有特色的能力——将 JavaScript 写的 AI 应用编译为 WebAssembly,运行在边缘设备上:
arakoo 运行时执行编译后的 WASM 二进制文件体积小、启动快、天然沙箱化,适合部署到 Cloudflare Workers、Fastly Compute@Edge 等边缘计算平台。
EdgeChains 是一个真正的全栈 TypeScript 库,底层技术选型:
| 层级 | 技术选型 |
|---|---|
| HTTP 框架 | Hono.js 3.9.x(Cloudflare Workers 兼容) |
| 配置语言 | Jsonnet(Google 出品) |
| AI 集成 | OpenAI API、Retell SDK |
| 向量数据库 | Supabase(PostgreSQL + pgvector) |
| 文档处理 | cheerio、pdf-parse、node-html-parser |
| ORM | TypeORM |
| 测试 | Vitest + Playwright |
| 编译工具 | esbuild、TypeScript |
| WASM 运行时 | javy(Rust 实现)、wasmtime |
值得注意的是,EdgeChains 的 Rust 部分(JS/wasm/crates/)负责 WASM 编译工具链,使用 Rust 的 wasmtime 作为 WASM 运行时,与 JavaScript 部分形成了一个完整的工具链闭环。
EdgeChains 并非没有争议:
EdgeChains 代表了 GenAI 应用开发的一个新兴流派——配置优先(Configuration-First)。传统 LangChain 的思路是"用代码表达逻辑",而 EdgeChains 的思路是"用配置表达逻辑,代码只负责执行"。
这种思路的价值在于:当 Prompt 需要频繁迭代时,配置文件比代码更容易管理、测试和部署。随着大模型能力持续提升(更长的上下文窗口、更好的指令遵循),EdgeChains 这类"轻代码、重配置"的框架可能会越来越受欢迎。
项目增长情况:当前 424 stars、208 forks,活跃在 Discord 社区,整体处于早期但稳定发展阶段。