CodeSpirit.Amis.AiForm 智能表单使用指南
myzbx 2025-10-02 04:26 14 浏览
概述
AiForm
是 CodeSpirit.Amis 框架的智能表单功能,专为AI驱动的长时间处理任务设计。它自动生成一个多步骤的用户界面,包含表单输入、进度监控、日志显示和结果展示等功能。
功能特点
- 自动化UI生成:基于
@OperationAttribute
自动生成完整的AI表单界面 - 多步骤界面:表单面板、步骤进度、日志面板、结果展示
- 实时轮询:自动轮询AI任务状态,实时更新进度和日志
- 超时控制:支持自定义轮询间隔和最大轮询时间
- 异步处理:避免长时间AI响应导致的请求超时
使用方法
1. 控制器端配置
在控制器方法上使用 @HeaderOperation
特性:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
[HttpPost("ai/generate-async")]
[HeaderOperation("AI智能生成问卷", "aiForm",
Icon = "fa-solid fa-magic",
StatusApi = "/survey/api/survey/Surveys/ai/task-status",
PollingInterval = 2000,
MaxPollingTime = 300000,
FormTitle = "问卷生成配置",
StepsTitle = "AI生成进度",
LogTitle = "生成日志",
ResultTitle = "生成结果")]
[DisplayName("AI智能生成问卷")]
public async Task
{
var taskId = await _surveyAiGeneratorService.GenerateAsync(request);
return SuccessResponse(taskId);
}
2. AI表单特有属性
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
StatusApi | string | - | 必填 ,AI任务状态查询API地址 |
PollingInterval | int | 2000 | 轮询间隔(毫秒) |
MaxPollingTime | int | 300000 | 最大轮询时间(毫秒) |
SuccessRedirect | string | - | 成功后跳转的URL |
FormTitle | string | "配置信息" | 表单面板标题 |
StepsTitle | string | "处理进度" | 步骤面板标题 |
LogTitle | string | "处理日志" | 日志面板标题 |
ResultTitle | string | "处理结果" | 结果面板标题 |
3. 后端服务实现
3.1 AI任务服务
实现 IAiTaskService
接口用于管理任务状态:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
public class AiTaskService : IAiTaskService, ISingletonDependency
{
public async Taskstring> CreateTaskAsync(string taskType, object parameters)
{
// 创建任务并返回任务ID
}
public async Task
{
// 返回任务状态信息
}
// 其他方法实现...
}
3.2 AI生成服务
继承 BaseAiGeneratorService
基类:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
public class SurveyAiGeneratorService : BaseAiGeneratorServiceGenerateSurveyRequest, GeneratedSurveyDto>, IScopedDependency
{
protected override string GetTaskType => "问卷生成";
protected override async Task DoGenerateAsync(
GenerateSurveyRequest request,
Actiondouble, string>? progressCallback = null)
{
// 实现具体的AI生成逻辑
// 使用 progressCallback 报告进度
progressCallback?.Invoke(0.3, "正在分析需求...");
// 生成逻辑...
return generatedSurvey;
}
}
3.3 状态查询API
创建状态查询接口:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
[HttpGet("ai/task-status")]
[DisplayName("获取AI任务状态")]
public async Task
{
var status = await _aiTaskService.GetTaskStatusAsync(taskId);
if (status == null)
{
return BadResponse
}
return SuccessResponse(status);
}
UI界面说明
界面结构
AI表单生成的界面包含4个标签页:
表单面板:显示输入表单和"开始生成"按钮
步骤面板:显示4步进度条(初始化 → AI处理 → 结果处理 → 完成)
日志面板:实时显示任务执行日志
结果面板:显示任务状态、进度、耗时和最终结果
交互流程
-
用户在表单面板填写参数
-
点击"开始生成"按钮
-
自动切换到步骤面板显示进度
-
实时更新日志面板的执行日志
-
完成后在结果面板显示结果和详情链接
轮询机制
使用Amis的标准事件动作系统实现:
- 循环动作:使用
loop
动作类型进行循环轮询 - 等待间隔:使用
wait
动作设置轮询间隔(PollingInterval
毫秒) - AJAX查询:使用
ajax
动作查询任务状态 - 条件判断:使用
condition
动作检查任务状态并执行相应操作 - 自动停止:任务完成或失败时自动停止轮询
- 超时控制:最大循环次数为
MaxPollingTime / PollingInterval
任务状态
AiTaskStatus 枚举
-
Pending
(0):待开始 -
InProgress
(1):进行中 -
Completed
(2):已完成 -
Failed
(3):失败 -
Cancelled
(4):已取消
AiTaskStatusDto 结构
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
public class AiTaskStatusDto
{
public string TaskId { get; set; } // 任务ID
public AiTaskStatus Status { get; set; } // 任务状态
public string StatusText { get; set; } // 状态描述
public int Step { get; set; } // 当前步骤(0-3)
public int Progress { get; set; } // 进度百分比(0-100)
public Liststring> Logs { get; set; } // 任务日志
public object? Result { get; set; } // 任务结果
public DateTime StartTime { get; set; } // 开始时间
public DateTime? EndTime { get; set; } // 结束时间
public string ElapsedTime { get; set; } // 耗时显示
public string? DetailUrl { get; set; } // 结果详情页URL
}
最佳实践
1. 任务管理
- 使用
ISingletonDependency
确保任务状态在应用程序生命周期内保持 -
定期清理过期的任务记录
-
对于分布式部署,考虑使用Redis存储任务状态
2. 进度报告
- 在AI生成过程中适时调用
progressCallback
报告进度 -
日志消息应该简洁明了,便于用户理解
-
错误处理要及时更新任务状态为失败
3. 超时设置
- 根据实际AI响应时间合理设置
MaxPollingTime
-
PollingInterval
不宜设置过小,避免频繁请求 -
考虑网络延迟因素调整轮询参数
4. 用户体验
-
提供有意义的状态文本和日志信息
-
完成后提供合适的详情页面链接
-
支持任务取消功能(可选)
错误处理
常见错误
- 依赖注入错误:确保
IAiTaskService
和具体的AI生成服务已正确注册 - 状态API找不到:检查
StatusApi
路径是否正确 - 轮询超时:适当增加
MaxPollingTime
值 - 任务丢失:检查任务存储机制,确保任务状态持久化
调试技巧
-
查看浏览器网络面板的轮询请求
-
检查后端日志的任务创建和状态更新
-
使用开发者工具监控前端状态更新
示例代码
完整的示例可以参考:
-
Src/ApiServices/CodeSpirit.SurveyApi/Controllers/SurveysController.cs
-
Src/ApiServices/CodeSpirit.SurveyApi/Services/Implementations/SurveyAiGeneratorService.cs
-
Src/CodeSpirit.Shared/Services/AiTaskService.cs
通过 AI表单功能,您可以轻松为长时间运行的AI任务创建用户友好的界面,提供实时反馈和进度监控,显著提升用户体验。
相关推荐
- vue3和web网页直接操作微信小程序云开发数据库
-
我们开发好小程序以后,有时候需要编写一个管理后台网页对数据库进行管理,之前我们只能借助云开发自带的cms网页,但是cms网页设计的比较丑,工作量和代码量也不够,所以我们今天就来带大家实现用vue3编写...
- WebCurl:极致轻量的跨平台 HTTP 请求调试工具
-
在接口开发与测试领域,工具的轻量化、兼容性与安全性往往直接影响工作效率。WebCurl作为一款纯原生、无依赖的网页版API测试与调试工具,凭借极简架构与全场景适配能力,重新定义了接口调试工具的使...
- webapi 全流程_webapi项目
-
C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...
- Nodejs之MEAN栈开发(四)-- form验证及图片上传
-
这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...
- CodeSpirit.Amis.AiForm 智能表单使用指南
-
概述AiForm是CodeSpirit.Amis框架的智能表单功能,专为AI驱动的长时间处理任务设计。它自动生成一个多步骤的用户界面,包含表单输入、进度监控、日志显示和结果展示等功能。功能特点...
- 初级、中级、高级前端工程师,对于form表单实现的区别
-
在React项目中使用AntDesign(Antd)的Form组件能快速构建标准化表单,特别适合中后台系统开发。以下是结合Antd的最佳实践和分层实现方案:一、基础用法:快速搭...
- Bun v0.7 大版本发布,与 Vite 牵手来破局?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。今天给大家带来...
- 「前端」界面可视化开发框架formio.js
-
简介formio是一个前端可视化开发框架,无需写css/js就可以开发一套前端界面。直接在界面内拖拽就可以完成界面的布局及开发。数据交互也是固定的,表单校验也可以配置,功能非常强大。特性使用ES6...
- 小伙给同事爬取数据竟获取不到,竟要使用这种请求方式才能获取?
-
Http请求中FormData和RequestPayload两种参数的区别?AjaxPost请求中常用的两种的形式:formdata和requestpayload一、默认的表单方式...
- WinForm + Win32 API 自定义无边框窗口实战(工业软件必备)
-
前言随着.NET9.0AOT(Ahead-of-Time)的发布,便萌生了用代码测试AOT编译效果的想法,同时评估未来是否为NanUI开发支持AOT编译的新版本。关于NanUI项目,若大家尚未了...
- DeepSeek从入门到精通(11)——网页版、APP、API使用方式比较
-
DeepSeek提供了三种主要的使用方法:网页版、手机APP和API调用。这三种方式各有特点,适用于不同的使用场景。下面从使用方法和主要特点两方面进行比较:一、网页版使用方法:直接通过浏览器访问De...
- 初略Web API Notification 桌面通知
-
HTML5WebNotificationsAPI通知接口用于向用户配置和显示桌面通知弹窗。例如,Email邮件通知、来电提醒、聊天信息提醒或任务提醒等。关于Web开发技术中Notificat...
- 什么是API网关?——驱动数字化转型的“隐形冠军”
-
什么是API网关API网关(APIGateway)是一个服务器,位于应用程序和后端服务之间,提供了一种集中式的方式来管理API的访问。它是系统的入口点,负责接收并处理来自客户端的请求,然后将请求路由...
- .NET 7使用 Entity Framework Core 制作增删改查(CRUD) Web API 教程
-
在本文中,我们将使用EntityFrameworkCore(EFCore)实现一个.NET7WebAPICRUD示例。WebAPI是一个构建HTTP服务的框架,可以从浏览器、移动设备和...
- C# ASP.NET Core Web Api 与 MVC 模式下 body 参数传递,post 参数方式
-
在ASP.NETCore中,WebAPI和MVC模式在处理HTTP请求时,特别是POST请求,使用body参数来传递数据的方式非常相似。两者都使用模型绑定来自动将请求体中的数据映射到C#对象上。下...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)