5.3 KiB
Requirements Document
Introduction
本文档定义了优化爽文剧本创建接口(EpicScriptServiceImpl#createScript)的需求,通过调用Coze AI API来生成剧本内容。同时重构AiChatServiceImpl中的AI调用封装,使其成为通用的AI接口调用服务,支持根据配置信息调用不同的AI接口。
Glossary
- Coze_API: 扣子AI平台提供的工作流流式调用接口
- AiConfig: AI配置实体,存储在t_ai_config表中,包含API地址、Token、工作流ID等配置信息
- config_key: AI配置的唯一标识键,用于获取特定场景的配置
- workflow_id: Coze工作流ID,用于指定调用哪个AI工作流
- Stream_Response: 流式响应,Coze API以SSE(Server-Sent Events)格式返回数据
- EpicScript: 爽文剧本实体,存储用户创建的剧本信息
- input_parameter: 传递给Coze工作流的输入参数,包含用户填写的信息
Requirements
Requirement 1: 通用AI接口调用服务
User Story: As a developer, I want to have a generic AI API calling service, so that I can easily call different AI configurations without duplicating code.
Acceptance Criteria
- THE AiChatService SHALL provide a generic method to call Coze workflow API by config_key
- WHEN a config_key is provided, THE AiChatService SHALL retrieve the corresponding AiConfig from database
- WHEN the AiConfig is retrieved, THE AiChatService SHALL construct the request using api_base_url, api_token, and workflow_id from the config
- THE AiChatService SHALL support passing custom input parameters to the workflow
- THE AiChatService SHALL handle stream response by default and extract the output content from the response
- IF the AiConfig is not found or disabled, THEN THE AiChatService SHALL throw an appropriate exception with clear error message
Requirement 2: Coze工作流请求构建
User Story: As a developer, I want the system to correctly build Coze workflow requests, so that the AI can process my input and return expected results.
Acceptance Criteria
- WHEN building a Coze workflow request, THE System SHALL include workflow_id from AiConfig
- WHEN building a Coze workflow request, THE System SHALL include user_id parameter
- WHEN building a Coze workflow request, THE System SHALL set stream to true for streaming response
- WHEN building a Coze workflow request, THE System SHALL include the input parameter in the parameters object
- THE System SHALL set Authorization header with Bearer token from AiConfig.api_token
- THE System SHALL set Content-Type header to application/json
Requirement 3: 流式响应解析
User Story: As a developer, I want the system to correctly parse Coze streaming responses, so that I can get the AI-generated content.
Acceptance Criteria
- WHEN receiving a stream response, THE System SHALL parse SSE format data (event: and data: lines)
- WHEN the event is "Message" and node_type is "End", THE System SHALL extract the content field
- WHEN the content contains JSON with output field, THE System SHALL extract the output value as the final result
- WHEN the event is "Done", THE System SHALL complete the stream processing
- IF parsing fails, THEN THE System SHALL log the error and return an appropriate error message
Requirement 4: 爽文剧本AI生成
User Story: As a user, I want to create epic scripts using AI, so that I can get professionally generated story content based on my input.
Acceptance Criteria
- WHEN creating an epic script, THE EpicScriptService SHALL call Coze AI using config_key "coze.course.life.generate"
- THE EpicScriptService SHALL assemble user input (title, theme, style, length, plotIntro, plotTurning, plotClimax, plotEnding) into a formatted input string
- WHEN the AI returns the generated content, THE EpicScriptService SHALL parse and store the result in the EpicScript entity
- THE EpicScriptService SHALL store the AI-generated content in appropriate fields (plotJson or dedicated content field)
- IF the AI call fails, THEN THE EpicScriptService SHALL log the error and return null or throw an exception
Requirement 5: 配置管理
User Story: As an administrator, I want to manage AI configurations in the database, so that I can easily update API settings without code changes.
Acceptance Criteria
- THE System SHALL retrieve AiConfig by config_key using AiConfigService
- THE System SHALL validate that the AiConfig is enabled (is_enabled = 1) before use
- THE System SHALL use custom_params from AiConfig to merge with runtime parameters
- THE System SHALL respect timeout_ms setting from AiConfig for API calls
- THE System SHALL support retry logic based on retry_count and retry_delay_ms from AiConfig
Requirement 6: 错误处理
User Story: As a developer, I want proper error handling for AI API calls, so that I can diagnose and fix issues quickly.
Acceptance Criteria
- IF the API returns non-200 status code, THEN THE System SHALL log the error with status code and response body
- IF the stream parsing fails, THEN THE System SHALL log the raw stream data for debugging
- IF the network request times out, THEN THE System SHALL retry based on configuration
- THE System SHALL provide meaningful error messages to the caller
- THE System SHALL not expose sensitive information (like API tokens) in error messages