15 KiB
15 KiB
AI 和智能功能提示词
元数据
- 需求编号:004
- 子需求编号:004-04
- 子需求名称:AI 和智能功能
- 阶段:阶段 5:提示词生成
- 创建时间:2026-01-28
- 创建人:AI Assistant
- 状态:已完成
相关文档
提示词内容
角色设定
你是一个经验丰富的 Java 开发工程师,精通 Spring Boot、MyBatis Plus、Lombok、Jakarta Validation 等技术栈,熟悉 Salesforce Tooling API 的使用。
任务目标
根据需求文档、设计文档和决策记录,生成 Tooling API AI 和智能功能的完整代码实现。
真源引用
-
需求文档:AI 和智能功能需求
- 核心功能:AI 应用管理(创建、查询、更新、删除)、AI 评估配置查询、AI 创作工具查询
- 入参/出参定义:详细的 API 接口定义
- 实现要点:Service 层实现、异常处理、数据库设计
-
设计文档:AI 和智能功能设计
- 架构设计:系统架构图、数据流图、模块依赖关系
- 技术方案:核心组件、设计模式、连接管理方案、异常处理方案、SOQL 查询方案
- 数据模型:数据库表设计、实体类设计、DTO 设计、VO 设计
- 接口设计:Service 接口、Controller 接口、Mapper 接口
- 错误码定义:ToolingAIErrCode 枚举
- 代码规范:命名规范、注释规范、导入规范、包结构
- 测试要求:单元测试、集成测试
-
决策记录:AI 和智能功能技术选型 ADR
- 选定方案:Service + ToolingConnectionFactory + 异步日志记录
- 决策理由:复用现有基础设施、异步日志记录不影响性能、统一异常处理、SOQL 查询支持、开发效率高、维护成本低、性能优秀、审计追溯完善、可扩展性强、符合团队习惯
需求描述
- 创建 AI 应用:创建新的 AI 应用,支持设置开发者名称、主标签、描述、状态、应用类型
- 查询 AI 应用:查询 AI 应用列表,支持按状态过滤
- 更新 AI 应用:更新 AI 应用的主标签、描述、状态
- 删除 AI 应用:删除指定的 AI 应用
- 查询 AI 评估主题类型:查询所有 AI 评估主题类型
- 查询 AI 评估处理状态:查询所有 AI 评估处理状态
- 查询 AI 评估指标类型:查询所有 AI 评估指标类型
- 查询 AI 创作包类型:查询所有 AI 创作包类型
- 查询 AI 创作包版本状态:查询所有 AI 创作包版本状态
- 查询 AI 助手模板状态:查询所有 AI 助手模板状态
- 获取 AI 操作日志:查询 AI 操作日志,支持按操作类型、元数据类型、时间范围过滤
设计方案
- 连接管理:复用 ToolingConnectionFactory 获取连接,使用
getConnection("source") - 异步日志记录:使用 CompletableFuture 异步记录操作日志到数据库
- 异常处理:使用 datai-salesforce-common 模块的异常体系,统一处理各种异常
- SOQL 查询:使用 SoqlBuilder 构建 SOQL 查询语句
- RESTful API:提供完整的 REST API 接口
输出格式
1. Service 接口
包路径:com.datai.tooling.service.IToolingAIService
方法列表:
SaveResult createAIApplication(AIApplicationRequest request);
List<AIApplicationVO> queryAIApplications(String status);
boolean updateAIApplication(AIApplicationUpdateRequest request);
boolean deleteAIApplication(String id);
List<?> queryEvaluationSubjectTypes();
List<?> queryEvaluationProcessingStatuses();
List<?> queryEvaluationMetricTypes();
List<?> queryAuthoringBundleTypes();
List<?> queryAuthoringBundleVersionStatuses();
List<?> queryAssistantTemplateStatuses();
List<AIOperationLogVO> queryOperationLogs(String operationType, String metadataType,
String startTime, String endTime,
Integer pageNum, Integer pageSize);
2. Service 实现
包路径:com.datai.tooling.service.impl.ToolingAIServiceImpl
实现要点:
- 使用
@Service注解 - 注入
ToolingConnectionFactory和ToolingAIOperationLogMapper - 使用
CompletableFuture异步记录操作日志 - 使用
SoqlBuilder构建 SOQL 查询 - 统一异常处理,使用
ToolingAIErrCode枚举定义错误码
3. Controller
包路径:com.datai.tooling.controller.ToolingAIController
接口列表:
- POST
/salesforce/tooling/ai/application- 创建 AI 应用 - GET
/salesforce/tooling/ai/applications- 查询 AI 应用 - PUT
/salesforce/tooling/ai/application- 更新 AI 应用 - DELETE
/salesforce/tooling/ai/application- 删除 AI 应用 - GET
/salesforce/tooling/ai/evaluation-subject-types- 查询 AI 评估主题类型 - GET
/salesforce/tooling/ai/evaluation-processing-statuses- 查询 AI 评估处理状态 - GET
/salesforce/tooling/ai/evaluation-metric-types- 查询 AI 评估指标类型 - GET
/salesforce/tooling/ai/authoring-bundle-types- 查询 AI 创作包类型 - GET
/salesforce/tooling/ai/authoring-bundle-version-statuses- 查询 AI 创作包版本状态 - GET
/salesforce/tooling/ai/assistant-template-statuses- 查询 AI 助手模板状态 - GET
/salesforce/tooling/ai/operation-logs- 获取 AI 操作日志
4. DTO
包路径:com.datai.tooling.domain.dto
类列表:
AIApplicationRequest- AI 应用创建请求AIApplicationUpdateRequest- AI 应用更新请求AIOperationLogQueryRequest- AI 操作日志查询请求
5. VO
包路径:com.datai.tooling.domain.vo
类列表:
AIApplicationVO- AI 应用视图对象AIOperationLogVO- AI 操作日志视图对象
6. Entity
包路径:com.datai.tooling.domain.entity
类列表:
ToolingAIOperationLog- AI 操作日志实体
7. Mapper
包路径:com.datai.tooling.mapper
接口列表:
ToolingAIOperationLogMapper- AI 操作日志 Mapper
8. Enums
包路径:com.datai.tooling.enums
类列表:
ToolingAIErrCode- AI 功能错误码枚举
9. 单元测试
包路径:com.datai.tooling.service.impl.ToolingAIServiceImplTest
测试场景:
- 创建 AI 应用成功
- 创建 AI 应用失败(参数校验失败)
- 创建 AI 应用失败(Session 无效)
- 查询 AI 应用成功
- 查询 AI 应用成功(按状态过滤)
- 更新 AI 应用成功
- 更新 AI 应用失败(记录不存在)
- 删除 AI 应用成功
- 删除 AI 应用失败(记录不存在)
- 查询 AI 评估主题类型成功
- 查询 AI 评估处理状态成功
- 查询 AI 评估指标类型成功
- 查询 AI 创作包类型成功
- 查询 AI 创作包版本状态成功
- 查询 AI 助手模板状态成功
- 查询 AI 操作日志成功
- 查询 AI 操作日志成功(按操作类型过滤)
- 查询 AI 操作日志成功(按元数据类型过滤)
- 查询 AI 操作日志成功(按时间范围过滤)
代码规范
1. 命名规范
| 类型 | 命名规范 | 示例 |
|---|---|---|
| 类名 | 大驼峰 | ToolingAIServiceImpl |
| 方法名 | 小驼峰 | createAIApplication |
| 变量名 | 小驼峰 | aiApplication |
| 常量名 | 全大写下划线分隔 | OPERATION_TYPE_CREATE |
| 包名 | 全小写 | com.datai.tooling.service |
2. 注释规范
- 类注释:包含类功能描述、作者、创建时间
- 方法注释:包含功能描述、参数说明、返回值说明、异常说明
- 字段注释:包含字段用途说明
3. 导入规范
按照以下顺序导入:
- Java 标准库
- Jakarta 注解
- 第三方库
- 项目内部类
4. 包结构
com.datai.tooling
├── controller # Controller 层
├── service # Service 层
│ └── impl # Service 实现层
├── domain # 领域对象
│ ├── dto # 数据传输对象
│ ├── vo # 视图对象
│ └── entity # 实体类
├── mapper # Mapper 层
├── enums # 枚举类
├── factory # 工厂类
└── exception # 异常类
测试要求
- 覆盖率要求:≥ 80%
- 测试框架:JUnit 5 + Mockito
- 测试场景:
- 正常场景测试
- 异常场景测试
- 边界条件测试
- 并发场景测试
注意事项
- 连接复用:必须使用 ToolingConnectionFactory 获取连接,避免重复创建
- 异步日志:操作日志必须异步记录,不影响主流程性能
- 异常处理:必须统一使用 datai-salesforce-common 模块的异常体系
- 参数校验:所有入参必须使用 Jakarta Validation 进行校验
- 事务管理:数据库操作必须使用 Spring 事务管理
- 日志记录:关键操作必须记录应用日志
- 错误码:所有错误必须使用 ToolingAIErrCode 枚举定义
- RESTful 规范:API 接口必须符合 RESTful 规范
- 文档同步:代码变更后必须同步更新相关文档
- 测试覆盖:代码变更后必须运行测试并确保通过
- 代码审查:代码提交前必须经过代码审查
- 版本控制:使用 Git 进行版本控制,遵循分支管理策略
- 性能监控:关键接口必须进行性能监控
- 安全审计:定期进行安全审计,及时修复安全漏洞
- 数据备份:定期备份操作日志数据
- SOQL 查询优化:只查询需要的字段,避免
SELECT * - 过滤条件:在 WHERE 子句中添加过滤条件,减少返回数据量
- 分页查询:支持分页查询,避免一次性返回大量数据
- 异步线程池配置:合理配置异步线程池参数
- 监控异步任务:监控异步日志记录的任务状态
- 定期清理历史数据:定期清理历史日志数据
- 数据库索引优化:设计合理的索引,优化查询性能
- 预留扩展点:预留扩展点,支持未来新增 AI 功能
- 插件化设计:支持通过插件方式扩展 AI 功能
- 统一返回格式:使用 AjaxResult 统一返回格式
- 分页支持:使用 TableDataInfo 支持分页
- Swagger 注解:使用 @Api 和 @ApiOperation 注解
- Lombok 注解:使用 @Data、@Slf4j 等 Lombok 注解
- MyBatis Plus 注解:使用 @TableName、@TableId 等 MyBatis Plus 注解
- Jakarta Validation 注解:使用 @NotBlank、@NotNull 等 Jakarta Validation 注解
输出要求
- 生成完整的代码文件,包括 Service 接口、Service 实现、Controller、DTO、VO、Entity、Mapper、Enums、单元测试
- 代码必须符合项目代码规范
- 代码必须包含完整的注释
- 代码必须通过编译
- 单元测试覆盖率必须 ≥ 80%
示例代码
Service 实现示例
@Service
@Slf4j
public class ToolingAIServiceImpl implements IToolingAIService {
@Autowired
private ToolingConnectionFactory connectionFactory;
@Autowired
private ToolingAIOperationLogMapper logMapper;
@Autowired
private ThreadPoolTaskExecutor asyncExecutor;
@Override
public SaveResult createAIApplication(AIApplicationRequest request) {
try {
ToolingConnection connection = connectionFactory.getConnection("source");
AIApplication aiApplication = new AIApplication();
aiApplication.setDeveloperName(request.getDeveloperName());
aiApplication.setMasterLabel(request.getMasterLabel());
aiApplication.setDescription(request.getDescription());
aiApplication.setStatus(request.getStatus());
aiApplication.setApplicationType(request.getApplicationType());
SaveResult[] results = connection.create(new SObject[]{aiApplication});
SaveResult result = results[0];
logOperation("create_ai_application", "AIApplication",
result.getId(), request.getDeveloperName(),
JsonUtils.toJson(request),
JsonUtils.toJson(result),
result.isSuccess() ? 1 : 0,
result.isSuccess(),
result.isSuccess() ? null : "TOOLING_AI_002",
result.isSuccess() ? null : "创建失败");
return result;
} catch (ConnectionException e) {
log.error("创建 AI 应用失败", e);
throw new SalesforceAuthException("TOOLING_AI_002", "创建 AI 应用失败: " + e.getMessage());
}
}
private void logOperation(String operationType, String metadataType,
String metadataId, String metadataName,
String requestData, String responseData,
int resultCount, boolean success,
String errorCode, String errorMessage) {
CompletableFuture.runAsync(() -> {
try {
ToolingAIOperationLog log = new ToolingAIOperationLog();
log.setOperationType(operationType);
log.setMetadataType(metadataType);
log.setMetadataId(metadataId);
log.setMetadataName(metadataName);
log.setRequestData(requestData);
log.setResponseData(responseData);
log.setResultCount(resultCount);
log.setStatus(success ? "success" : "failed");
log.setErrorCode(errorCode);
log.setErrorMessage(errorMessage);
log.setOperationTime(LocalDateTime.now());
log.setUserId(SecurityUtils.getUserId());
logMapper.insert(log);
} catch (Exception e) {
log.error("记录操作日志失败", e);
}
}, asyncExecutor);
}
}
Controller 示例
@Api(tags = "Tooling API - AI 和智能功能")
@RestController
@RequestMapping("/salesforce/tooling/ai")
public class ToolingAIController {
@Autowired
private IToolingAIService toolingAIService;
@ApiOperation("创建 AI 应用")
@PostMapping("/application")
public AjaxResult createAIApplication(@RequestBody @Valid AIApplicationRequest request) {
return AjaxResult.success(toolingAIService.createAIApplication(request));
}
@ApiOperation("查询 AI 应用")
@GetMapping("/applications")
public TableDataInfo queryAIApplications(@RequestParam(required = false) String status) {
List<AIApplicationVO> list = toolingAIService.queryAIApplications(status);
return getDataTable(list);
}
}
验证标准
- 代码是否完整生成
- 代码是否符合项目代码规范
- 代码是否包含完整注释
- 代码是否能通过编译
- 单元测试覆盖率是否 ≥ 80%
- 是否实现了所有需求功能
- 是否正确使用 ToolingConnectionFactory
- 是否正确实现异步日志记录
- 是否正确处理异常
- 是否正确使用 SoqlBuilder 构建 SOQL 查询