```
feat: 添加生命周期报告和AI规则管理功能 - 在Dockerfile中添加pillow依赖包用于图像处理 - 实现生命周期报告调度任务,支持日报和周报两种类型 - 新增TASK_RUN_LIFECYCLE任务常量和相关配置选项 - 扩展AI Agent服务以支持用户规则,并在分析时应用规则 - 添加AI用户规则创建、更新和查询接口 - 增加项目生命周期和财务需求分析技能 - 扩展现有模型以支持更完整的业务数据字段 - 实现飞书图片上传功能用于报告展示 ```
This commit is contained in:
@@ -2,9 +2,13 @@ from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.database import get_db
|
||||
from app.core.security import ApiPrincipal, require_api_key
|
||||
from app.core.security import ApiPrincipal, require_api_key, require_operations_enabled
|
||||
from app.modules.ai_memory.constants import AIMemoryResponseKey, AIMemoryStatus
|
||||
from app.modules.ai_memory.schemas import AIMemoryRecallRequest
|
||||
from app.modules.ai_memory.schemas import (
|
||||
AIMemoryRecallRequest,
|
||||
AIUserRuleCreate,
|
||||
AIUserRuleUpdate,
|
||||
)
|
||||
from app.modules.ai_memory.service import AIMemoryService
|
||||
|
||||
router = APIRouter(dependencies=[Depends(require_api_key)])
|
||||
@@ -42,3 +46,60 @@ def recall_memory(
|
||||
actor=principal.actor,
|
||||
)
|
||||
return {AIMemoryResponseKey.ITEMS: items}
|
||||
|
||||
|
||||
@router.get("/rules")
|
||||
def list_rules(
|
||||
scope: str | None = None,
|
||||
subject: str | None = None,
|
||||
status: str | None = None,
|
||||
limit: int = Query(default=100, ge=1, le=500),
|
||||
db: Session = Depends(get_db),
|
||||
) -> dict:
|
||||
return {
|
||||
AIMemoryResponseKey.ITEMS: AIMemoryService(db).list_rules(
|
||||
scope=scope,
|
||||
subject=subject,
|
||||
status_filter=status,
|
||||
limit=limit,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@router.post("/rules")
|
||||
def create_rule(
|
||||
payload: AIUserRuleCreate,
|
||||
db: Session = Depends(get_db),
|
||||
principal: ApiPrincipal = Depends(require_api_key),
|
||||
) -> dict:
|
||||
require_operations_enabled()
|
||||
return {
|
||||
AIMemoryResponseKey.DATA: AIMemoryService(db).create_rule(
|
||||
content=payload.content,
|
||||
scope=payload.scope,
|
||||
subject=payload.subject,
|
||||
priority=payload.priority,
|
||||
tags=payload.tags,
|
||||
actor=principal.actor,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@router.patch("/rules/{code}")
|
||||
def update_rule(
|
||||
code: str,
|
||||
payload: AIUserRuleUpdate,
|
||||
db: Session = Depends(get_db),
|
||||
principal: ApiPrincipal = Depends(require_api_key),
|
||||
) -> dict:
|
||||
require_operations_enabled()
|
||||
return {
|
||||
AIMemoryResponseKey.DATA: AIMemoryService(db).update_rule(
|
||||
code=code,
|
||||
content=payload.content,
|
||||
priority=payload.priority,
|
||||
tags=payload.tags,
|
||||
enabled=payload.enabled,
|
||||
actor=principal.actor,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user