grace

GitHub
552 42 非常简单 1 次阅读 2天前BSD-3-Clause图像语言模型开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

Grace 是一门专为提示工程(Prompt Engineering)设计的函数式编程语言,旨在帮助开发者高效构建和自动生成复杂的提示链。它解决了传统提示工程中手动拼接字符串、难以结构化输出以及缺乏类型安全保障的痛点,让与大模型的交互像编写普通代码一样严谨且流畅。

Grace 非常适合需要频繁调用大模型进行数据生成、逻辑处理或代码辅助的开发者及技术研究人员。其核心亮点在于“开箱即用”的集成体验:无需安装依赖,内置的 prompt 函数可直接调用模型。更独特的是,Grace 拥有强大的类型推导能力,能根据代码中变量的使用方式自动反推所需的 JSON Schema,从而精准约束模型输出格式,甚至在无需编写具体提示词的情况下也能获得结构化数据。此外,它还支持通过 import prompt 语法直接让模型生成可执行的 Grace 代码片段,实现了从自然语言到可运行逻辑的无缝转化。用户可以通过浏览器访问 trygrace.dev 立即体验其交互式教程,快速上手这一创新的开发工具。

使用场景

某电商数据团队需要每日从非结构化的用户评论中提取商品特征、情感倾向及改进建议,并自动生成标准化的 JSON 报告供下游分析系统使用。

没有 grace 时

  • 开发人员需手动编写冗长的 Prompt 模板,反复调试才能勉强让模型输出合法的 JSON 格式,极易出现括号不匹配或字段缺失。
  • 当业务需求变更(如新增“适用人群”字段)时,必须同时修改 Prompt 文本和后端的 JSON 解析逻辑,维护成本高昂且容易出错。
  • 缺乏类型安全保障,模型偶尔输出的自由文本会导致后端程序崩溃,团队不得不花费大量时间编写额外的异常捕获和清洗代码。
  • 构建复杂的多步处理链(如先提取关键词再分类)时,脚本变得臃肿不堪,难以阅读和复用。

使用 grace 后

  • 利用类型推导机制,开发者只需定义目标数据结构(如 List { feature: Text, sentiment: Text }),grace 自动将其转换为精准的 JSON Schema 约束模型输出,彻底杜绝格式错误。
  • 业务字段变更时,仅需调整类型定义,grace 会自动反向推导并更新隐含的 Prompt 指令与校验逻辑,实现“改一处而动全身”的安全迭代。
  • 内置的类型检查器在运行前即可发现数据结构不匹配的问题,确保模型输出永远符合预期,完全消除了运行时解析异常的风险。
  • 借助函数式特性,复杂的提取与分析流程可被拆解为简洁的组合函数,通过 import prompt 直接生成处理逻辑,代码清晰且易于测试。

grace 通过将数据类型作为提示工程的核心,把不可控的自然语言交互转变为类型安全、可自动推导的可靠软件开发流程。

运行环境要求

操作系统
  • 未说明
GPU

不需要 GPU

内存

未说明

依赖
notes该工具是一个基于 Haskell 的领域特定语言(DSL),用于构建提示词链,并非本地运行的 AI 模型,因此无需 GPU 或特定 Python 环境。用户可通过浏览器 (trygrace.dev) 直接使用,或通过命令行安装 Haskell 包运行。运行时需配置 OpenAI API Key。
python不适用
Haskell (编译环境)
garnix (构建工具)
grace hero image

快速开始

Grace

由 garnix 构建 BlueSky | @trygrace.dev

Grace(“Fall-from-Grace”的缩写,见下文)是一种用于提示模型的领域特定编程语言。特别地,Grace 非常适合构建和自动生成复杂的提示链。

您无需安装任何东西,只需访问 trygrace.dev 即可在浏览器中使用 Grace。该网站包含一个交互式教程,是学习和开始使用 Grace 的推荐方式。

