ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

A2UI Express 开发者指南:用节省 55%~70% Token 的声明式 DSL 驱动生成式 UI

A2UI Express 开发者指南:用节省 55%~70% Token 的声明式 DSL 驱动生成式 UI A2UI Express 开发者指南用节省 55%70% Token 的声明式 DSL 驱动生成式 UI【免费下载链接】a2ui项目地址: https://gitcode.com/GitHub_Trending/a2/a2uiA2UI Express 是 a2ui 仓库中面向动态生成式用户界面Generative UI设计的一套紧凑、token 高效的声明式语法它作为模型端输出的中间态高压缩记号由宿主端编译器解析并编译为标准 A2UI v1.0 线协议载荷。本篇指南以 A2UI Express 开发者指南 为主线结合 技术规格、端到端示例文档、ANTLR 文法 Express.g4 以及编译器的真实实现 compiler.py 进行纵深展开。读完本文你将掌握如何在本地或远程 Gemini 模型上运行 A2UI Express 推理与编译校验、四个独立 CLI 工具的用法、完整语法要素与编译管线原理以及从模型原始输出到标准 v1.0 JSON 的完整端到端链路。一、什么是 A2UI Express核心设计目标A2UI Express 并不是与 A2UI 并列的另一种协议而是位于模型输出与标准 A2UI v1.0 线协议之间的中间表示IR。根据 技术规格它的设计围绕四个核心目标Token 缩减生成式模型输出冗长的 JSON 结构会消耗大量输出 token。A2UI Express 移除结构键、括号与重复引号相比原生 A2UI 线载荷可将输出 token 减少55%70%。端侧模型优化Gemma 4 E2B / E4B 等小型本地模型上下文窗口与推理预算有限紧凑的位置式签名positional signature可嵌入提示词契约prompt contract而不占用过多上下文。流式兼容行导向的语法允许宿主按行解析并逐步构建组件层级在模型输出完成之前即可实现界面的渐进式渲染。协议对齐A2UI Express 与标准 A2UI v1.0 保持完整语义兼容支持数据绑定、客户端校验规则与本地事件处理。从仓库实现看A2UI Express 的编译器位于 compiler.py其类文档明确说明该编译器用于解析位置参数、将变量引用扁平化为邻接表组件树并构造合法 A2UI v1.0 JSON 载荷与规格描述完全吻合。二、环境变量闸门A2UI_EXPRESS_ENABLED为避免在开发期间污染稳定的 v1.0 基线工作区所有 A2UI Express 代码导入与命令行工具都被环境变量A2UI_EXPRESS_ENABLED闸门保护。README 明确要求所有 python 命令调用前必须前缀A2UI_EXPRESS_ENABLEDtrue例如A2UI_EXPRESS_ENABLEDtrue uv run --project ../../../agent_sdks/python/a2ui_agent scripts/run_compiler.py ...这一点在执行本文所有命令时都要遵守否则相关脚本将无法正常工作。从仓库路径结构看脚本位于 specification/proposals/express/scripts/它们通过sys.path.insert动态注入agent_sdks/python/a2ui_agent/src到 Python 路径因此可以从任意目录直接运行详见各脚本开头 2843 行的路径注入逻辑。三、运行推理与编译校验Gemini API默认情况下测试与评估工具通过标准 Google GenAI SDK 调用远程 Gemini 模型。README 给出了标准操作流程1. 设置 API Keyexport GEMINI_API_KEYyour_gemini_api_key_here2. 进入目录并执行推理以gemini-3.1-flash-lite为例# Navigate to the express directory cd specification/proposals/express # Run inference against Gemini API (using the a2ui_agent project environment) A2UI_EXPRESS_ENABLEDtrue uv run --project ../../../agent_sdks/python/a2ui_agent scripts/run_inference.py \ ../../v1_0/catalogs/basic/examples/01_flight-status.json \ --model gemini-3.1-flash-lite该脚本run_inference.py会依次执行以下五步从 JSON 示例中提取目标组件结构寻找messages数组中updateComponents消息的components列表将活动 catalog 的 schema 定义编译为纯文本位置式签名通过ExpressFormat(catalog)与prompt_generator.generate(include_schemaTrue)生成系统指令使用提示词契约系统指令查询 Gemini APItemperature0.1以换取确定性输出将模型返回的 A2UI Express DSL 重新编译为格式化、缩进的标准 A2UI v1.0 JSON校验最终组件树结构检查父子引用与数据指针路径。从源码看脚本内部会先加载 catalog.json 构造Catalog再实例化ExpressCompiler对模型输出进行编译验证run_inference_and_validate函数中compiler.compile(dsl_output, surface_idai_surface)编译失败会把原始 DSL 异常信息一并抛出便于排查。此外脚本对模型可能幻觉出的 Markdown 代码块包裹 前缀/后缀做了剥离处理。3.1 本地模型推理Ollama / MLX-LMrun_inference.py除 Gemini API 外还内置了两种本地推理后端这在端侧模型优化目标下很有价值--local查询本地Ollama端点http://localhost:11434/api/generate需ollama serve运行中默认模型gemma2temperature0.1--mlx查询本地Apple MLX-LM端点http://localhost:8080/v1/chat/completions需先运行mlx_lm.server --model 模型默认模型mlx-community/gemma-4-e2b-it-4bit。另外--list-models参数可直接列出 Gemini API 上可用的全部模型--model的默认值是gemma-4-31b-it当切换到--local/--mlx时会自动替换为对应的本地默认模型。四、CLI 工具全家桶express包提供了 5 个独立开发脚本位于 specification/proposals/express/scripts/。每个脚本运行时动态调整 Python 路径因此可在任何目录下配合uv run --project直接执行。以下命令中的../../../agent_sdks/python/a2ui_agent均指仓库根下的 agent_sdks/python/a2ui_agent 项目环境。4.1 直接生成提示词契约生成包含位置式组件签名与语法规则的模型提示词契约从活动 catalog schema 编译而来A2UI_EXPRESS_ENABLEDtrue uv run --project ../../../agent_sdks/python/a2ui_agent scripts/run_prompt_generator.py --catalog ../../v1_0/catalogs/basic/catalog.json实现上run_prompt_generator.py脚本调用Catalog.from_json加载 schema 后通过ExpressFormat(catalog).prompt_generator.generate(role_description..., include_schemaTrue)输出完整提示词文本到 stdout。该输出就是注入模型 system instruction 的输出契约其中每个组件/函数都被编译为无属性键的位置式签名如Button(child (static), variant? (static), action (static), weight? (static), checks? (static))详见 express_dsl_examples.md。4.2 离线 DSL 编译器将一个离线 A2UI Express DSL 文件直接编译为标准格式化 v1.0 JSONA2UI_EXPRESS_ENABLEDtrue uv run --project ../../../agent_sdks/python/a2ui_agent scripts/run_compiler.py \ path/to/sample.a2ui \ --surface-id dashboard_surfacerun_compiler.py 的关键参数参数说明默认值dsl_file待编译的 A2UI Express DSL 文件必填位置参数—--surface-id编译出的 surface 唯一标识express_surface--catalog-id输出中引用的 catalog URI空字符串--catalogcatalog JSON schema 路径specification/v1_0/catalogs/basic/catalog.json实现中通过Catalog.from_json(catalog_dict, spec_version0.9.1)构造 catalog注意catalog 以 0.9.1 规范加载但编译器默认产出 v1.0 载荷说明 0.9.1 的 schema 定义与 v1.0 协议层兼容随后ExpressCompiler(catalog).compile(dsl_text, surface_id..., catalog_id...)返回消息列表并以indent2美化输出。4.3 JSON 反编译回 Express将标准 A2UI v1.0 JSON 信封转换回紧凑的 A2UI Express 代码A2UI_EXPRESS_ENABLEDtrue uv run --project ../../../agent_sdks/python/a2ui_agent scripts/run_decompiler.py ../../v1_0/catalogs/basic/examples/01_flight-status.jsonrun_decompiler.py 从示例 JSON 中提取updateComponents.components与surfaceId构造一个标准createSurface信封再交给ExpressParser(catalog).decompile(envelope)输出 DSL。注意该脚本不要求A2UI_EXPRESS_ENABLED它不导入被闸门保护的 Express 模块但保持前缀习惯无害。4.4 重新生成文档示例直接基于当前代码重新生成动态的 express_dsl_examples.md包含系统提示词契约与编译后的天气预报示例A2UI_EXPRESS_ENABLEDtrue uv run --project ../../../agent_sdks/python/a2ui_agent scripts/recreate_dsl_examples.pyrecreate_dsl_examples.py 内置了天气预测 DSL 样本WEATHER_DSL常量用编译器编译后连同生成的系统提示词一起写回 Markdown保证文档与代码始终同步。五、语法与文法速览A2UI Express 的全部语法由 ANTLR4 文法 Express.g4 形式化定义编译器正是用该文法生成的ExpressLexer/ExpressParser加自定义 visitor 完成解析见 compiler.py。下面按语法要素逐一展开。5.1 哨兵标签与赋值语句所有 A2UI Express 布局块必须被a2ui与/a2ui哨兵标签包裹以与伴随的对话文本清晰隔离a2ui variable_name ComponentName(arg1, arg2, paramvalue) /a2ui每条指令是变量赋值语句或独立生命周期命令语句以换行分隔单个赋值可跨多行。文法中statement定义为assignment | expressionassignment的左侧既可以是普通标识符也可以是数据路径(identifier | path) expression。5.2 变量声明与组件嵌套每个组件定义被赋给唯一变量标识符也可直接内联写在父组件参数列表中。保留变量名root是界面树的唯一入口。为支持多语言模型且保证未来扩展数学/条件表达式的语法安全变量标识符必须符合 Unicode Identifier 标准UAX #31以字母或下划线开头后续字符为字母、数字或下划线。文法中IDENTIFIER : [a-zA-Z_] [a-zA-Z0-9_]* ;是这一规则的实现。组件嵌套支持混合模式子组件可以内联定义Card(childText(Hello))也可以赋给顶层变量后按名称引用header Text(Hello)与root Card(childheader)。编译器在_compile_value中遇到指向组件变量的引用时会返回该变量名作为引用 ID遇到内联组件构造则自动生成_inline_N形式的 ID 并追加到extra_components见 compiler.py。5.3 参数传递位置参数与关键字参数组件构造函数同时支持位置参数与关键字赋值paramvalue位置参数按组件签名定义顺序传入如Text(Hello)。签名末尾的可选位置参数可以省略若中间的可选参数需要跳过则用下划线占位符_传入。关键字参数按参数名显式传入如Button(childText(Submit), actionEvent(click))可与位置参数自由混用。静态参数注解签名中标注(static)的参数必须以内联字面量或数组给出不能使用动态数据绑定路径$/path。文法中variable : _ | identifier定义了_占位符arg : named_arg | expression定义了命名参数语法。编译器在_compile_ast_node中按非校验属性列表依次映射位置参数并把{skipped: True}占位符编译为null见 compiler.py。5.4 核心原始类型字符串有两种格式标准字符串用双引号...或三引号...包裹支持\n、\t、\\、\转义允许内嵌换行。原始字符串前缀r如r^[a-zA-Z]$、r...不做任何转义处理反斜杠按字面字符解释——特别适合包含反斜杠的校验正则。数字整数或小数如42、3.14、-1。布尔true/false。空值null。文法中字符串的四种词法 tokenRAW_TRIPLE_STRING、TRIPLE_STRING、RAW_STRING、STANDARD_STRING以先匹配三引号、后匹配单引号的顺序定义确保三引号形式优先数字NUMBER : -? [0-9] (. [0-9])?支持负号与小数。5.5 结构列表与动态列表模板数组用方括号表示如[component1, component2]编译器将其映射到目标 catalog 组件的子容器槽位。若组件属性期望动态列表模板如List组件的children槽则使用编译器保留的_template(path, templateComponent)辅助函数breedList List(_template($/breeds, breedTemplate), horizontal)该辅助函数以下划线开头明确区别于自定义 catalog 中的组件避免命名冲突。编译器在_compile_value中对_template做专门处理第一个参数必须是$前缀的动态绑定路径第二个参数是模板组件 ID最终产出{path: ..., componentId: ...}结构见 compiler.py。5.6 数据绑定与响应式路径组件属性通过$前缀的绑定路径连接到应用数据模型绝对路径$后紧跟斜杠如$/user/email从共享数据模型根解析。相对路径省略斜杠如$lastName在列表迭代上下文中解析。单独一个$表示空相对路径解析为当前上下文根例如模板内部代表整个列表项本身。文法PATH : $ [a-zA-Z0-9_/]*定义了路径 token。编译后绝对绑定在 JSON 中呈现为{path: /user/email}相对绑定呈现为{path: lastName}形式可对照 express_dsl_examples.md 中itemDay Text($day)编译为{text: {path: day}}的例子。5.7 数据模型填充Data Model Population要直接从生成输出中填充共享数据模型A2UI Express 支持数据模型赋值——左侧为绝对数据路径的语句会填充 surface 的dataModel$/path/to/key value_expression其中value_expression为任意合法字面量、数组或映射。例如$/icon check $/title Enable notification $/user {firstName: Alice, age: 30}编译器解析这些语句生成createSurface载荷根部结构化的dataModelJSON 对象。若 A2UI Express 块只包含数据路径赋值、完全省略保留变量root编译器会产生独立的updateDataModel协议消息而非createSurface布局载荷{ version: v1.0, updateDataModel: { surfaceId: default_surface, path: /, value: { icon: check, title: Enable notification } } }源码中compile方法把以$开头的赋值收集到scope.data_path_assignments随后用_set_nested_path按 JSON Pointer 风格逐层构建嵌套字典当 scope 中没有root时若存在数据路径赋值则输出updateDataModel消息否则抛出ExpressUndefinedRootError见 compiler.py 与 compiler.py。5.8 嵌套函数调用与动作为支持 catalog 灵活性、避免硬编码特定格式化或动作辅助函数A2UI Express 使用标准嵌套函数调用语法客户端函数写成FunctionName(args)与加载的 catalog 中注册的函数名完全一致若 catalog 含文本格式化辅助函数如formatString显式调用welcomeText Text(formatString(Welcome, ${/user/firstName}!))——这避免了不同 catalog 对插值命名约定不同导致的失败本地动作使用同一签名触发行为如openUrl(https://example.com)编译器映射为标准客户端函数动作服务端事件使用保留的Event签名声明后端动作如Event(save_deal, {rep: $/form/rep})。编译器对Event做专门处理产出{event: {name: ..., context: ...}}见 compiler.py对action属性内的 catalog 函数则包装为{functionCall: {call: ..., args: ...}}。5.9 校验与逻辑表达式表单校验检查用?前缀定义编译器将其转换为标准客户端函数简单检查直接写函数名?required带参数检查写括号参数?regex(^[0-9]{5}$, Must be a valid zip code)多检查用列表分组[?required, ?email]。文法中CHECK : ? [a-zA-Z_] [a-zA-Z0-9_]*定义了校验 token。编译器编译为checks数组每条为{condition: {call: ..., args: ...}, message: ...}若校验函数签名首参为value且未显式给出会自动注入同组件value属性的绑定路径隐式目标注入见 compiler.py。自定义错误消息可作为校验的额外字符串参数追加如?regex(^[0-9]{5}$, Postal code must be 5 digits)。5.10 独立操作与函数调用A2UI Express 支持不带变量赋值的独立函数调用行用于执行生命周期操作或直接调用客户端函数。Surface 定向在组件变量定义前输出surface(surfaceId)或surface(surfaceId, catalogId)surface(dashboard-surface-1)编译器根据目标 surface 在当前会话中是被实例化还是更新自动发出createSurface或updateComponents协议信封若省略surface()则回退到默认 surface 标识default_surface。删除 Surface遇到独立命令deleteSurface时产生标准deleteSurface生命周期消息deleteSurface(dashboard-surface-1){ version: v1.0, deleteSurface: { surfaceId: dashboard-surface-1 } }执行客户端函数RPC遇到其他任何独立函数调用编译器对照 catalog 定义解析参数产生标准callFunctionRPC 消息并自动生成functionCallIdopenUrl(https://example.com){ version: v1.0, functionCallId: call_1, callFunction: { call: openUrl, args: { url: https://example.com } } }源码中compile方法对surface、deleteSurface、其他独立函数调用三种 EXPR 语句分别处理surface创建新的_SurfaceScopedeleteSurface记录待删除的 surface ID最终直接返回deleteSurface消息其他函数调用进入standalone_function_calls并最终产出带call_N自增 ID 的callFunction消息见 compiler.py。注意独立函数调用仅在 v1.0 目标版本下受支持v0.9 / v0.9.1 会抛出明确异常。六、编译管线原理编译作为推理管线的一部分运行接收 A2UI Express 纯文本流处理后输出发送给客户端的标准 A2UI v1.0 JSON 载荷。整体流程规格中的 Mermaid 图6.1 逐行解析与分词编译器逐行读取输入文本丢弃空行将赋值解析为 token。真实实现中compile先做哨兵标签预处理检测a2ui是否存在剥离标签外内容再交给 ANTLR 词法器与解析器生成 AST见 compiler.py。语法层还支持#///单行注释、/* ... */块注释与分号语句分隔SEMICOLON : ; - skip。6.2 错误恢复与微精炼循环解析或 schema 映射遇到错误时触发结构化错误恢复工作流隔离编译器标记非法行丢弃 AST 的对应子分支继续解析剩余行避免整个界面崩塌Agent 端微精炼Agent 将非法行、目标组件签名、解析器错误消息打包成小型修正提示快速模型修正该提示被发送给快速基础模型后再转换为标准 A2UI——提示小且只针对单行执行很快热替换模型返回修正后的语句编译器在生成最终渲染输出前将其热替换进活动 AST。从实现看编译器通过ExpressErrorListener收集词法/语法错误error_listener.errorsExpressAstVisitor携带first_error_line支持部分错误场景的恢复见 compiler.py。6.3 Schema 驱动的键映射因为 A2UI Express 省略属性键编译器完全依赖加载 catalog 的 JSON schema 来映射位置参数在 catalog schema 中查找组件/函数名丢弃component、id等结构键按严格定义顺序读取声明的属性将语句中的位置参数按顺序映射到这些属性键末尾的可选参数可省略。例如签名Button(child, action?)中action可选Button(label_text)编译时action为 null/省略被跳过的可选参数后续还需指定其他参数用_占位符表示。例如Column(children, justify?, align?)中justify可选Column([icon, title], _, center)将数组映射到children、center映射到alignjustify留空。实现中CatalogSchemaHelper负责按序读取组件属性并区分可选标记_compile_ast_node的prop_arg_pairs收集逻辑按位置/关键字填充属性并对未知属性、重复属性、禁止数据绑定静态属性传入$path分别抛出ExpressUnknownPropertyError、ExpressDuplicatePropertyError、ExpressForbiddenDatabindingError见 compiler.py。6.4 邻接表扁平化标准 A2UI v1.0 要求组件为扁平数组嵌套关系用邻接列表中的 ID 引用表示编译器从root变量出发遍历变量引用为每个子组件变量生成唯一、稳定的字符串 ID用 ID 替换变量名将子数组打包进标准ChildList结构输出单个扁平的components数组。6.5 协议信封构造编译后的组件列表与提取的默认数据模型被包装进标准 A2UI 消息信封{ version: v1.0, createSurface: { surfaceId: surface_id, catalogId: catalog_identifier, components: [], dataModel: {}, surfaceParams: {} } }针对 v0.9 / v0.9.1 目标版本编译器会输出createSurfaceupdateComponents 可选updateDataModel的多消息序列针对 v1.0 则合并为单个createSurface信封并在其中内嵌dataModel见 compiler.py。七、完整编译示例通知权限卡片规格给出了一个完整的输入输出对照。输入文本流定义一张通知权限卡片在哨兵标签内使用位置参数与绝对数据路径a2ui root Card(main_column) main_column Column([icon, title, description, actions], _, center) icon Icon($/icon) title Text($/title, h3) description Text($/description, body) actions Row([yes_btn, no_btn], center) yes_btn_text Text(Yes) yes_btn Button(yes_btn_text, _, Event(accept)) no_btn_text Text(No) no_btn Button(no_btn_text, _, Event(decline)) /a2ui仓库中 examples/10_notification-permission.a2ui 提供了该示例的真实版本含$/icon、$/title、$/description数据模型赋值。编译器解析文本流、解析父子引用、按 catalog schema 映射位置参数后在createSurface消息中产出如下扁平组件布局{ version: v1.0, createSurface: { surfaceId: gallery-notification-permission, catalogId: https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json, components: [ { id: root, component: Card, child: main_column }, { id: main_column, component: Column, children: [icon, title, description, actions], justify: null, align: center }, { id: icon, component: Icon, name: { path: /icon } }, { id: title, component: Text, text: { path: /title }, variant: h3 }, { id: description, component: Text, text: { path: /description }, variant: body }, { id: actions, component: Row, children: [yes_btn, no_btn], justify: center }, { id: yes_btn_text, component: Text, text: Yes }, { id: yes_btn, component: Button, child: yes_btn_text, variant: null, action: { event: { name: accept, context: {} } } }, { id: no_btn_text, component: Text, text: No }, { id: no_btn, component: Button, child: no_btn_text, variant: null, action: { event: { name: decline, context: {} } } } ] } }注意几个关键映射Column(..., _, center)的_被编译为justify: nullEvent(accept)被编译为action: {event: {name: accept, context: {}}}$/icon被编译为{path: /icon}。八、端到端示例天气预测 UI 全链路express_dsl_examples.md 记录了基线评估运行的一次完整端到端追踪包含系统提示词布局指令、语法格式、枚举值、用户请求、模型原始 Express 输出以及最终编译的 v1.0 JSON。用户请求摘录生成一个 surfaceId 为main的天气预测 UI含城市名 TextNew York、当前温度 Text68°F与天气图标 Image、Divider以及展示 5 天预报的 List每天一行 Row星期、图标、高低温。模型原始输出展示_template动态列表模板与相对绑定的组合用法a2ui $/forecast [{day: Monday, icon: https://img.icons8.com/color/48/000000/sun.png, temp: 72°F / 55°F}, ...] root Column([cityName, currentRow, divider, forecastList]) cityName Text(New York) currentRow Row([currentTemp, currentIcon], center, center) currentTemp Text(68°F) currentIcon Image(https://img.icons8.com/color/96/000000/sun.png, Sunny) divider Divider(horizontal) forecastList List(_template($/forecast, forecastItem), vertical) forecastItem Row([itemDay, itemIcon, itemTemp], spaceBetween, center) itemDay Text($day) itemIcon Image($icon, Weather icon) itemTemp Text($temp) /a2ui编译产物要点List的children编译为模板对象{path: /forecast, componentId: forecastItem}$day、$icon、$temp相对路径编译为{path: day}等$/forecast赋值被提取为createSurface根部的dataModel.forecast数组。这个示例演示了 A2UI Express 三条核心能力的协同数据模型填充 动态列表模板 相对路径绑定。此外examples/ 目录下还有 36 个.a2ui示例文件01_flight-status.a2ui到36_modal.a2ui覆盖航班状态、邮件撰写、日历、产品卡片、音乐播放器、登录表单、电商下单、步骤计数器、金融数据表格、Markdown 文本、模态框等场景可作为语法学习与run_compiler.py的实测素材对应的标准 JSON 示例位于 specification/v1_0/catalogs/basic/examples/可直接喂给run_inference.py。九、生态集成目录无关与本地性能画像A2UI Express 完全目录无关catalog-agnostic可集成到任何使用自定义 catalog 的环境。9.1 目录无关运行编译器不持有对组件名、函数签名或属性的硬编码假设Schema 加载启动时宿主应用注册目标 catalog 的 JSON schema自定义企业 catalog 或特定系统 catalog签名编译提示词生成工具读取注册的 schema将定义直接编译为模型 system prompt 中的位置式签名映射执行解析器根据加载的 schema 结构动态映射生成参数。若整个 catalog 被替换系统无需手动更新即可适应。规格还给出一个 CatalogSignatureCompiler 的 Python 示例遍历catalog.components跳过component、id结构键按定义顺序将属性编译为name(req)/name(opt?)形式的签名文本——这正是catalog 到提示词自动化工具的最小实现范式。9.2 本地性能画像本地执行需要根据界面复杂度配置模型的思考预算reasoning budget单视图仪表盘或基础数据表格建议70140 token的推理预算以保证低延迟含嵌套布局结构的交互式表单建议280560 token以防层级错误与绑定损坏。该建议与端侧模型优化的设计目标一致小上下文窗口模型用紧凑签名换取更小的提示词体积同时用充足的思考预算换取复杂层级结构的正确性。十、快速上手清单确认工作目录位于 specification/proposals/express所有命令前缀A2UI_EXPRESS_ENABLEDtrue远程推理先export GEMINI_API_KEY...再运行scripts/run_inference.py本地推理加--localOllama或--mlxMLX-LM需要自定义 catalog 时用--catalog指向任意 catalog JSON默认 specification/v1_0/catalogs/basic/catalog.json需要提示词契约时运行scripts/run_prompt_generator.py需要离线编译.a2ui时运行scripts/run_compiler.py需要把 JSON 还原成 DSL 时运行scripts/run_decompiler.py想理解底层原理可继续阅读 Express.g4文法、compiler.py编译引擎与 a2ui_express.md完整技术规格。【免费下载链接】a2ui项目地址: https://gitcode.com/GitHub_Trending/a2/a2ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表