> ## Documentation Index
> Fetch the complete documentation index at: https://platform.kimi.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 金融组合复盘智能体设计

> 拆解官方金融组合复盘智能体的三种持仓输入方式、记忆库增量更新机制与 Excel 底稿 + HTML 报告双产物，附完整起点配置、运行成本测算与自建指引。

人工完成一次月度组合复盘，按 **4–8 小时**、综合人力成本 **¥200/小时** 估算，人力成本 **约 ¥800–1600**，不含数据终端费用。官方金融组合复盘智能体一次全量复盘 **约 ¥25**、耗时 **约 40–60 分钟**，后续增量复盘成本更低，均不含插件调用费用；实测偶有触顶（`max_steps`）失败需重试，人工负责复核与决策。以下是大致量级，实际以控制台账单为准。

最终交付带公式、可继续编辑的 Excel 数据底稿，以及结论先行、可提交投委会的 HTML 复盘报告。智能体只做复盘分析，不执行交易，也不提供买卖指令。

<img src="https://mintcdn.com/moonshotcn/5VWEjSPrQEFbCdz-/videos/portfolio-review.gif?s=16907e471f3effd1d6514e3fd557f489" alt="金融组合复盘智能体产物演示：组合复盘 HTML 报告，从 KPI 卡片、关键结论到净值曲线、贡献归因、月度节奏、风险指标与附录口径与缺口" width="960" height="540" data-path="videos/portfolio-review.gif" />

## Agent 架构总览

<img src="https://mintcdn.com/moonshotcn/4Kcr6Eq3i8zM7z8W/assets/pics/hosted-agents/portfolio-review-arch.png?fit=max&auto=format&n=4Kcr6Eq3i8zM7z8W&q=85&s=191c67c77710816d8e40aead06ce52ce" alt="金融组合复盘智能体：投资者经会话提交复盘任务并提供持仓，智能体从记忆库读取历史状态决定 full 或 fast 模式，通过机构金融插件取数，在运行环境中完成收益与归因计算，交付 Excel 数据底稿与 HTML 复盘报告，并把最新状态写回记忆库" style={{ width: "100%", maxWidth: "560px", display: "block", margin: "0 auto" }} width="2558" height="2558" data-path="assets/pics/hosted-agents/portfolio-review-arch.png" />

一次复盘任务的数据流：

1. 用户用三种方式之一提供持仓：口述、上传 Excel/CSV 持仓文件、描述投资风格；
2. 智能体把持仓整理成结构化持仓表，先给用户确认（风格描述方式则先给分析框架、引导补充持仓）；
3. 智能体读记忆库：有历史分析状态走 fast 模式，只取上次截止日之后的增量数据；没有则走 full 模式做全量分析；
4. 通过插件的数据源路由拉取行情、财务与一致预期数据，Wind/iFinD 网关不可用时自动降级免费行情源，并在产物取数记录表中标注降级与缺口；
5. 计算收益、持仓变化与个股归因，把事实、计算、推断分开呈现；行业配置结论需要多期快照或交易流水，只有单期持仓时列为待补；
6. 产出 Excel 数据底稿和 HTML 复盘报告，写入 `output/` 目录并登记为产物；
7. 把组合背景、复盘截止日和关键结论写回记忆库，供下次增量使用。

| 层 | 负责什么 | 能碰的数据 |
| - | - | - |
| 输入收敛层 | 判断用户用哪种方式提供持仓，收敛到统一的结构化持仓表 | 用户口述、上传的持仓文件、风格描述 |
| 分析层 | 取数、收益与归因计算、增量合并 | 插件数据源（Wind、iFinD 等）、记忆库里的历史状态 |
| 交付层 | 产出 Excel 底稿与 HTML 报告，回写分析状态 | 会话文件系统、记忆库 |

为什么这么设计：组合复盘要同时解决持仓录入和历史状态复用。三条输入路径降低首次录入成本，记忆库避免每次全量重算。

## 核心设计

**官方金融组合复盘智能体的全部能力来自「模型 + 系统提示词 + 插件 + 记忆库」的组合，工具使用平台默认内置工具集。它的设计目标有三条，后面每个配置选择都由此出发：**

* **不把持仓文件当硬门槛**：持仓少可以口述，持仓多传文件，没想好就先描述风格；三条路径收敛到同一份工作流，区别只在第一步的录入成本；
* **第二次复盘只做增量**：周期性任务不能每次从头跑，记忆库记住组合背景和分析状态，fast 模式的取数量和处理量都远小于 full 模式；
* **每个数字有出处，不给交易指令**：所有取数标注来源与取数日期，取不到的列入「待核实」；只做复盘分析，不执行任何交易，不给「买 / 卖」指令性建议。