特性

  • 针对模型的集成语言支持

    您无需安装任何依赖或导入任何内容即可开始使用。所需的一切都直接内置于语言中。

    该语言提供了一个内置的 prompt 函数来向模型发出提示:

    >>> let key = ./openai.key : Key
    
    >>> prompt{ key, text: "生成一份名字列表" }
    "
    这里有40个风格各异的常见名字(男女兼有,文化背景多样):
    
    - 艾登
    - 索菲娅
    - 马特奥
    …
    - 梅贝尔
    - 伊玛尼
    - 泽恩
    
    您是否希望按性别、文化、风格(现代/复古)筛选,或者以全名/姓氏的形式呈现这些名字?"
    

    … 并且您可以通过提供类型注解来组织输出:

    >>> prompt{ key, text: "生成一份名字列表" } : List Text
    [ "艾娃·汤普森"
    , "利亚姆·帕特尔"
    , "索菲娅·马丁内斯"
    …
    , "杰克逊·里维拉"
    , "佐伊·威尔逊"
    , "艾登·帕克"
    ]
    

    如果类型足够明确,甚至可以省略提示:

    >>> prompt{ key } : List { name: Text }
    [ { "name": "爱丽丝" }
    , { "name": "鲍勃" }
    , { "name": "查理" }
    , { "name": "黛安娜" }
    , { "name": "伊芙" }
    ]
    

    实际上,如果类型可以从用法中推断出来,连类型也可以省略:

    >>> for { name } of prompt{ key } in "你好,${name}!"
    [ "你好,爱丽丝!"
    , "你好,鲍勃!"
    , "你好,卡罗尔!"
    , "你好,戴夫!"
    , "你好,伊芙!"
    ]
    
  • 根据用法推断出的 JSON 模式

    上面最后一个例子即使没有提示、模式或类型也能正常工作,因为 Grace 的类型检查器会根据输出的使用方式反向推理出正确的 JSON 模式,如下所示:

    • 类型检查器推断出变量 name 必须是 Text 类型,

      因为 name 变量被插值到 "你好,${name}!" 中。

    • 类型检查器推断出 prompt 函数必须生成一个 List 类型的值,

      因为程序使用 for … of 循环遍历了输出。

    • 类型检查器推断出 List 中的每个元素都是 { name: Text } 类型,

      因为 for … of 循环通过 { name } 解构了每个元素。

    • 因此,prompt 函数的输出类型是 List{ name: Text }

      你可以将其理解为“一个记录列表,其中每个记录都有一个名为 name 的字段,字段值为 Text”。

    解释器随后会将这个 Grace 类型转换为以下匹配的 JSON 模式,以约束模型的输出:

    {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "required": ["name"],
        "additionalProperties": false
      }
    }
    

    最后,模型仅从这个 JSON 模式中(无需任何额外提示)推断出它应该生成一个包含名字的 JSON 编码列表。

  • 代码生成

    您可以在 prompt 关键字前加上 import,要求模型生成任意类型的 Grace 表达式。例如:

    >>> import prompt{ key, text: "increment" }
    \n -> n + 1
    

    您还可以使用显式的类型注解来指导生成的代码:

    >>> import prompt{ key, text: "increment" } : { input: Natural } -> { output: Natural }
    \{ input } -> { "output": input + 1 }
    

    … 如果类型足够清晰,甚至可以省略提示:

    >>> import prompt{ key } : { "职位描述": Text } -> { "是否属于金融行业?": Bool }
    let key = 🔒
    
    in  \{ "职位描述" } ->
          prompt
            { "key":
                key
            , "text":
                "
                判断以下职位描述是否属于金融行业。请返回一个只包含布尔型字段 '是否属于金融行业?' 的 JSON 对象:如果是金融行业,则为 true;否则为 false。请仅回答有效的 JSON,不要添加其他内容。
    
                职位描述:
                ${.'Job Description'}
                "
            , "model":
                null
            , "search":
                null
            , "effort":
                null
            }
            : { "是否属于金融行业?": Bool }
    

    在最后一个例子中,您会注意到模型能够生成一段自身还会再次调用 prompt 的代码。真巧妙!

    推断出的类型同样也会指导代码生成过程!

    >>> let upper = import prompt{ key, text: "uppercase" } in "你好,${upper "gabby"}!"
    "你好,GABBY!"
    

    在这里,模型推断出 upper 函数的类型应该是 Text -> Text(即输入为 Text、输出也为 Text 的函数),并生成了一个符合该类型、能够将文本转为大写的函数。

命令行工具

这个 Haskell 包构建了一个名为 grace 的可执行文件,其命令行 API 如下:

$ grace --help
用法:grace COMMAND
  Grace 语言的命令行工具

可用选项:
  -h,--help                显示此帮助文本

可用命令:
  interpret                解释一个 Grace 文件
  text                     渲染一个 Grace 文本字面量
  format                   格式化 Grace 代码
  builtins                 列出所有内置函数及其类型
  repl                     进入 Grace 的 REPL 环境

您可以使用 interpret 子命令来解释单个文件:

# ./greet.ffg

for { name } of prompt{ key: ./openai-key.txt }

in  "你好,${name}!"
$ grace interpret ./greet.ffg
[ "你好,Alice!", "你好,Bob!", "你好,Charlie!" ]

… 您也可以指定 - 来处理标准输入而不是文件,例如:

$ grace interpret - <<< '2 + 2'
4

此外,您还可以使用 repl 子命令进行交互式使用:

$ grace repl
>>> let key = ./openai-key.txt
>>> prompt{ key } : List { "First Name": Text, "Last Name": Text }
[ { "First Name": "John", "Last Name": "Doe" }
, { "First Name": "Jane", "Last Name": "Smith" }
, { "First Name": "Alice", "Last Name": "Johnson" }
, { "First Name": "Michael", "Last Name": "Brown" }
, { "First Name": "Emily", "Last Name": "Davis" }
]

名称

和我所有的编程语言项目一样,Grace 的名字来源于《无主之地:折磨》中的一个角色,具体来说就是 堕落者

由于这个编程语言的名称与另一个编程语言 grace 重名,在上下文不够明确的情况下,请使用全称“Fall-from-Grace”以避免混淆。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架