# 供 AI 代理使用的健康模式 (Beta 版)

> 患者记录中发生的变化以及可复现的模式，通过固定的统计规则计算得出：趋势、与该个体通常水平的偏差以及症状复现，每种模式都附带其周期、证据和局限性；而非诊断。

Source: https://developers.anpheros.com/zh/guides/health-patterns

**Anpheros 通过固定的统计规则计算患者记录中发生的变化以及可复现的模式，并将每项发现及其周期、支持资源、方法版本和局限性提供给您的应用程序或 AI 代理。** 模型不再需要从少量数字中猜测趋势：它会获得趋势、围绕趋势的不确定性以及可引用的数据。

Beta 版。在沙盒环境中，它可与任何沙盒凭证（`sk_test_…` 密钥和沙盒 OAuth 连接）配合使用。在生产记录上，它仅在患者的 OAuth 同意下运行，该同意包含单独的 `anpheros/patterns` 权限；生产 API 密钥将收到 403 错误。

## 发现内容

| 类型 | 回答的问题 | 方法 |
|---|---|---|
| `trend` | 在指定时间窗口内，测量值是上升还是下降？ | Theil–Sen 斜率结合 Mann–Kendall 测试（每天一个值，密集观察数据使用每周中位数），当相邻日期相同时进行校正 |
| `trend` (`change_between_results`) | 具有两到五次结果的实验室检测结果如何变化？ | 第一次和最后一次结果，以及最新结果与报告的参考范围进行比较；描述性说明，非测试 |
| `trend` (`event_rate_change`) | 症状记录的频率是增加还是减少？ | 记录了任何内容的日子的症状天数，最近 30 天与之前的 90 天进行比较，精确检验 |
| `baseline_deviation` | 过去一周对这个人来说是否不寻常？ | 最近 7 天与第 8-60 天进行比较，Mann–Whitney 检验或自相关调整的均值差 |
| `recurrence` | 症状发作是否以规律的间隔复发？ | 症状发作开始之间的间隔，种子蒙特卡洛模拟与随机放置的症状发作进行比较 |
| `association` (`around_medication_start`, sandbox) | 从开始服用药物起，症状记录的频率是增加还是减少？ | 从开始服用药物后的 30 天内的症状天数与之前的最多 90 天进行比较，精确检验 |
| `association` (`after_short_sleep`, sandbox) | 在睡眠少于 6 小时的日子里，症状是否更频繁地被记录？ | 记录了睡眠和本人记录的日子，短睡眠与长睡眠进行比较，Fisher 精确检验 |
| `convergence` (`recent_changes_together`, sandbox) | 在最近的同一时期是否发生了几件事情的变化？ | 无新测试：将至少两个近期变化（不寻常的一周，症状频率增减）进行分组，每个变化都有统计学支持；仅说明它们同时发生 |

一次运行的所有测试将一起进行校正（Benjamini–Hochberg）。当校正后的 q 值低于 0.05 **且** 变化至少达到该测量值的阈值时，才算作 `statistically_supported` 发现。

## 它不是什么

- **不是诊断。** 发现描述的是记录，而不是命名疾病或建议更改治疗方案。每个发现都带有 `safety.not_a_diagnosis = true` 和 `safety.causal_claim = false`。
- **不是原因。** 新药物治疗后的变化，或两种事物被同时记录，并不能证明其中一个导致了另一个。关联性仅表示两件事发生在同一时间；每种关联都带有 `confounding_possible` 和 `not_causal`，并且只有药物开始使用和睡眠才与症状进行测试，而不是所有配对。目前仅限沙盒凭证。
- **不是人工智能模型，也尚未经过临床审查。** 每个数字都来自固定的、版本化的统计规则；没有人工智能模型分析数据。有意义变化的阈值是借助人工智能设定的，尚未经过临床医生审查；每个发现都会在 `review.thresholds_reviewed_by_clinician` 中说明这一点。该引擎在具有已知植入模式的合成患者上进行了验证：它能找到被植入的内容，并在没有内容时保持静默。这并非临床验证。

## 试用

每个沙盒项目都有 30 位合成患者，其中六位带有预设模式。找到一个带有 `GET /fhir/R4/Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|<key>` 的。

| 患者 | 预设内容 | 引擎报告 |
|---|---|---|
| p01 Andrei Popescu | 每日家庭血压，六个月内下降约 8/5 mmHg | `trend.decreasing` 收缩压 (8480-6) 和舒张压 (8462-4) |
| p06 Giulia Rossi | 每 7 天一次头痛，误差一天左右 | `recurrence.intervals` 头痛 (R51) |
| p17 Ciarán Murphy | 过去 30 天约有一半时间感到疲劳，而之前是每 12 天一次 | `frequency.increased` 疲劳 (R53) |
| p19 Felix Gruber | 手表记录的静息心率，比上周的正常水平高约 9 bpm | `baseline.higher` 静息心率 (40443-4) |
| p20 Ivana Horvat | 手表记录的静息心率，六个月内下降约 16 bpm | `trend.decreasing` 静息心率 (40443-4) |
| p30 Jan Kowalczyk | 致密的手表和家庭数据，无预设内容 | 无支持的发现：引擎保持静默 |