下面逐项拆解：官方怎么配的、为什么这样配、自建时怎么取舍。

### 系统提示词：工作流 + 数据口径 + 护栏

官方的系统提示词围绕复盘工作流展开，核心约定有四类：

* **输入收敛**：先判断用户用哪种方式提供持仓（口述 / 文件 / 风格描述），口述和文件方式先输出结构化持仓表给用户确认，确认后再进入分析；风格描述方式先给分析框架，引导补充持仓；
* **增量约定**：先查记忆库。有历史状态走 fast 模式，只做增量计算；没有历史状态、或用户更换基准 / 大幅调仓时走 full 模式。每次结束把最新分析状态写回记忆库；
* **数据口径**：每次复盘固定同一套口径，包括市场、币种、基准指数、无风险利率假设、数据质量策略。所有取数标注来源与取数日期；取不到的数据列入「待核实」并注明原因，不编造、不把缺失当零（除非显式声明假设）；
* **护栏**：只做复盘分析，不执行任何交易，不给「买 / 卖」指令性建议；回退数据、陈旧数据、幸存者偏差必须披露；事实、计算、推断分开呈现。

自建时，记忆库的读写约定要写在系统提示词里：哪些状态必须记、什么情况下回退到 full 模式（比如用户更换了基准或大幅调仓导致持仓结构变化超过阈值）。

### 插件：复盘能力全在机构金融插件里

官方只挂了一个插件，即机构金融插件（`institutional-finance-kit`），复盘能力全在插件里：

* **`portfolio-review` 技能**：持仓复盘与收益归因的完整工作流，覆盖收益表现、持仓变化、个股贡献、操作风格分析，并定义了 Excel 底稿 + HTML 报告的产出规范；
* **`consensus-map` 技能**：一致预期地图，把券商对持仓个股的预期做对比聚合，回答「市场怎么看我手里这些票」；
* **数据源路由**：插件自带，统一对接万得 Wind、同花顺 iFinD 等数据源，智能体用能力名取数，不关心具体供应商接口。

自建时按领域替换：做哪个领域的复盘，就挂哪个领域的工作流插件。数据源需要授权时，凭据统一放在 [凭据库](/docs/hosted-agents/vaults)，运行时注入，不进智能体配置。插件的引用方式和版本固定规则见 [插件](/docs/hosted-agents/plugins)。

### 工具：默认内置工具集已够用

官方没有声明 `tools`。文件读写（读持仓文件）、代码运行（算收益和归因）、产物交付（写 Excel 和 HTML）都在平台内置工具集里；外部数据能力已由插件的数据源路由覆盖。只有需要接平台之外的能力时才考虑 MCP，见 [接入 MCP](/docs/hosted-agents/mcp)。

## 配置选择

模型选 `kimi-k3`。选型考虑：复盘任务要同时处理用户的持仓文件、多源行情数据和记忆库里的历史分析状态，产出还要严格按 Excel + HTML 双形态落地，对长上下文和指令遵循的要求都很高。

各项资源的配置如下：

| 资源 | 用途 | 本案例的选择 |
| - | - | - |
| 智能体 | 单智能体完成输入收敛、分析与交付 | `kimi-k3` |
| 插件 | 复盘工作流与数据源路由 | 机构金融插件（`institutional-finance-kit`），含 `portfolio-review`、`consensus-map` 技能 |
| 技能 | 持仓复盘与一致预期分析 | 插件里的 `portfolio-review`、`consensus-map` 技能，随插件挂载 |
| 执行环境 | 读持仓文件、算归因、生成 Excel | 通用云沙箱，无特殊依赖与网络配置 |
| 文件 | 用户上传的持仓清单（方式 2 必传） | 上传后以只读副本挂载进会话 |
| 凭据库 | 数据插件授权（可选） | 数据源需要授权时配置，创建会话时挂载 |
| 触发器 | 当前不需要 | 复盘按需运行；需要定期复盘时再加 |
| 记忆库 | 组合背景与分析状态（增量更新必配） | 一个记忆库，关联到智能体 |

## 运行成本

成本几乎全部来自模型 tokens；沙箱按运行时长计费（¥0.072 / 小时，一次复盘约 40–60 分钟，不到 ¥0.1），可以忽略；文件上传与抽取限时免费，详见 [托管智能体定价](/docs/pricing/hosted-agents)。以 `kimi-k3` 的 [公开单价](/docs/pricing/chat)，一次首次全量复盘的大致量级：**几十元、约 40–60 分钟**；后续日常增量复盘（fast 模式，只取上次截止日之后的数据）取数量和处理量小得多，成本低于全量。

