SuperAPI AI 工具集

elixir-genius

编程与开发

查看项目

更新于 10-16 10:33

技能介绍

elixir-genius 面向设计与架构 Elixir/Phoenix/LiveView 应用的场景,其目标是产出可用于交接的完整项目文档,使 Director 与 Implementor 两类 AI 代理能够按照 Dave Thomas、Saša Jurić 及 Elixir 社区的最佳实践协作构建复杂系统。

核心架构原则:以数据库作为唯一事实来源,领域实体不使用 GenServer;采用函数式核心与命令式外壳,纯业务逻辑放在 impl/ 层;遵循“让它崩溃”的容错理念,通过监督树保证健壮性;使用 Dave Thomas 的基于路径依赖结构而非 umbrella 应用;异步处理并避免在请求路径中调用外部服务;坚持测试驱动开发;导入、别名与 require 只允许出现在模块级别,绝不在函数内部使用。

Elixir 惯用模式部分,强调用 with 语句替代嵌套 if/case 的“末日金字塔”,用函数头多子句模式匹配替代函数内条件分支,用守卫子句做类型与简单谓词检查,用管道操作符串联数据转换。并给出 case、cond、with 的选择依据:case 用于值与模式匹配,cond 用于多个布尔条件,with 用于可能失败的链式操作。

语言陷阱部分列出了若干常见错误:Elixir 没有 return 语句与提前返回,块中最后一个表达式即为返回值;列表不支持下标访问,应使用 Enum.at 或模式匹配;块内变量不会泄漏到外部;结构体应使用点号访问而非方括号;绝不可把用户输入转换为原子以免内存泄漏,应使用 String.to_existing_atom;不存在 elsif 关键字,应使用 cond;避免使用进程字典;宏仅在明确需要编译期代码生成或 DSL 时使用。

命名与性能方面:谓词函数以 ? 结尾且不以 is_ 开头,is_ 前缀保留给可用于守卫的函数;大数据集合优先用 Stream 惰性求值;列表构造采用前插后反转以保持 O(1);优先用 Enum.reduce 替代手动递归。

并发部分介绍 Task.async_stream 做带背压的并发操作,以及用 Task.Supervisor 实现不拖垮调用方的容错任务,并配合 Task.yield/Task.shutdown 处理失败与超时。

GenServer 仅用于基础设施(如缓存、限流),不用于领域实体;状态应保持简单可序列化;通过 handle_continue 处理初始化后的重活,实现 terminate 做清理;优先使用 call 而非 cast 以获得背压;监督树应设置 max_restarts 与 max_seconds 防止重启风暴。

库推荐包括:HTTP 客户端使用 Req(而非 HTTPoison、Tesla、httpc),LLM 集成使用 ReqLLM + Zoi,邮件使用 Swoosh,JSON 使用 Jason(而非 Poison)。文档给出了 Req 的 HTTP 客户端封装示例(含重试、指数退避与抖动)、ReqLLM 的任务分类示例以及 Zoi 的运行时校验 schema 示例。

使用方式上,该技能在需要设计或架构 Elixir/Phoenix/LiveView 应用、编写综合项目文档、规划 OTP 监督树、定义领域模型、组织基于路径依赖的多应用项目,或准备 Director/Implementor AI 协作交接文档时启用。关于其具体安装命令、收费与价格、平台支持范围等信息暂未提供。