# **SSA-Pro (V4.1): 统计技能中心架构规范 (Statistical Skills Architecture)** **文档版本:** v4.1 (Skills Edition) **创建日期:** 2026-02-18 **核心理念:** **能力即技能 (Capabilities as Skills)**。将 100+ R 统计工具标准化为平台级 Skills,实现“认知依赖注入”与跨模块复用。 **适用范围:** SSA 模块、IIT Manager、Protocol Agent、DC 模块 ## **1\. 架构愿景:从“专用工具”到“通用技能”** 在 SSA-Pro V4.1 原有架构(同步 API \+ 护栏 \+ 白盒)的基础上,我们引入 **Skills 范式**,旨在解决以下问题: 1. **消除孤岛**:统计能力不应局限于 SSA 聊天窗口。IIT Manager 需要做质控监控,Protocol Agent 需要计算样本量,它们都应该能直接调用 SSA 的 R 代码。 2. **统一治理**:将 R 脚本的元数据、参数定义、权限控制统一在 **Global Skill Registry** 中管理。 3. **认知解耦**:LLM(大脑)不需要知道 R 代码(手)怎么写,只需要知道“技能手册(Schema)”。 ## **2\. 核心定义:什么是 "Statistical Skill"?** 在我们的系统中,一个 **统计技能 (Statistical Skill)** 由三部分组成: ### **2.1 语义接口 (Semantic Interface)** * **定义**:自然语言描述,用于 RAG 检索和 LLM 理解。 * **内容**: * **Name**: st\_t\_test\_ind (独立样本 T 检验) * **Description**: "比较两组独立连续变量的均值差异。" * **Usage Context**: "当因变量为数值型,自变量为二分类,且数据独立时使用。" ### **2.2 数据契约 (JSON Schema)** * **定义**:严格的输入输出规范,兼容 OpenAI Function Calling 标准。 * **内容**: { "type": "object", "properties": { "data\_source": { "type": "object", "description": "OSS路径或内联数据" }, "params": { "group\_col": { "type": "string", "description": "分组列名" }, "val\_col": { "type": "string", "description": "数值列名" } } }, "required": \["data\_source", "params"\] } ### **2.3 原生函数 (Native Function)** * **定义**:执行逻辑的实体。 * **实现**:运行在 R Docker 容器中的 Plumber API 端点。它包含**统计护栏 (Guardrails)** 和 **代码生成 (Code Gen)** 逻辑。 ## **3\. 系统架构蓝图 (Skills Perspective)** 我们将架构划分为 **技能注册层**、**技能路由层** 和 **技能执行层**。 graph TD subgraph "Clients (技能消费者)" User\[用户 (SSA Chat)\] IIT\[IIT Manager Agent\] Proto\[Protocol Agent\] end subgraph "Platform Capability Layer (通用能力层)" Registry\[(Global Skill Registry\pgvector)\] Orchestrator\[Skill Orchestrator\Node.js\] Planner\[Planner / Router\DeepSeek-V3\] end subgraph "Skill Provider: Statistics (技能提供者)" R\_Gateway\[R Service API Gateway\] subgraph "R Docker Container" Skill\_A\[Skill: T-Test\] Skill\_B\[Skill: ANOVA\] Skill\_C\[Skill: Regression\] Guard\[Guardrails Engine\] end end %% 注册流程 Skill\_A \-.-\>|注册元数据| Registry %% 调用流程 User \--\>|1. 自然语言需求| Orchestrator IIT \--\>|1. 监控触发| Orchestrator Orchestrator \--\>|2. 语义检索| Registry Registry \--\>|3. 返回 Top-K Skills| Planner Planner \--\>|4. 生成调用参数 (JSON)| Orchestrator Orchestrator \--\>|5. 路由执行 (Sync HTTP)| R\_Gateway R\_Gateway \--\>|6. 执行与护栏| Skill\_A Skill\_A \--\>|7. 结果 \+ 代码| Orchestrator ## **4\. 数据库设计:Global Skill Registry** 我们将元数据存储从 ssa\_schema 提升至全局通用的 capability\_schema (或 common\_schema)。 ### **表结构:capability\_schema.global\_skills** CREATE TABLE capability\_schema.global\_skills ( id UUID PRIMARY KEY DEFAULT gen\_random\_uuid(), \-- 标识信息 skill\_code VARCHAR(50) NOT NULL UNIQUE, \-- e.g., 'ST\_T\_TEST\_IND' name VARCHAR(100) NOT NULL, provider VARCHAR(50) NOT NULL, \-- e.g., 'SSA-R-SERVICE' category VARCHAR(50), \-- e.g., 'STATISTICS', 'DATA\_CLEANING' \-- 语义信息 (用于 RAG) description TEXT NOT NULL, usage\_context TEXT, search\_text TEXT, \-- 合成检索字段 embedding vector(1024), \-- 向量索引 \-- 契约定义 input\_schema JSONB NOT NULL, \-- JSON Schema for LLM output\_schema JSONB, \-- 预期输出格式 \-- 执行配置 endpoint VARCHAR(200), \-- R 服务的内部路由路径 is\_active BOOLEAN DEFAULT TRUE, created\_at TIMESTAMP DEFAULT NOW() ); \-- 索引 CREATE INDEX idx\_skills\_embedding ON capability\_schema.global\_skills USING hnsw (embedding vector\_cosine\_ops); CREATE INDEX idx\_skills\_provider ON capability\_schema.global\_skills(provider); ## **5\. 接口协议:标准技能调用** 为了支持跨模块调用,我们需要定义统一的 **Skill Invocation Protocol**。 ### **5.1 通用调用入口 (Node.js)** 任何 Agent (SSA/IIT/ASL) 都可以通过此方法调用统计能力。 // common/skills/skillExecutor.ts interface SkillExecutionRequest { skillCode: string; // 目标技能 payload: Record\; // 符合 input\_schema 的参数 context?: { // 上下文信息 userId: string; traceId: string; }; } async function executeSkill(req: SkillExecutionRequest) { // 1\. 从 Registry 获取技能配置 const skillDef \= await skillRegistry.get(req.skillCode); // 2\. 路由分发 (如果是 SSA-R-SERVICE,转发给 R Docker) if (skillDef.provider \=== 'SSA-R-SERVICE') { return await rClient.post(skillDef.endpoint, req.payload); } // ... 处理其他 Provider } ### **5.2 R 服务端点 (Wrapper 实现)** R Docker 中的 Plumber API 保持不变,但其角色明确为 **"Native Function Host"**。 * **Endpoint**: `/api/v1/skills/{skill_code}` * **Behavior**: 1. 接收 JSON Payload。 2. 执行 **Guardrails** (正态性检查等)。 3. 执行核心统计逻辑。 4. 返回标准结果包 (Result \+ Trace \+ Code)。 --- ## **6\. 场景演练:跨模块能力复用** ### **场景 A:SSA 模块 (标准流程)** 1. **用户**:在 SSA 界面输入“比较两组血压差异”。 2. **Planner**:检索 Registry,命中 `ST_T_TEST_IND`,生成 JSON 参数。 3. **Executor**:调用 R 接口,返回图表和报告。 ### **场景 B:IIT Manager (主动监控)** 1. **背景**:IIT Agent 每天扫描 EDC 数据,监控不良事件 (AE)。 2. **触发**:Agent 发现实验组 AE 发生率似乎高于对照组。 3. **决策**:Agent 决定调用“统计技能”来验证差异是否显著。 4. **调用**: * IIT Agent 构造数据:`{ "group": [...], "ae_flag": [...] }` * IIT Agent 调用 `executeSkill('ST_CHI_SQUARE', payload)`。 5. **结果**:R 服务返回 `p_value = 0.03`。 6. **行动**:IIT Agent 基于 P \< 0.05,向研究者发送企业微信预警:“检测到实验组不良事件显著升高 (P=0.03),请关注。” --- ## **7\. 实施路线调整** 在原有的 SSA-Pro 开发计划上,增加 **"Skills 标准化"** 的工作项: 1. **数据库迁移**: * 原计划:`ssa_schema.tools_library` * 新计划:`capability_schema.global_skills` (包含 `provider` 字段) 2. **元数据提取脚本 (R)**: * 生成的 JSON 需要包含符合 OpenAI 标准的 `input_schema`。 3. **通用调用层 (Node.js)**: * 开发 `SkillService`,作为所有 Agent 调用工具的统一网关。 --- ## **8\. 总结** 采用 **SSA-Pro (V4.1) Skills 架构**,我们不仅仅是在开发一个统计工具箱,而是在构建平台的 **"左脑逻辑中心"**。 * **技术上**:保留了 R Docker 的同步高性能和严谨性。 * **架构上**:打通了业务壁垒,实现了统计能力的资产化和服务化。 * **未来**:当我们需要引入 Python 机器学习技能时,只需注册新的 `provider: 'PYTHON-ML-SERVICE'`,Planner 即可无缝调用,系统扩展性无限。