以下为大致量级，**实际以控制台账单为准**——它随持仓规模、复盘区间、以及取数和返工轮次浮动。这个任务目前还不够稳定，实测中出现过触顶失败需要重试的情况，重试会直接抬高实际成本，建议在事件流里盯到产物落地。以上估算只是若干次生产会话的大致量级，不是固定价，实际以控制台账单为准。

**建议客户自己准备持仓数据和研究材料**：复盘质量的上限很大程度由输入材料决定。完整的持仓记录、券商研报、内部研究这些，平台无法直接提供，需要客户自己准备并上传，或自行接入私有信息源。材料越全，归因越准、分析越深入。

## 从最小版本开始搭建

下面给出一个可运行的最小起点，按上文的系统提示词和插件搭配写成。它不是官方配置的逐字拷贝，官方当前配置以 `GET /v1/agents` 返回为准。

### 第 1 步：创建智能体

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.moonshot.cn/v1/agents \
    -H "Authorization: Bearer $KIMI_API_KEY" \
    -H "kimi-api-version: 2026-09-01-beta" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "我的组合复盘助手",
      "model": {"id": "kimi-k3"},
      "system": "你是一个投资组合复盘助手。\n- 支持三种持仓输入：用户口述、用户上传的 Excel/CSV 文件、用户描述的投资风格。口述和文件方式先整理成结构化持仓表给用户确认，确认后再分析。\n- 每次复盘先查记忆库：有历史分析状态走增量模式，只计算上次截止日之后的变化；没有历史状态或用户更换基准/大幅调仓时走全量模式。每次结束把组合背景、复盘截止日和关键结论写回记忆库。\n- 所有取数标注数据来源与取数日期；取不到的数据列入待核实并注明原因，不编造、不把缺失当零。\n- 只做复盘分析，不执行任何交易，不给买入/卖出的指令性建议；事实、计算、推断分开呈现。\n- 产出两份文件：Excel 数据底稿（收益、持仓、归因的完整计算过程）和 HTML 复盘报告（结论先行的可视化呈现），都写入 output/ 目录，最终回复用相对路径逐一列出。",
      "plugins": [
        {"plugin_id": "<机构金融插件 ID>"}
      ],
      "description": "自建组合复盘助手：三种持仓输入 + 增量更新，产出 Excel 底稿和 HTML 报告"
    }'
  ```

  ```bash CLI theme={null}
  kha agents create --file - <<'JSON'
  {
      "name": "我的组合复盘助手",
      "model": {"id": "kimi-k3"},
      "system": "你是一个投资组合复盘助手。\n- 支持三种持仓输入：用户口述、用户上传的 Excel/CSV 文件、用户描述的投资风格。口述和文件方式先整理成结构化持仓表给用户确认，确认后再分析。\n- 每次复盘先查记忆库：有历史分析状态走增量模式，只计算上次截止日之后的变化；没有历史状态或用户更换基准/大幅调仓时走全量模式。每次结束把组合背景、复盘截止日和关键结论写回记忆库。\n- 所有取数标注数据来源与取数日期；取不到的数据列入待核实并注明原因，不编造、不把缺失当零。\n- 只做复盘分析，不执行任何交易，不给买入/卖出的指令性建议；事实、计算、推断分开呈现。\n- 产出两份文件：Excel 数据底稿（收益、持仓、归因的完整计算过程）和 HTML 复盘报告（结论先行的可视化呈现），都写入 output/ 目录，最终回复用相对路径逐一列出。",
      "plugins": [
        {"plugin_id": "<机构金融插件 ID>"}
      ],
      "description": "自建组合复盘助手：三种持仓输入 + 增量更新，产出 Excel 底稿和 HTML 报告"
    }
  JSON
  ```
</CodeGroup>

创建成功后，从响应中保存 `id` 作为 `AGENT_ID`。插件 ID 用 `GET /v1/plugins` 列出后按显示名「机构金融插件」查找，或在控制台智能体表单中直接勾选。之后按需调整的字段：

| 字段 | 调整频率 | 怎么调 |
| - | - | - |
| `system` | 最常改 | 固定基准指数、分析维度、报告模板与合规口径；上面的输入收敛和增量约定建议保留 |
| `plugins` | 按领域改 | 换成其他领域的工作流插件，或叠加数据类插件 |
| `model` | 一般不动 | `kimi-k3` 已适配长上下文分析与结构化产出 |
| 工具集 | 一般不动 | 默认内置工具集已够用，无需声明 |

### 第 2 步：准备执行环境与记忆库

* **执行环境**：通用云沙箱即可，`config` 传 `{"type": "cloud"}`，详见 [快速开始](/docs/hosted-agents/quickstart)。复盘涉及 Excel 生成，沙箱内置的 Python 环境已覆盖；如果你的变体需要额外依赖，在 [执行环境](/docs/hosted-agents/environments) 里声明。

* **记忆库（增量更新必配）**：创建一个记忆库，增量更新的状态读写都走它，见 [记忆库](/docs/hosted-agents/memory)。保存响应中的 `id` 作为 `MEMORY_STORE_ID`：

  <CodeGroup>
    ```bash cURL theme={null}
    curl -X POST https://api.moonshot.cn/v1/memory-stores \
      -H "Authorization: Bearer $KIMI_API_KEY" \
      -H "kimi-api-version: 2026-09-01-beta" \
      -H "Content-Type: application/json" \
      -d '{"name": "portfolio-review", "description": "组合背景与历史复盘状态"}'
    ```

    ```bash CLI theme={null}
    kha memory-stores create --name "portfolio-review" --description "组合背景与历史复盘状态"
    ```
  </CodeGroup>

* **凭据（可选）**：数据插件需要授权时，先在 [凭据库](/docs/hosted-agents/vaults) 配好凭据，并在创建会话时把凭据库挂进 `resources`（绑定只在创建时生效），运行时自动注入。

### 第 3 步：上传持仓文件（方式 2）

以上传持仓文件为例，先把 Excel/CSV 持仓清单通过 `POST /v1/files` 上传，从响应中保存 `id` 作为 `FILE_ID`：

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.moonshot.cn/v1/files \
    -H "Authorization: Bearer $KIMI_API_KEY" \
    -H "kimi-api-version: 2026-09-01-beta" \
    -F "file=@my_portfolio.xlsx"
  ```

  ```bash CLI theme={null}
  kha files upload --file my_portfolio.xlsx
  ```
