ash_ai
用声明式语法在 Ash 应用中安全集成 LLM,零 Python 胶水代码
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用声明式语法在 Ash 应用中安全集成 LLM,零 Python 胶水代码
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你是一个 Elixir 开发者,花了数年时间精心构建了一套基于 Ash Framework 的业务逻辑系统——数据模型优雅、API 设计清晰、权限策略严密。突然,团队要求给系统加上 AI 能力:智能客服、自然语言查询、数据摘要生成。
传统方案是什么?调用 LangChain Python API、写一堆胶水代码、绕过 Ash 的安全层直接操作数据库。结果:AI 是接上了,但整个系统的安全性和可维护性一夜回到解放前。
Ash AI 正是为解决这个痛点而生。它是 Ash 官方团队打造的 Elixir 扩展包,让开发者用 Ash 惯用的声明式写法,无缝接入大语言模型能力——不需要 Python,不需要绕过安全层,一切都在 Elixir 的生态里完成。

图1:Ash AI 项目 Logo
这是 Ash AI 最核心的能力。将 LLM 的自由文本输出,转化为精确的 Elixir 类型定义。
开发者先用 Ash 原生方式定义类型结构,然后在 Action 中声明 prompt 调用,Ash AI 自动处理 prompt 构建、LLM 调用和结果解析。代码示例中,scan_for_products Action 声明返回 ProductInfo Struct 数组,Ash AI 自动将 LLM 输出解析为类型安全的 Elixir Struct,后面的业务代码直接用百分号 Struct 操作,完全不需要处理字符串解析。类型安全、IDE 支持、编译器检查——全都在。
传统 AI Agent 的工具调用方案,安全性全靠 prompt 里的"请不要删除其他用户的数据"来保证。Ash AI 用 Ash 框架本身的 actor/policy 授权系统替代了这种脆弱的约束。
开发者将任意 Ash Action 注册为 LLM 工具,每个 Action 对应一个 LLM 可调用的函数。当 LLM 调用这些工具时,Ash 的权限策略自动生效——每个操作都经过授权检查,不会出现"AI 误删其他用户数据"的事故。这是一种从架构层面而非 prompt 层面的安全设计,代表了 AI Agent 安全集成的主流方向。
Ash AI 提供声明式的向量化配置,自动将数据模型的文本字段转化为向量嵌入。底层基于 pgvector(PostgreSQL 向量扩展)存储嵌入向量,支持余弦距离查询,可用于构建 RAG(检索增强生成)应用。开发者只需在 Resource 中声明哪些字段需要向量化、选择哪个 embedding 模型,Ash AI 自动处理向量生成和存储,大幅降低了 RAG 系统的实现门槛。
对于需要快速上线对话界面的场景,Ash AI 提供了一条命令生成完整 Phoenix LiveView 对话机器人的能力。mix ash_ai.gen.chat --live 这条命令生成包含实时对话流、Phoenix PubSub 流式响应、LLM 工具调用、Oban 持久化消息队列的完整 Chat UI。从零到可用的 AI 对话应用,最快 3 分钟。
Ash AI 支持 Anthropic 的 MCP 协议,可将 Ash Action 暴露为 MCP 工具,供 Cursor、Claude Desktop 等支持 MCP 的 IDE 和 Agent 使用。提供了 Dev MCP(本地开发用,作为 Phoenix Endpoint Plug)和 Production MCP(作为 Router 部署)两套方案,满足不同场景需求。
Ash AI 并非从零造轮子,它的核心设计哲学是:用声明式语法封装底层复杂性。底层依赖关系清晰:LangChain 承担 LLM 调用编排、pgvector 处理向量存储、Phoenix 承载 Web UI。Ash AI 则在这一切之上,构建了一套统一的声明式 DSL。
项目代码结构极简(lib/ash_ai.ex 主文件仅 21KB),大部分逻辑通过 Ash DSL 扩展(use Ash.Resource)注入。mix.exs 声明的依赖包括:ash(Ash Framework 核心)、langchain(LLM 调用编排)、req(HTTP 客户端)、oban/ash_oban(定时任务,可选)、postgrex+ash_postgres(数据库支持,含 pgvector)。版本 v0.7.2,Elixir 版本要求 >= 1.17。

图2:Ash AI 深色版 Logo
Ash AI 是一个 Elixir 库包,设计目标不是独立运行,而是作为 Phoenix 应用的扩展模块使用。安装方式为通过 Igniter 自动配置,或在 mix.exs 中手动添加依赖。安装后,所有 Ash AI 的 DSL 扩展(prompt()、tools、vectorize 等)就可以在你的 Ash Resource 中直接使用。
容器化支持:目前不支持。项目没有提供 Dockerfile 或 docker-compose.yml,也没有 Kubernetes 部署清单。如果需要在 Docker 环境中运行,需要自行编写 Dockerfile 并在镜像中安装 Elixir + Erlang/OTP 环境。
Ash AI 的目标用户是已经在生产环境使用 Ash Framework、想在现有应用中安全地叠加 AI 能力的 Elixir 开发者。如果从零开始,建议先熟悉 Ash Framework 的核心概念(Resource、Domain、Action、Policy)。需要具备:Elixir/Erlang 编程基础、Ash Framework 使用经验、对 LLM API/Tool Calling/Structured Output 等概念的初步理解。上手难度中等偏高。
Ash AI 存在以下局限:第一,深度依赖 Ash Framework 和 Elixir 生态,非 Elixir 团队门槛极高且不可迁移。第二,虽然封装了 LangChain,但模型选择和 Prompt 优化仍需手动调参,Ash AI 不提供模型路由或自动 Prompt 优化。第三,RAG 功能依赖 PostgreSQL + pgvector,使用 MySQL/MongoDB 等其他数据库的团队需要额外迁移。第四,MCP 协议生态仍在早期,可集成的外部工具数量有限。第五,缺乏开箱即用的 Docker 支持,云原生部署需额外工作量。
Ash AI 代表了一个重要趋势:在 AI 能力集成时,优先考虑安全性和架构完整性,而非单纯追求接入速度。它明确反对"给 AI 全权数据库访问、靠 prompt 约束行为"的 Agent 设计模式,主张"让 AI 的每一个操作都经过应用层授权"的安全优先路线。
从 Elixir 生态角度看,Ash AI 让 Ash Framework 从一个"强大的业务逻辑框架"升级为一个"AI 就绪的应用开发平台",有望吸引更多希望在 Elixir 生态内使用 AI 能力的团队。GitHub 184 stars(截至分析时),版本 0.7.2(预发布阶段),属于活跃开发中的项目。值得关注其从 0.x 到 1.0 稳定版的演进方向,特别是 MCP 生态和更多 LLM 供应商支持的扩展。