新增智能体规则相关数据类及API接口,包括创建、修改、删除规则功能和查询规则列表及配额信息
This commit is contained in:
@@ -489,6 +489,134 @@ data class CategoryListResponse(
|
|||||||
val list: List<CategoryTemplate>
|
val list: List<CategoryTemplate>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ========== Prompt Rule 相关数据类 ==========
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建规则请求体
|
||||||
|
* @param rule 规则内容,不能为空
|
||||||
|
* @param promptId 智能体ID,与 openId 二选一,promptId 优先
|
||||||
|
* @param openId 智能体的 OpenID(UUID格式),与 promptId 二选一
|
||||||
|
*/
|
||||||
|
data class CreatePromptRuleRequestBody(
|
||||||
|
@SerializedName("rule")
|
||||||
|
val rule: String,
|
||||||
|
@SerializedName("promptId")
|
||||||
|
val promptId: Int? = null,
|
||||||
|
@SerializedName("openId")
|
||||||
|
val openId: String? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则请求体
|
||||||
|
* @param id 规则ID,必填
|
||||||
|
* @param rule 新的规则内容,不能为空
|
||||||
|
* @param promptId 要更改关联的智能体ID(可选)
|
||||||
|
* @param openId 要更改关联的智能体 OpenID(可选)
|
||||||
|
*/
|
||||||
|
data class UpdatePromptRuleRequestBody(
|
||||||
|
@SerializedName("id")
|
||||||
|
val id: Int,
|
||||||
|
@SerializedName("rule")
|
||||||
|
val rule: String,
|
||||||
|
@SerializedName("promptId")
|
||||||
|
val promptId: Int? = null,
|
||||||
|
@SerializedName("openId")
|
||||||
|
val openId: String? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则关联的智能体信息
|
||||||
|
* @param id 智能体ID
|
||||||
|
* @param title 智能体标题
|
||||||
|
* @param avatar 智能体头像URL
|
||||||
|
*/
|
||||||
|
data class PromptRuleAgent(
|
||||||
|
@SerializedName("id")
|
||||||
|
val id: Int,
|
||||||
|
@SerializedName("title")
|
||||||
|
val title: String,
|
||||||
|
@SerializedName("avatar")
|
||||||
|
val avatar: String
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则详情
|
||||||
|
* @param id 规则ID
|
||||||
|
* @param rule 规则内容
|
||||||
|
* @param creator 创建者名称
|
||||||
|
* @param creatorType 创建者类型(如 "user")
|
||||||
|
* @param scope 作用域(如 "personal")
|
||||||
|
* @param prompt 关联的智能体信息
|
||||||
|
* @param createdAt 创建时间(ISO 8601 格式)
|
||||||
|
* @param updatedAt 更新时间(ISO 8601 格式)
|
||||||
|
*/
|
||||||
|
data class PromptRule(
|
||||||
|
@SerializedName("id")
|
||||||
|
val id: Int,
|
||||||
|
@SerializedName("rule")
|
||||||
|
val rule: String,
|
||||||
|
@SerializedName("creator")
|
||||||
|
val creator: String,
|
||||||
|
@SerializedName("creator_type")
|
||||||
|
val creatorType: String,
|
||||||
|
@SerializedName("scope")
|
||||||
|
val scope: String,
|
||||||
|
@SerializedName("prompt")
|
||||||
|
val prompt: PromptRuleAgent,
|
||||||
|
@SerializedName("created_at")
|
||||||
|
val createdAt: String,
|
||||||
|
@SerializedName("updated_at")
|
||||||
|
val updatedAt: String
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则列表响应
|
||||||
|
* @param page 当前页码
|
||||||
|
* @param pageSize 每页数量
|
||||||
|
* @param total 总记录数
|
||||||
|
* @param list 规则列表
|
||||||
|
*/
|
||||||
|
data class PromptRuleListResponse(
|
||||||
|
@SerializedName("page")
|
||||||
|
val page: Int,
|
||||||
|
@SerializedName("pageSize")
|
||||||
|
val pageSize: Int,
|
||||||
|
@SerializedName("total")
|
||||||
|
val total: Int,
|
||||||
|
@SerializedName("list")
|
||||||
|
val list: List<PromptRule>
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则配额信息
|
||||||
|
* @param promptId 智能体ID
|
||||||
|
* @param promptTitle 智能体标题
|
||||||
|
* @param baseMaxCount 基础条数限制(免费配额)
|
||||||
|
* @param purchasedCount 用户购买的额外条数
|
||||||
|
* @param totalMaxCount 总可用条数(基础+购买)
|
||||||
|
* @param currentCount 当前已创建的规则条数
|
||||||
|
* @param remainingCount 剩余可用条数
|
||||||
|
* @param usagePercent 使用百分比(0-100)
|
||||||
|
*/
|
||||||
|
data class PromptRuleQuota(
|
||||||
|
@SerializedName("promptId")
|
||||||
|
val promptId: Int,
|
||||||
|
@SerializedName("promptTitle")
|
||||||
|
val promptTitle: String,
|
||||||
|
@SerializedName("baseMaxCount")
|
||||||
|
val baseMaxCount: Int,
|
||||||
|
@SerializedName("purchasedCount")
|
||||||
|
val purchasedCount: Int,
|
||||||
|
@SerializedName("totalMaxCount")
|
||||||
|
val totalMaxCount: Int,
|
||||||
|
@SerializedName("currentCount")
|
||||||
|
val currentCount: Int,
|
||||||
|
@SerializedName("remainingCount")
|
||||||
|
val remainingCount: Int,
|
||||||
|
@SerializedName("usagePercent")
|
||||||
|
val usagePercent: Double
|
||||||
|
)
|
||||||
|
|
||||||
interface RaveNowAPI {
|
interface RaveNowAPI {
|
||||||
@GET("membership/config")
|
@GET("membership/config")
|
||||||
@retrofit2.http.Headers("X-Requires-Auth: true")
|
@retrofit2.http.Headers("X-Requires-Auth: true")
|
||||||
@@ -864,5 +992,206 @@ interface RaveNowAPI {
|
|||||||
@Query("pageSize") pageSize: Int? = null
|
@Query("pageSize") pageSize: Int? = null
|
||||||
): Response<ListContainer<Agent>>
|
): Response<ListContainer<Agent>>
|
||||||
|
|
||||||
|
// ========== Prompt Rule API ==========
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建智能体规则
|
||||||
|
*
|
||||||
|
* 功能说明:
|
||||||
|
* - 为指定的智能体创建一条新规则
|
||||||
|
* - 规则必须关联到存在的智能体(通过 promptId 或 openId 指定)
|
||||||
|
* - 创建前会自动检查配额限制,如果超出会尝试自动扩容
|
||||||
|
* - 只有创建者可以修改和删除该规则
|
||||||
|
*
|
||||||
|
* @param body 创建规则请求体
|
||||||
|
* - rule: 规则内容,不能为空
|
||||||
|
* - promptId: 智能体ID(与 openId 二选一,promptId 优先)
|
||||||
|
* - openId: 智能体的 OpenID(UUID格式,与 promptId 二选一)
|
||||||
|
*
|
||||||
|
* @return 成功时返回空 Unit,失败时返回错误信息
|
||||||
|
*
|
||||||
|
* 示例:
|
||||||
|
* ```kotlin
|
||||||
|
* val request = CreatePromptRuleRequestBody(
|
||||||
|
* rule = "禁止讨论政治话题",
|
||||||
|
* promptId = 123
|
||||||
|
* )
|
||||||
|
* val response = api.createPromptRule(request)
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@POST("outside/prompt/rule")
|
||||||
|
suspend fun createPromptRule(
|
||||||
|
@Body body: CreatePromptRuleRequestBody
|
||||||
|
): Response<Unit>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改智能体规则
|
||||||
|
*
|
||||||
|
* 功能说明:
|
||||||
|
* - 修改已存在的规则内容或关联的智能体
|
||||||
|
* - 只有规则的创建者可以修改
|
||||||
|
* - 可以同时修改规则内容和关联的智能体
|
||||||
|
* - 修改关联智能体时会重新验证配额限制
|
||||||
|
*
|
||||||
|
* @param body 修改规则请求体
|
||||||
|
* - id: 规则ID,必填
|
||||||
|
* - rule: 新的规则内容,不能为空
|
||||||
|
* - promptId: 要更改关联的智能体ID(可选)
|
||||||
|
* - openId: 要更改关联的智能体 OpenID(可选)
|
||||||
|
*
|
||||||
|
* @return 成功时返回空 Unit,失败时返回错误信息
|
||||||
|
*
|
||||||
|
* 权限要求:
|
||||||
|
* - 必须是规则的创建者(creator_type 为 "user" 且 create_id 匹配)
|
||||||
|
*
|
||||||
|
* 示例:
|
||||||
|
* ```kotlin
|
||||||
|
* val request = UpdatePromptRuleRequestBody(
|
||||||
|
* id = 456,
|
||||||
|
* rule = "禁止讨论政治和敏感话题"
|
||||||
|
* )
|
||||||
|
* val response = api.updatePromptRule(request)
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@retrofit2.http.PUT("outside/prompt/rule")
|
||||||
|
suspend fun updatePromptRule(
|
||||||
|
@Body body: UpdatePromptRuleRequestBody
|
||||||
|
): Response<Unit>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除智能体规则
|
||||||
|
*
|
||||||
|
* 功能说明:
|
||||||
|
* - 删除指定的规则
|
||||||
|
* - 只有规则的创建者可以删除
|
||||||
|
* - 删除操作不可恢复,请谨慎操作
|
||||||
|
*
|
||||||
|
* @param id 规则ID
|
||||||
|
*
|
||||||
|
* @return 成功时返回空 Unit,失败时返回错误信息
|
||||||
|
*
|
||||||
|
* 权限要求:
|
||||||
|
* - 必须是规则的创建者(creator_type 为 "user" 且 create_id 匹配)
|
||||||
|
*
|
||||||
|
* 示例:
|
||||||
|
* ```kotlin
|
||||||
|
* val response = api.deletePromptRule(456)
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@DELETE("outside/prompt/rule/{id}")
|
||||||
|
suspend fun deletePromptRule(
|
||||||
|
@Path("id") id: Int
|
||||||
|
): Response<Unit>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询智能体规则列表
|
||||||
|
*
|
||||||
|
* 功能说明:
|
||||||
|
* - 查询指定智能体下当前用户创建的规则列表
|
||||||
|
* - 支持分页和关键词模糊搜索
|
||||||
|
* - 只返回当前用户创建的规则,不会返回其他用户的规则
|
||||||
|
*
|
||||||
|
* @param promptId 智能体ID,支持数字ID或UUID格式的 openId
|
||||||
|
* @param rule 规则内容关键词(模糊搜索),可选
|
||||||
|
* @param page 页码,默认 1
|
||||||
|
* @param pageSize 每页数量,默认 10
|
||||||
|
*
|
||||||
|
* @return 返回分页的规则列表,包含规则详情和关联的智能体信息
|
||||||
|
*
|
||||||
|
* 响应数据说明:
|
||||||
|
* - page: 当前页码
|
||||||
|
* - pageSize: 每页数量
|
||||||
|
* - total: 总记录数
|
||||||
|
* - list: 规则列表
|
||||||
|
* - id: 规则ID
|
||||||
|
* - rule: 规则内容
|
||||||
|
* - creator: 创建者名称
|
||||||
|
* - creator_type: 创建者类型
|
||||||
|
* - scope: 作用域
|
||||||
|
* - prompt: 关联的智能体信息(id, title, avatar)
|
||||||
|
* - created_at: 创建时间
|
||||||
|
* - updated_at: 更新时间
|
||||||
|
*
|
||||||
|
* 示例:
|
||||||
|
* ```kotlin
|
||||||
|
* // 使用数字ID查询
|
||||||
|
* val response1 = api.getPromptRuleList("123", page = 1, pageSize = 10)
|
||||||
|
*
|
||||||
|
* // 使用 OpenID 查询
|
||||||
|
* val response2 = api.getPromptRuleList(
|
||||||
|
* "550e8400-e29b-41d4-a716-446655440000",
|
||||||
|
* page = 1,
|
||||||
|
* pageSize = 10
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* // 带关键词搜索
|
||||||
|
* val response3 = api.getPromptRuleList(
|
||||||
|
* "123",
|
||||||
|
* rule = "政治",
|
||||||
|
* page = 1,
|
||||||
|
* pageSize = 10
|
||||||
|
* )
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@GET("outside/prompt/{promptId}/rule/list")
|
||||||
|
suspend fun getPromptRuleList(
|
||||||
|
@Path("promptId") promptId: String,
|
||||||
|
@Query("rule") rule: String? = null,
|
||||||
|
@Query("page") page: Int = 1,
|
||||||
|
@Query("pageSize") pageSize: Int = 10
|
||||||
|
): Response<DataContainer<PromptRuleListResponse>>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询智能体规则配额信息
|
||||||
|
*
|
||||||
|
* 功能说明:
|
||||||
|
* - 查询指定智能体的规则条数使用情况
|
||||||
|
* - 包括基础配额、已购买配额、已使用数量等完整信息
|
||||||
|
* - 用于判断是否还能创建新规则
|
||||||
|
*
|
||||||
|
* @param promptId 智能体ID,支持数字ID或UUID格式的 openId
|
||||||
|
*
|
||||||
|
* @return 返回配额详细信息
|
||||||
|
*
|
||||||
|
* 响应数据说明:
|
||||||
|
* - promptId: 智能体ID
|
||||||
|
* - promptTitle: 智能体标题
|
||||||
|
* - baseMaxCount: 基础条数限制(免费配额,由智能体等级决定)
|
||||||
|
* - purchasedCount: 用户购买的额外条数
|
||||||
|
* - totalMaxCount: 总可用条数(baseMaxCount + purchasedCount)
|
||||||
|
* - currentCount: 当前已创建的规则条数(只统计当前用户创建的)
|
||||||
|
* - remainingCount: 剩余可用条数(totalMaxCount - currentCount)
|
||||||
|
* - usagePercent: 使用百分比,0-100(currentCount / totalMaxCount * 100)
|
||||||
|
*
|
||||||
|
* 使用场景:
|
||||||
|
* 1. 创建规则前检查是否有足够配额
|
||||||
|
* 2. 展示规则使用情况统计
|
||||||
|
* 3. 提示用户购买额外配额
|
||||||
|
*
|
||||||
|
* 示例:
|
||||||
|
* ```kotlin
|
||||||
|
* // 使用数字ID查询
|
||||||
|
* val response1 = api.getPromptRuleQuota("123")
|
||||||
|
*
|
||||||
|
* // 使用 OpenID 查询
|
||||||
|
* val response2 = api.getPromptRuleQuota("550e8400-e29b-41d4-a716-446655440000")
|
||||||
|
*
|
||||||
|
* // 处理响应
|
||||||
|
* response1.body()?.data?.let { quota ->
|
||||||
|
* if (quota.remainingCount > 0) {
|
||||||
|
* // 可以创建新规则
|
||||||
|
* println("还可以创建 ${quota.remainingCount} 条规则")
|
||||||
|
* } else {
|
||||||
|
* // 配额已用完
|
||||||
|
* println("规则配额已用完,已使用 ${quota.currentCount}/${quota.totalMaxCount}")
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@GET("outside/prompt/{promptId}/rule/count")
|
||||||
|
suspend fun getPromptRuleQuota(
|
||||||
|
@Path("promptId") promptId: String
|
||||||
|
): Response<DataContainer<PromptRuleQuota>>
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user