</CodeGroup>

文件会以只读副本出现在沙箱的 `/mnt/agents/upload/` 下，详见 [文件](/docs/hosted-agents/files)。口述持仓（方式 1）和风格描述（方式 3）跳过这一步。

### 第 4 步：创建会话并下达任务

创建会话时把记忆库与持仓文件一起挂进 `resources`（口述持仓时省略 `file` 资源）：

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.moonshot.cn/v1/sessions \
    -H "Authorization: Bearer $KIMI_API_KEY" \
    -H "kimi-api-version: 2026-09-01-beta" \
    -H "Content-Type: application/json" \
    -d '{
      "agent_id": "'"$AGENT_ID"'",
      "environment_id": "'"$ENVIRONMENT_ID"'",
      "title": "我的组合三季度复盘",
      "resources": [
        {"type": "file", "file_id": "'"$FILE_ID"'"},
        {"type": "memory_store", "memory_store_id": "'"$MEMORY_STORE_ID"'", "access": "read_write"}
      ]
    }'
  ```

  ```bash CLI theme={null}
  kha sessions create --file - <<JSON
  {
      "agent_id": "$AGENT_ID",
      "environment_id": "$ENVIRONMENT_ID",
      "title": "我的组合三季度复盘",
      "resources": [
        {"type": "file", "file_id": "$FILE_ID"},
        {"type": "memory_store", "memory_store_id": "$MEMORY_STORE_ID", "access": "read_write"}
      ]
    }
  JSON
  ```
</CodeGroup>

从响应中保存会话 `id` 作为 `SESSION_ID`，订阅事件流（见 [快速开始](/docs/hosted-agents/quickstart)），然后下达任务：

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.moonshot.cn/v1/sessions/$SESSION_ID/events \
    -H "Authorization: Bearer $KIMI_API_KEY" \
    -H "kimi-api-version: 2026-09-01-beta" \
    -H "Content-Type: application/json" \
    -d '{
      "events": [
        {
          "type": "user.message",
          "data": {
            "content": [
              {"type": "text", "text": "基于我上传的持仓文件，做一份今年三季度的组合复盘：收益表现、持仓变化、行业和个股归因，基准用沪深300。产出 Excel 数据底稿和 HTML 复盘报告，保存到 output/ 目录。"}
            ]
          }
        }
      ]
    }'
  ```

  ```bash CLI theme={null}
  kha sessions send "$SESSION_ID" "基于我上传的持仓文件，做一份今年三季度的组合复盘：收益表现、持仓变化、行业和个股归因，基准用沪深300。产出 Excel 数据底稿和 HTML 复盘报告，保存到 output/ 目录。"
  ```
</CodeGroup>

