{"id":49815506,"url":"https://github.com/jfinal/aifei","last_synced_at":"2026-06-03T21:30:51.309Z","repository":{"id":357399788,"uuid":"1227179138","full_name":"jfinal/aifei","owner":"jfinal","description":"Aifei is the world's first AI coding framework","archived":false,"fork":false,"pushed_at":"2026-05-28T08:11:33.000Z","size":577,"stargazers_count":75,"open_issues_count":0,"forks_count":16,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-05-29T21:04:02.763Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jfinal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-02T10:16:30.000Z","updated_at":"2026-05-28T08:12:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jfinal/aifei","commit_stats":null,"previous_names":["jfinal/aifei"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jfinal/aifei","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfinal%2Faifei","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfinal%2Faifei/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfinal%2Faifei/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfinal%2Faifei/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfinal","download_url":"https://codeload.github.com/jfinal/aifei/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfinal%2Faifei/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33881107,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-13T06:00:43.983Z","updated_at":"2026-06-03T21:30:51.303Z","avatar_url":"https://github.com/jfinal.png","language":"Java","funding_links":[],"categories":["人工智能"],"sub_categories":["LLM框架"],"readme":"# Aifei\n\n世界首个 AI Coding 框架。\n\n## 简介\n\nAifei 是世界首个 AI Coding 框架。\n\nAifei 开创 Just Service 开发范式，面向 AI Coding 设计，从结构层面减少 Token 消耗、缩短上下文长度、提升 Attention 浓度，极大提升代码生成质量、生成稳定性与开发体验。\n\nAifei 采用极简设计，内核仅 3333 行代码且无第三方依赖，将极简推至全新高度。从 JFinal 到 Aifei，专注极简设计 15 年。\n\nAifei 大幅消除传统框架中被视为必需的概念，如 Controller、Render、Repository、Mapper，极小化认知负荷与上下文噪音，极大化模型注意力浓度。\n\nJust Service. Only Aifei can do.\n\n## 为什么是 Aifei\n\n过去三年，AI 写代码的能力快速跃升，代码生成正从辅助走向主导。人类完全手写代码的时代正在过去，开发者角色将转向决策与审查。\n\n围绕 AI Coding 的模型、IDE 与各类工具快速发展，但从框架层面为 AI Coding 而设计的服务端 framework 仍然缺位。\n\n传统框架面向人类手写代码时代。Aifei 面向 AI Coding 时代。\n\n在 AI Coding 场景下，框架需要优先满足大模型对代码结构的需求：\n\n- 更少的 Token 消耗\n- 更高的 Attention 浓度\n- 更低的上下文噪音\n- 更高的上下文信噪比\n- 更稳定的生成模式\n- 更直接的业务表达方式\n\n框架不再只是人类组织代码的工具，也会成为大模型理解、生成与维护代码的上下文结构。现有框架并未围绕这些核心需求构建。Aifei 正是为此而生。\n\n## 快速上手\n\n### Service\n\nJust Service 开发范式之下，在框架搭好之后，模型只需专注生成业务代码。\n\n在 AI Coding 场景中，这意味着模型只需围绕单一 Service 层生成代码，无需在 Controller、Service、Dao、Repository、Mapper、Render 等多层结构之间进行映射、拆分与补全，从而显著减少 Token 消耗，降低上下文噪音，并提升生成稳定性与代码质量：\n\n```java\n@Path(\"/vip\")\npublic class VipService {\n\n    // 查询、排序、分页\n    public Page\u003cVip\u003e index(Map\u003c?, ?\u003e filter, int pageNum, int pageSize) {\n        String sql = \"select * from vip #where(...) #and(...) ...\";\n        return Vip.sql(sql, filter).paginate(pageNum, pageSize);\n    }\n\n    // 插入\n    public Out insert(Vip vip) {\n        vip.insert();\n        return Out.ok(\"插入成功\");\n    }\n    \n    // 修改\n    public Vip edit(int id) {\n        return Vip.findById(id);\n    }\n\n    // 更新\n    public Out update(Vip vip) {\n        vip.update();\n        return Out.ok(\"更新成功\");\n    }\n\n    // 删除\n    public Out delete(int id) {\n        Vip.deleteById(id);\n        return Out.ok(\"删除成功\");\n    }\n}\n```\n\n### 配置\n\nAifei 配置在 AifeiConfig 接口中集中管理。\n\n集中式配置避免了分散式约定、隐式行为与多入口配置带来的上下文噪音，使 AI 在生成、理解与修改项目结构时更稳定、更直接、更可预测。\n\n以 VIP 订阅会员项目配置为例：\n\n```java\n/**\n * Aifei 配置中心\n */\npublic class AppConfig implements AifeiConfig\u003cIn, Out\u003e {\n\n    Prop p;\n\n    /**\n     * 偏好配置\n     */\n    public void config(Settings\u003cIn, Out\u003e settings) {\n        // 加载配置\n        p = PropKit.use(\"app-config.txt\");\n\n        // 配置日志\n        settings.setLogFactory(new Log4jLogFactory());\n\n        // 配置 Server、Dispatcher、Handler\n        settings.setServer(new UndertowServer(), new IoDispatcher());\n        settings.addHandler(new IoHandler());\n\n        // 定制 action 注入参数，注入登录账号\n        settings.configArgument(kit -\u003e {\n            kit.register(Account.class, LoginAccountArgument.class);\n        });\n    }\n\n    /**\n     * 路由配置\n     */\n    public void config(Routes routes) {\n        routes.scan(\"cn.aifei.vip\", new AuthInterceptor());\n    }\n\n    /**\n     * 插件配置\n     */\n    public void config(Plugins plugins) {\n        DruidSupplier ds = new DruidSupplier(p.get(\"jdbcUrl\"), p.get(\"user\"), p.get(\"password\"));\n        AifeiDbPlugin dbPlugin = new AifeiDbPlugin(\"main\", ds);\n\n        dbPlugin.setDialect(new MysqlDialect());    // 配置方言\n        dbPlugin.addModelSet(new ModelSet());       // 添加生成的 Model 集合\n        dbPlugin.setPrintSql(true);                 // 配置打印 sql，便于排错与优化\n        dbPlugin.setFormatSql(false);               // 配置 sql 格式化\n        // dbPlugin.setPrintSqlToLog(true);         // 配置 sql 打印到日志文件，便于找到慢 SQL 进行优化\n        \n        plugins.add(dbPlugin);\n    }\n}\n```\n\n### 启动\n\nmain 方法中调用 Aifei.start(...) 即可启动：\n\n```java\npublic class AifeiVip {\n    public static void main(String[] args) {\n        Aifei.start(new AppConfig(), args);\n    }\n}\n```\n\n### HIO\n\nAifei 顶层采用 HIO 结构，即 Handler、Input、Output 组成的处理模型。\n\n该模型将请求处理流程收敛为明确、稳定且可预测的结构，有助于 AI 在生成代码时形成一致模式，减少理解成本与结构歧义。\n\n三者均由用户自行定义，不依赖 Servlet，可按需切换底层 IO 实现。\n\n## 核心理念\n\n### Just Service\n\nJust Service 是 Aifei 成为 AI Coding 框架的核心。\n\n它消除了传统框架中的 Controller、Render、Dao、Repository、Mapper 等非业务性结构，将代码收敛为单一的 Service 层。\n\n这一设计并非只是**更少代码**，而是直接作用于大模型的工作机制：\n\n- 显著减少 Token 消耗，缩短上下文长度\n- 提升注意力浓度，让模型聚焦于业务语义\n- 降低上下文噪音，减少无关结构对生成的干扰\n- 提供更稳定的生成模式，避免结构复杂导致输出波动\n\n在传统框架中，大量分层结构与样板代码会占据上下文预算，稀释模型对核心业务的关注。而 Just Service 将上下文尽可能留给业务逻辑本身。\n\n在框架搭好之后，AI 只需围绕 Service 生成代码，无需在多层结构之间来回映射与补全，从而获得更直接、更稳定的生成结果。\n\n例如：\n\n```java\n@Path(\"/user\")\npublic class UserService {\n    public User getById(int id) {\n        return User.findById(id);\n    }\n}\n```\n\n在 Web 场景下，以上代码可通过访问 `/user?id=...` 直接调用。\n\n注：Aifei 是通用服务端框架，不限定于 Web 系统，Web 只是应用场景之一。\n\n### 上下文腐化\n\n上下文腐化（Context Rot）是 AI Coding 的隐性瓶颈。大模型虽然拥有越来越长的上下文窗口，但**可容纳**并不等于**可稳定使用**。随着上下文不断变长，模型并不会稳定、均匀、无损地利用其中所有信息。\n\n在传统框架中，Controller、Dao、Repository、Mapper、Render 等非业务结构，以及样板代码、重复配置、历史上下文与无关文件，会持续占据上下文预算，稀释模型对当前业务目标的注意力。\n\nAI Coding 的关键不只是让模型拥有更大的上下文窗口，而是让项目结构天然具备更高的上下文信噪比与注意力浓度。换句话说，框架要优化的不是名义上下文窗口，而是**有效上下文窗口**。Just Service 正是通过减少非业务结构，将上下文尽可能留给业务逻辑本身。\n\n## 数据库访问\n\n### 开始\n\nAifei 的数据库模块继承了 JFinal 数据库模块的大部分核心 API 与使用体验。\n\n从 API 使用层面看，Aifei 相比 JFinal 的主要变化在于：查询改为链式调用，并新增 `sql(...)` 方法统一承载 SQL 与参数。\n\n这一设计并非只是 API 风格变化，而是将数据库访问收敛为统一、稳定、可预测的生成模式：\n\n- SQL 始终通过单一入口表达\n- 参数传递方式始终保持一致\n- 调用结构不再分散\n\n这使 AI 在生成数据库代码时，无需在多种写法之间选择，从而减少结构分叉、降低上下文复杂度，并提升生成稳定性。\n\n深入底层实现，Aifei 数据库模块采用全新架构，代码量缩减近 50%，进一步减少理解成本与 Token 消耗。\n\n### Db + Row 模式\n\nAifei db 的所有数据库操作通过 Db + Row 模式实现。\n\n这一模式将数据访问收敛为单一抽象，避免 DAO、Mapper、Entity 等多套体系并存带来的结构分裂问题。\n\n在 AI Coding 场景中，这意味着：\n\n- 所有数据操作路径一致\n- 无需在多种访问模型之间切换\n- 上下文中只存在一套数据操作语义\n\n从而显著降低上下文噪音，并帮助模型形成稳定的生成模式。\n\n### Model\n\nAifei db 并不提供独立的 Model 层，而是将 Model 视为一种 Row。\n\n这一设计减少了抽象层级，使数据访问不再存在 Row / Model / DTO 等多重语义切换。\n\n对于大模型来说，这意味着：\n\n- 更少的概念切换\n- 更短的上下文路径\n- 更稳定的代码生成结构\n\n```\n    // User 是一种 Row，而非新增抽象。操作语义与 Row 共享\n    User.of(123).delete();\n\n    User.of(456).name(\"james\").update();\n```\n\n### 插入\n\n一行代码即可完成：\n\n```\n    // 通过 Row 插入数据\n    Row.of(\"user\").set(\"name\", \"james\").insert();\n    \n    // 通过 Model 插入数据\n    new User().name(\"james\").insert();\n```\n\n### 删除\n\n一行代码即可完成：\n\n```\n    // 通过 Db 删除\n    Db.deleteById(\"user\", 123);\n    \n    // 通过 Row 删除\n    Row.of(\"user\").id(123).delete();\n    \n    // 通过 Model 删除\n    User.deleteById(123);\n```\n\n### 修改\n\n一行代码即可完成：\n\n```\n    // 通过 Row 修改\n    Row.of(\"user\").id(123).set(\"name\", \"james\").update();\n    \n    // 通过 Model 修改\n    User.of(123).name(\"james\").update();\n```\n\n### 查询\n\nAifei 将查询统一为“SQL + 链式调用”的固定结构：\n\n```\n    // SQL + 链式 API\n    String sql = \"select ... from ... #where(...) #and(...) #orderBy(...)\";\n    Db.sql(sql, filter).find();\n    \n    // 同一 SQL 不同 API 共享\n    Db.sql(sql, filter).paginate(1, 30);\n```\n\n这一结构具有明确边界：\n\n- SQL 负责表达查询语义\n- API 负责控制执行方式\n\n两者职责清晰，不混合、不分散，使 AI 在生成查询代码时无需推断隐式行为。\n\n更多示例：\n\n```\n    // 查询第一个\n    Db.sql(\"select * from user\").findFirst();\n\n    // 查询一个，未查到时抛异常\n    Db.sql(\"select * from user\").findOne();\n\n    // 分页，并对每页进行迭代。适合对全表进行全量操作\n    User.sql(\"select * from user\").forEachPage(10, (Page\u003cUser\u003e page) -\u003e {\n        for (User user : page.getRows()) {\n            System.out.println(user.getName());\n        }\n        return true;    // 返回 false 终止于当前分页\n    });\n```\n\n统一的调用形式，使模型更容易复用生成结果，减少结构偏差。\n\n查询条件生成指令 #where 与 #and：\n\n```\n    // where 指令与 and 指令只在参数不为 null 时生成 SQL\n    select * from user #where(name, '=', name)\n\n    // 完美替代以往 JFinal 用法\n    select * from user where 1 = 1 #if(name) and name = #para(name) #end\n```\n\n#where 与 #and 指令，将动态 SQL 从“模板拼接”转化为“结构化表达”。\n\n对于 AI 来说，这一变化非常关键：\n\n- 不再需要生成分支结构（if / end）\n- 不再需要维护模板语法一致性\n- 条件表达变为固定函数式结构\n\n从而显著降低生成复杂度，并减少出错概率。\n\n#where 与 #and 指令参数用法完全一样：\n\n```\n    select ... #where(name, 'like', name) #and(age, '\u003e', age)\n```\n\n排序指令 #orderBy：\n\n```\n    // 前端传递 orderBy 变量\n    {\n       name: 'james',\n       orderBy: { field: 'updated', order: 'desc' }\n    }\n\n    // 后端接收参数并使用\n    public List\u003cUser\u003e search(Map\u003c?, ?\u003e filter) {\n        // orderBy 指令参数 created、id 为可用于排序的白名单，用于防止 SQL 注入\n        String sql = \"select * from user #where(name, '=', name) #orderBy(created, id)\";\n        return User.sql(sql, filter).find();\n    }\n```\n\n#orderBy 指令将排序生成收敛为白名单约束下的固定模式：\n\n- 排序字段受限于白名单\n- 排序结构固定\n- 无需拼接字符串\n\n这不仅提升安全性，也使 AI 在生成排序逻辑时无需构造复杂表达，从而提升生成稳定性。\n\n### 事务\n\n```\n    // id 为 1 的账号转账 100 元到 id 为 2 的账号\n    Db.transaction(tx -\u003e {\n        int money = 100;\n        int n1 = Db.sql(\"update account set money = money - ? where id = ? and money \u003e= ?\", money, 1, money).update();\n        int n2 = Db.sql(\"update account set money = money + ? where id = ?\", money, 2).update();\n        return n1 == 1 \u0026\u0026 n2 == 1 ? Out.ok(\"转账成功\") : Out.fail(\"转账失败\");\n    });\n```\n\n### 批量操作\n\nAifei 的批量操作支持 Row / Model 参数名、参数数量都不相同的场景，完美解决 JFinal 遗留问题：\n\n```\n    // 批量插入\n    List\u003cRow\u003e list = new ArrayList\u003c\u003e();\n    list.add(new Row().set(\"age\", 11));\n    list.add(new Row().set(\"name\", \"测试123\"));\n    Db.batchInsert(\"user\", list);\n\n    // 批量更新\n    List\u003cRow\u003e list = new ArrayList\u003c\u003e();\n    list.add(new Row().set(\"id\", 1).set(\"age\", 18));         // 更新 age\n    list.add(new Row().set(\"id\", 2).set(\"name\", \"测试456\"));  // 更新 name\n    Db.batchUpdate(\"user\", list);\n```\n\nAifei 的批量操作支持参数结构不一致的场景。\n\n这使 AI 在处理复杂数据时：\n\n- 无需对数据结构做额外归一化\n- 无需引入分支逻辑处理差异\n- 仍可保持统一生成模式\n\n从而避免生成复杂度随数据结构增长而急剧上升。\n\n批量操作在 Excel 导入等场景下是刚需，该功能相对 JFinal 有极大提升。\n\n### 完整性\n\nAifei db 功能完整覆盖 JFinal 数据库功能，但代码量缩减近 50%，在降低 Token 消耗的同时，将数据库操作体验提升到新的高度。\n\n## AI Coding\n\nAI Coding 是 Aifei 的核心应用场景。\n\nAifei 并非在传统框架之上增加 AI 用法，而是从框架结构本身出发，直接围绕大模型的工作机制重新思考服务端开发。\n\nJust Service 将代码结构压缩至最小，使大模型在生成代码时可以将绝大部分上下文预算用于业务逻辑本身，而不是消耗在框架结构、分层映射与样板代码上。\n\n相比传统框架，Aifei 具备以下优势：\n\n- 更少的 Token 消耗\n- 更短的上下文长度\n- 更高的注意力浓度\n- 更低的上下文噪音\n- 更稳定的生成模式\n- 更统一的结构表达\n\n在实际使用中，大模型只需围绕 Service、SQL 与数据生成代码，即可完成完整业务逻辑，实现真正意义上的 AI Coding。\n\n后续官方会逐步推出 AI Coding 相关资源，如 skills。\n\n当下需要体验的同学，可以让大模型参考样例代码直接生成业务逻辑。Just Service 之下，已可获得稳定且高质量的生成结果。\n\n## 更多内容\n\n为尽早发布，当前文档优先覆盖核心理念与快速上手。HIO、AI Coding 实践、完整工程示例等内容将在后续持续补充。\n\n如需提前体验更完整的企业级实现，可订阅官方唯一 VIP 会员：[Aifei VIP 订阅](https://aifei.cn)\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfinal%2Faifei","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfinal%2Faifei","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfinal%2Faifei/lists"}