在 2026 年 10 月 16 日之前创建的项目，在从仪表板重置其合成患者后将获得这些模式；重置将替换对其所做的任何更改。

```bash
curl -s https://platform.anpheros.com/v1/patients/$PATIENT/patterns?window_days=180 \
  -H "Authorization: Bearer $ANPHEROS_KEY"
```

使用 TypeScript SDK (`@anpheros/sdk` 0.2.0 或更高版本)：

```ts
const run = await anpheros.patterns.run(patientId, { window_days: 180, min_strength: 'moderate' });
for (const f of run.findings) console.log(f.summary_text, f.strength, f.limitations.map(l => l.code));
```

使用 MCP 服务器，向您的代理询问“过去六个月这位患者的记录发生了什么变化？”：它会调用 `get_health_patterns`，并可以跟进 `get_pattern_evidence`、`get_series` 和 `compare_periods`。`POST /v1/context` 会添加一个 `patterns` 部分，用于询问关于变化和关系的问题，或者当您询问 `patterns` 需求时。

## 接口

| 接口 | 返回内容 |
|---|---|
| `GET /v1/patients/{id}/patterns` | 一次运行的结果：发现项、计算失败的原因、排除的同意项；过滤器 `window_days` (30–730)、`end`、`types`、`min_strength` |
| `GET /v1/patients/{id}/patterns/{finding_id}` | 单个发现项，在同一时间窗口内重新计算 |
| `GET /v1/patients/{id}/patterns/{finding_id}/evidence` | 所有支持资源，分页返回 |
| `GET /v1/patients/{id}/series?code=…` | 单个测量值，每天一个值，包含覆盖率、缺失和来源变更 |
| `POST /v1/patients/{id}/patterns/compare` | 单个测量值，在您选择的两个时间段内 |

## 读取发现

- `summary_text`：一个简单的句子，可以安全地展示或引用。
- `strength`：`strong`、`moderate`、`weak` 或 `not_tested`。薄弱和未经测试的发现是描述，而非证据。
- `window`、`comparison_window`：分析的时期。
- `evidence`（最多 20 个，分布在整个时期）和 `evidence_total`：发现背后的资源，包含版本、日期、值和作者类型。
- `limitations`：已编码，附带文本。与发现一起展示。
- `review`：临床医生是否已审查阈值（目前为 `false`）以及其来源。
- `method`、`engine_version`、`input_fingerprint`：相同的数据、配置和版本会产生相同的结果和相同的 ID。

## 须知事項

- **优先考虑同意。** 在 OAuth 授权下，引擎仅读取授权允许的内容；无法读取的内容会在 `omitted` 中列出，但无内容。
- **ID。** 患者会显示您项目的成对 ID；查找 ID 是按项目派生的。当记录更改时，一个查找会获得一个新 ID，旧 ID 会返回 404。
- **时间。** 当读取的时间带有明确的偏移量（`2026-10-16T00:30:00+03:00`）时，它会根据个人的本地时间计算；UTC 时间（`Z`）或无偏移量的时间则按 UTC 时间计算。每个查找会在 `time_basis` 中说明是哪个（`record_offsets`、`partly_local` 或 `local_time_unknown`）。本地时间用于沙盒和生产记录；尚未计算一天中的时间模式。
- **排除项。** AI 写入的值、标记为“输入错误”的结果以及仅知道月份的日期不会被使用，但会被计数。
- **限制。** 每个凭证每分钟 30 次模式运行，外加通常的每分钟 600 次请求。

## 常见问题解答

### 是否使用语言模型？
否。每个数字都来自固定的、版本化的统计方法。任何模型，无论是托管的还是本地的，都可以读取结果。

### 为什么我的数据中一个明显的更改被标记为“弱”？
因为证据在所有测试的校正后仍然存在，但序列很短或有噪声，或者更改低于该测量的阈值。该发现仍然描述了记录所显示的内容。

### 是否适用于生产记录？
是的，从 2026 年 10 月 16 日开始，但前提是患者的 OAuth 同意中包含单独的 `anpheros/patterns` 权限，该权限在同意屏幕上单独显示一行。在您的 `patient/…` 范围旁边请求该范围；没有该范围的授权以及任何生产 API 密钥将收到 403 错误。

## 相关资源

- [用于 AI 代理的 FHIR MCP 服务器](https://developers.anpheros.com/zh/guides/mcp)
- [LLM 应用与医疗保健数据](https://developers.anpheros.com/zh/guides/llm-healthcare-data)
- [AI 代理与医疗数据](https://developers.anpheros.com/zh/guides/ai-agents-medical-data)
- [带有患者同意的医疗保健 API](https://developers.anpheros.com/zh/guides/healthcare-api-patient-consent)