下个月再复盘时，在同一会话里直接说一句「再复盘一次十月的」即可：智能体读到记忆库里的历史状态，会自动走增量模式。

同一个智能体，任务描述决定产出质量，上面这条就是一个合格示例。以下三条原则按重要性排序：

1. **说清持仓从哪来。** 上传了文件就写「基于我上传的持仓文件」；口述就把持仓说完整（标的、数量、成本价）；只有风格描述就明说「先按我的风格给分析框架」。
2. **说清区间和基准。** 「今年三季度」「最近六个月」这种明确区间，加上「基准用沪深300 / 标普500」，能避免智能体自己猜口径。
3. **说清要什么产物。** 默认产出 Excel 底稿 + HTML 报告；只要其中一份、或要加一致预期地图，就在任务里点名，例如「加上持仓个股的一致预期对比」。

### 第 5 步：取回产物

会话回到 `idle` 后，通过产物接口取回交付物：

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.moonshot.cn/v1/artifacts?session_id=$SESSION_ID" \
    -H "Authorization: Bearer $KIMI_API_KEY" \
    -H "kimi-api-version: 2026-09-01-beta"
  ```

  ```bash CLI theme={null}
  kha artifacts list --session "$SESSION_ID"
  ```
</CodeGroup>

产物列表为空或需要中间文件时，再浏览会话文件系统（见 [文件](/docs/hosted-agents/files)）。

一次复盘交付两份文件，都保存在会话的 `output/` 目录下：

* **Excel 数据底稿**（如 `output/portfolio_review_2026Q3.xlsx`）：多 sheet 的可编辑工作簿，持仓明细、区间收益计算、个股贡献、归因拆解各占一个 sheet，数字带公式可追踪；另附取数记录表，逐类来源留痕，降级与缺口都标注在表里。这是给想自己再加工数据的人准备的；
* **HTML 复盘报告**（如 `output/portfolio_review_2026Q3.html`）：麦肯锡风格的可视化报告，结论先行：开头是核心结论（本期收益、相对基准的超额、主要贡献和拖累），后面才是收益曲线、持仓结构变化等展开章节；附录写明数据口径与缺口，哪些是实际数据、哪些是快照模拟、哪些待补，不藏在正文里。适合直接发给投委会或客户看。

两份文件是同一份分析的两种用法：HTML 用来读，Excel 用来改。

## 运行与观察

事件流能看到智能体的完整工作过程。判断一次运行是否正常，看这几处：

* **`session.status`**：`running` 表示开工，回到 `idle` 表示本轮完成，可以下载产物；
* **`agent.tool_use`**：能看到每次取数调的是哪个数据源、什么口径，也能看到记忆库的读写；
* **`session.error`**：任务失败时出现，携带错误类型与信息。

以下观察点是组合复盘场景独有的：

| 看哪里 | 看什么 | 说明什么 |
| - | - | - |
| `agent.tool_use` 的第一轮调用 | 是否先读记忆库 | fast 模式下第一轮工具调用通常就是读记忆库；已有历史状态却没读，说明增量约定没生效 |
| `agent.thinking` | 判断的输入方式（口述还是文件）与 full / fast 模式 | 模式判断错了，这是最早可以介入纠正的时机 |
| Excel 底稿的取数记录表 | 降级与缺口标注 | Wind / iFinD 网关不可用时会降级到免费行情源，标注越多，相关结论越需要人工复核 |

## 可扩展方向

* **定期自动复盘**：把「每月复盘一次」交给 [触发器](/docs/hosted-agents/triggers)，配一条每月 1 日的 cron，触发器自动创建会话并下达复盘任务，配合记忆库增量更新，全程无人值守；
* **对接内部持仓系统**：机构用户的持仓在自己的 OMS / 风控系统里，可以把持仓查询接口封装成 MCP 服务挂上来，替代手工上传文件，见 [接入 MCP](/docs/hosted-agents/mcp)；
* **嵌入自有系统**：通过 API 创建会话、订阅事件流、取回产出，把复盘能力接进你的业务看板或客户报告流程。

## 下一步

<CardGroup cols={3}>
  <Card title="保存组合分析状态" icon="database" href="/docs/hosted-agents/memory">
    增量更新的状态读写机制与挂载方式。
  </Card>

  <Card title="上传持仓文件" icon="file" href="/docs/hosted-agents/files">
    上传持仓文件、挂载会话与取回产出文件。
  </Card>

  <Card title="配置每月复盘计划" icon="clock" href="/docs/hosted-agents/triggers">
    用触发器把每月复盘做成定时运行。
  </Card>
</CardGroup>
