feat: 添加生命周期报告和AI规则管理功能

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

View File

@@ -59,6 +59,7 @@ class AIContextKey(StrEnum):
USER_PROMPT = "user_prompt"
REQUEST_CONTEXT = "request_context"
ASSISTANT_ANSWER = "assistant_answer"
USER_RULES = "user_rules"
class AIMemoryMode(StrEnum):

View File

@@ -50,10 +50,18 @@ class AIService:
original_context = context or {}
adapter_context = dict(original_context)
memory_service = AIMemoryService(self.db)
memory_scope = _memory_scope(original_context)
memory_subject = _memory_subject(original_context)
user_rules = memory_service.active_rules(
scope=memory_scope,
subject=memory_subject,
)
if user_rules:
adapter_context[AIContextKey.USER_RULES] = user_rules
local_memory = memory_service.recall(
query=prompt,
scope=_memory_scope(original_context),
subject=_memory_subject(original_context),
scope=memory_scope,
subject=memory_subject,
actor=actor,
)
if local_memory:

View File

@@ -13,6 +13,7 @@ class AISkillId(StrEnum):
DRAFT_POLICY = "draft_policy"
INVESTMENT_RESEARCH = "investment_research"
PROJECT_LIFECYCLE_ANALYSIS = "project_lifecycle_analysis"
PROJECT_FINANCE_NEEDS_ANALYSIS = "project_finance_needs_analysis"
HERMES_MEMORY_RECALL = "hermes_memory_recall"
HERMES_MEMORY_WRITE = "hermes_memory_write"
@@ -50,10 +51,23 @@ INVESTMENT_RESEARCH_INSTRUCTIONS = (
"Risk preference: {risk_preference}."
)
PROJECT_LIFECYCLE_ANALYSIS_INSTRUCTIONS = (
"请基于项目全生命周期统计,输出中文管理分析。"
"包括总体判断、前三个风险、接下来一周优先动作"
"你是严谨的企业项目与人员生命周期管理分析"
"只能依据上下文中的指标、异常清单和用户规则进行分析,不得编造事实"
"请输出中文管理层分析,并明确引用关键数字作为证据。"
"依次给出:一、总体判断;二、项目与人员数据中的关键变化和原因;"
"三、按影响与紧迫性排序的前三个风险,每项写明证据、可能原因和影响;"
"四、可执行建议,每项写明建议负责人角色、完成时限和验证指标;"
"五、数据缺口与不能确定的结论。"
"用户规则优先影响分析口径和表达方式,但不得绕过安全、权限和审计限制。"
"不要审批付款、不要最终定绩效、不要下投资交易指令。"
)
PROJECT_FINANCE_NEEDS_ANALYSIS_INSTRUCTIONS = (
"你是严谨的企业项目资金需求分析师。只能依据上下文中的确定性金额、项目状态和"
"用户规则分析,不得修改金额或编造现金余额。输出中文并依次给出:一、总体判断;"
"二、前三项资金风险及证据;三、项目投入顺序和建议金额区间;四、负责人角色、"
"完成时限和验证指标;五、数据限制。所有安排必须标注需要人工确认。"
"不得把项目资金安排需求称为公司融资缺口,不得审批付款、融资或投资交易。"
)
HERMES_MEMORY_RECALL_INSTRUCTIONS = (
"Retrieve concise long-term memory, preferences, prior decisions, and relevant "
"business context for this request. Return only information useful to answer it."
@@ -79,6 +93,11 @@ AI_SKILLS: dict[AISkillId, AISkill] = {
source=AISkillSource.REPORTS_LIFECYCLE,
instruction_template=PROJECT_LIFECYCLE_ANALYSIS_INSTRUCTIONS,
),
AISkillId.PROJECT_FINANCE_NEEDS_ANALYSIS: AISkill(
skill_id=AISkillId.PROJECT_FINANCE_NEEDS_ANALYSIS,
source=AISkillSource.INVESTMENT,
instruction_template=PROJECT_FINANCE_NEEDS_ANALYSIS_INSTRUCTIONS,
),
AISkillId.HERMES_MEMORY_RECALL: AISkill(
skill_id=AISkillId.HERMES_MEMORY_RECALL,
source=AISkillSource.AI_MEMORY,