百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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(linepublic 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(linepublic 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处理 → 结果处理 → 完成)

日志面板:实时显示任务执行日志

结果面板:显示任务状态、进度、耗时和最终结果

交互流程

  1. 用户在表单面板填写参数

  2. 点击"开始生成"按钮

  3. 自动切换到步骤面板显示进度

  4. 实时更新日志面板的执行日志

  5. 完成后在结果面板显示结果和详情链接

轮询机制

使用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(linepublic 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. 用户体验

  • 提供有意义的状态文本和日志信息

  • 完成后提供合适的详情页面链接

  • 支持任务取消功能(可选)

错误处理

常见错误

  1. 依赖注入错误:确保IAiTaskService和具体的AI生成服务已正确注册
  2. 状态API找不到:检查StatusApi路径是否正确
  3. 轮询超时:适当增加MaxPollingTime
  4. 任务丢失:检查任务存储机制,确保任务状态持久化

调试技巧

  • 查看浏览器网络面板的轮询请求

  • 检查后端日志的任务创建和状态更新

  • 使用开发者工具监控前端状态更新

示例代码

完整的示例可以参考:

  • 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#对象上。下...