diff --git a/DATA/Investigation_Agent/Investigation_System.md b/DATA/Investigation_Agent/Investigation_System.md index 7e6135c..029b5b6 100644 --- a/DATA/Investigation_Agent/Investigation_System.md +++ b/DATA/Investigation_Agent/Investigation_System.md @@ -1,4 +1,4 @@ -你是一名资深 SOC / DFIR 事件调查分析师。你的任务是阅读输入的 Case 全量结构化数据,产出一份严格符合 `IncidentReport` Schema +你是一名资深 SOC / DFIR 事件调查分析师。你的任务是阅读输入的 Case 全量结构化数据,产出一份严格符合 `InvestigationReport` Schema 的调查报告。 你的目标不是简单复述字段,而是做基于证据的案件研判:判断这是否是真实安全事件、攻击者做了什么、做到哪一步、影响多大、应如何响应。 @@ -112,6 +112,6 @@ SOP-5 形成处置建议 最终要求: -- 输出必须完全符合 `IncidentReport` 结构。 +- 输出必须完全符合 `InvestigationReport` 结构。 - 如果某些信息缺失,也要给出最合理、最克制的结论,不得留空。 - 在信息不足时,优先降低置信度并明确不确定性,而不是编造细节。 diff --git a/PLAYBOOKS/CASE/Investigation_Agent.py b/PLAYBOOKS/CASE/Investigation_Agent.py index 504c76d..989fe41 100644 --- a/PLAYBOOKS/CASE/Investigation_Agent.py +++ b/PLAYBOOKS/CASE/Investigation_Agent.py @@ -49,7 +49,7 @@ class RemediationRecommendation(BaseModel): priority: CasePriority = Field(description="该处置动作自身的执行优先级。") -class IncidentReport(BaseModel): +class InvestigationReport(BaseModel): model_config = ConfigDict(use_enum_values=False) severity: Severity = Field(description="AI 评估的事件严重程度,必须结合攻击链深度、权限水平、受影响范围和业务风险判断。") @@ -92,8 +92,8 @@ class Playbook(BasePlaybook): system_message, HumanMessage(content=content) ] - llm = llm.with_structured_output(IncidentReport) - response: IncidentReport = llm.invoke(messages) + llm = llm.with_structured_output(InvestigationReport) + response: InvestigationReport = llm.invoke(messages) report_payload = response.model_dump(mode="json") comment_payload = { @@ -108,7 +108,7 @@ class Playbook(BasePlaybook): impact_ai=response.impact, priority_ai=response.priority, confidence_ai=response.confidence, - comment_ai=json.dumps(comment_payload, ensure_ascii=False, indent=2), + investigation_report_ai=json.dumps(comment_payload, ensure_ascii=False, indent=2), ) Case.update(case_new) print(report_payload) diff --git a/PLUGINS/SIRP/sirpcoremodel.py b/PLUGINS/SIRP/sirpcoremodel.py index 3fdb16b..f4de9c7 100644 --- a/PLUGINS/SIRP/sirpcoremodel.py +++ b/PLUGINS/SIRP/sirpcoremodel.py @@ -404,8 +404,8 @@ class AlertModel(BaseSystemModel): class CaseModel(BaseSystemModel): """安全案件,多个告警聚合而成,安全人员与AI分析处理的核心对象""" - _AI_EXCLUDE_FIELDS: ClassVar[set[str]] = {"workbook", "summary_ai", "comment_ai", "attack_stage_ai", "severity_ai", "confidence_ai", "impact_ai", - "priority_ai", "verdict_ai"} + _AI_EXCLUDE_FIELDS: ClassVar[set[str]] = {"workbook", "summary_ai", "investigation_report_ai", "severity_ai", "confidence_ai", "impact_ai", "priority_ai", + "verdict_ai"} # 系统自动生成字段 id: Optional[str] = Field(default=None, init=False, description="Record ID e.g. case_000001 (记录 ID e.g. case_000001,系统自动生成,无需手动赋值)") @@ -454,7 +454,7 @@ class CaseModel(BaseSystemModel): confidence_ai: Optional[Confidence] = Field(default=None, description="AI-assessed confidence (AI 评估置信度)") impact_ai: Optional[Impact] = Field(default=None, description="AI-assessed impact (AI 评估影响)") priority_ai: Optional[CasePriority] = Field(default=None, description="AI-assessed response priority (AI 评估响应优先级)") - comment_ai: Optional[str] = Field(default="", description="AI-generated comment (AI 生成的注释)") + investigation_report_ai: Optional[str] = Field(default="", description="AI-generated investigation report (AI 生成的调查报告)") verdict_ai: Optional[CaseVerdict] = Field(default=None, description="AI-generated final verdict (AI 生成的最终判定结果)") summary_ai: Optional[str] = Field(default="", description="AI-generated closure summary (AI 生成的结案摘要)")