Files
company-ai-platform/app/modules/ai_memory/routes.py
JiuContinent 9cf7c44393 ```
feat: 添加生命周期报告和AI规则管理功能

- 在Dockerfile中添加pillow依赖包用于图像处理
- 实现生命周期报告调度任务,支持日报和周报两种类型
- 新增TASK_RUN_LIFECYCLE任务常量和相关配置选项
- 扩展AI Agent服务以支持用户规则,并在分析时应用规则
- 添加AI用户规则创建、更新和查询接口
- 增加项目生命周期和财务需求分析技能
- 扩展现有模型以支持更完整的业务数据字段
- 实现飞书图片上传功能用于报告展示
```
2026-07-12 17:44:49 +08:00

106 lines
2.8 KiB
Python

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, require_operations_enabled
from app.modules.ai_memory.constants import AIMemoryResponseKey, AIMemoryStatus
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)])
@router.get("/memory")
def list_memory(
scope: str | None = None,
subject: str | None = None,
status: str = AIMemoryStatus.ACTIVE,
limit: int = Query(default=100, ge=1, le=500),
db: Session = Depends(get_db),
) -> dict:
return {
AIMemoryResponseKey.ITEMS: AIMemoryService(db).list_entries(
scope=scope,
subject=subject,
status_filter=status,
limit=limit,
)
}
@router.post("/memory/recall")
def recall_memory(
payload: AIMemoryRecallRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
items = AIMemoryService(db).recall(
query=payload.query,
scope=payload.scope,
subject=payload.subject,
limit=payload.limit,
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,
)
}