This commit is contained in:
gzkoala
2026-03-06 15:38:03 +08:00
7625 changed files with 859723 additions and 46 deletions

View File

@@ -3,12 +3,12 @@
title: "Project Caffeine README"
description: "基于 Model Context Protocol (MCP) 协议的研报智能体系统项目介绍、架构蓝图、技术栈说明及开发路线图"
type: "README"
version: "v1.0.1 (Arabica)"
version: "v1.0.2 (Arabica)"
file: "README.md"
author: "Gitconomy Research-郭晧"
date: 2026-02-28
last-update: 2026-03-01
update-description: "增加Project Caffeine MVP Srpint1 系统设计说明"
last-update: 2026-03-06
update-description: "增加Project Caffeine Arabica Srpint2 系统设计和开发链接"
tags:
- Project Caffeine
- MCP
@@ -82,10 +82,10 @@ status: "Active"
当前开发进度:
| **版本** | **主题** | **开发目标** | **核心功能实现** | **设计文档** |
| ------------ | ------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| [`v0.1.0`](./projects/arabica/sprint1/README.md) | 提示词策略 MCP Server 原型验证<br> | 部署基于 Node.js 和 Express.js 的轻量级服务,验证 MCP 协议组件间通讯、大语言模型推理等基本运行环境。<br> | 实现最简化的提示词策略 MCP Server。当用户发起查询请求时系统调用 **5 Whys** 模板对查询进行分解,生成增强提示词,并发送至大语言模型进行深度推理分析,最终返回研究洞察。 | [Project Caffeine提示词策略MCP Server原型设计](./docs/design/project-caffeine-mvp-sprint1-architecture-design.md) |
| **版本** | **开发目标** | **设计文档** | 开发文档 |
| ---------------------------------------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| [`v0.1.0`](./projects/arabica/src/sprint1/README.md) | 部署基于 Node.js 和 Express.js 的轻量级服务,验证 MCP 协议组件间通讯、大语言模型推理等基本运行环境。<br> | [Arabicat Sprint1系统设计文档](./projects/arabica/docs/design/arabica-sprint1-architecture-specification.md) | [Arabicat Sprint1系统开发文档](./projects/arabica/docs/design/arabica-sprint1-development-specification.md) |
| [`v0.1.1`](./projects/arabica/src/sprint2/README.md) | 基于 Sprint 1 原型,扩展为支持 MCP Prompts 原语的多框架引擎,实现意图拆解工具与本地知识库集成,构建模块化、可扩展的提示词策略服务器。 | [Arabica Sprint2系统设计文档](./projects/arabica/docs/design/arabica-sprint2-architecture-specification.md) | [Arabica Sprint2系统开发文档](./projects/arabica/docs/design/arabica-sprint2-devekopment-specification.md) |
---

View File

@@ -4,12 +4,12 @@
图表名称:提示词策略 MCP Server 原型架构图 (Prompt Strategy MVP Architecture)
文件命名prompt-strategy-mcp-server-prototype-architecture.svg
用途:展示从 Client 请求到 5 Whys 策略引擎、资源层再到大模型推理的“上下层级”完整组件链及执行流。
版本v2.0.0 (Top-Down Layout with 50px Spacing Adjustment)
版本v2.1.0 (Top-Down Layout with 50px Spacing Adjustment)
作者Gitconomy Research-郭晧
SPDX-License-Identifier: MIT & CC-BY-SA-4.0
创建日期2026-03-01
更新日期2026-03-1
更新描述:根据更新架构设计文件,重新设计整个开发组件架构与工作流示意
更新日期2026-03-5
更新描述:更新架构图名称
================================================================================
-->
@@ -67,8 +67,8 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
-->
<g id="title-block" transform="translate(640, 40)">
<text y="0" text-anchor="middle" class="font-mono" font-size="12" fill="var(--c-neutral-gray)" letter-spacing="1">FIG-01</text>
<text y="30" text-anchor="middle" class="font-sans" font-weight="bold" font-size="24" fill="#000000">提示词策略 MCP Server 系统架构图</text>
<text y="55" text-anchor="middle" class="font-mono" font-size="14" fill="var(--c-neutral-gray)">架构图 &gt; Arabica Sprint1 &gt; 系统开发组件架构与工作流</text>
<text y="30" text-anchor="middle" class="font-sans" font-weight="bold" font-size="24" fill="#000000">>Arabica Sprint 1 系统开发组件架构图</text>
<text y="55" text-anchor="middle" class="font-mono" font-size="14" fill="var(--c-neutral-gray)">架构图 &gt; Arabica Sprint1 &gt; 单思维框架与意图拆解工作流</text>
<rect x="-30" y="70" width="60" height="3" fill="var(--c-local-green)" />
</g>

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,420 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 1000" width="100%" height="100%">
<!--
================================================================================
图表名称Arabica Sprint 2 架构图 (Arabica Sprint 2 Architecture)
文件命名arabica-srpint2-architecture-design.svg
用途:展示 Project Caffeine 提示词策略 MCP Server 在 Sprint 2 中的多维思维框架接入与意图拆解工作流。
版本v1.0.0
作者Gitconomy Research-郭晧
SPDX-License-Identifier: MIT & CC-BY-SA-4.0
创建日期2026-03-05
================================================================================
-->
<!-- 头部注释:图表背景声明 -->
<!-- Background: Solid White -->
<rect width="100%" height="100%" fill="#FFFFFF" />
<defs>
<style>
:root {
/* 语义色定义 */
--c-cloud-blue: #0099FF;
--c-cloud-blue-light: rgba(0, 153, 255, 0.08);
--c-local-green: #009900;
--c-local-green-light: rgba(0, 153, 0, 0.08);
--c-risk-amber: #F97316;
--c-risk-amber-light: rgba(249, 115, 22, 0.08);
--c-gov-blue: #3B82F6;
--c-gov-blue-light: rgba(59, 130, 246, 0.08);
--c-neutral-gray: #475569;
--c-neutral-gray-light: #B2B2B2;
/* 步骤高亮色 */
--c-step-red: #EF4444;
}
/* 字体降级机制 */
.font-sans { font-family: 'Noto Sans', 'Helvetica Neue', Arial, sans-serif; }
.font-mono { font-family: 'JetBrains Mono', Consolas, 'Courier New', monospace; }
/* 文本层级 */
.card-title { font-size: 15px; font-weight: bold; fill: #FFFFFF; }
.card-text { font-size: 13px; fill: var(--c-neutral-gray); }
.text-code { font-size: 13px; font-weight: bold; fill: #0F172A; }
.label-text { font-size: 12px; font-weight: bold; fill: var(--c-neutral-gray); }
.step-text { font-size: 13px; font-weight: bold; fill: #FFFFFF; }
</style>
<!-- 箭头标记 -->
<marker id="arrow-gray" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
<path d="M 0 0 L 8 4 L 0 8 Z" fill="var(--c-neutral-gray)" />
</marker>
<marker id="arrow-green" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
<path d="M 0 0 L 8 4 L 0 8 Z" fill="var(--c-local-green)" />
</marker>
<marker id="arrow-blue" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
<path d="M 0 0 L 8 4 L 0 8 Z" fill="var(--c-cloud-blue)" />
</marker>
</defs>
<!--
===========================================================================
顶层标题块 (Title Block)
===========================================================================
-->
<g id="title-block" transform="translate(640, 40)">
<text y="0" text-anchor="middle" class="font-mono" font-size="12" fill="var(--c-neutral-gray)" letter-spacing="1">FIG-01</text>
<text y="30" text-anchor="middle" class="font-sans" font-weight="bold" font-size="24" fill="#000000">Arabica Sprint 2 系统开发组件架构图</text>
<text y="55" text-anchor="middle" class="font-mono" font-size="14" fill="var(--c-neutral-gray)">架构图 &gt; Arabica Sprint 2 &gt; 多维思维框架与意图拆解工作流</text>
<!-- Context Indicator: Y=70 -->
<rect x="-30" y="70" width="60" height="3" fill="var(--c-cloud-blue)" />
</g>
<!--
===========================================================================
架构图主体内容 (Diagram Content)
===========================================================================
-->
<g id="diagram-content" transform="translate(0, 80)">
<!-- 物理边界与容器 -->
<g id="boundaries" transform="translate(0, 240)">
<!-- Node.js MCP Server Runtime Boundary -->
<rect x="290" y="0" width="700" height="540" rx="12" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-dasharray="4 4" stroke-width="2" />
<rect x="290" y="0" width="700" height="36" fill="var(--c-local-green)" opacity="0.1" rx="12"/>
<text x="310" y="23" class="font-mono" font-size="14" font-weight="bold" fill="var(--c-local-green)">📦 MCP Server RuntimeSprint2) </text>
</g>
<!--
===========================================================================
核心连线与数据流向 (Connections)
===========================================================================
-->
<g id="connections" fill="none" stroke-width="2">
<!-- User to Cherry Studio -->
<path d="M 400 110 L 482 110" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<path d="M 490 140 L 408 140" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<!-- Cherry Studio to Remote LLM -->
<path d="M 760 100 L 892 100" stroke="var(--c-cloud-blue)" stroke-dasharray="4 2" marker-end="url(#arrow-blue)" />
<path d="M 760 120 L 892 120" stroke="var(--c-cloud-blue)" stroke-dasharray="4 2" marker-end="url(#arrow-blue)" />
<path d="M 900 140 L 768 140" stroke="var(--c-cloud-blue)" stroke-dasharray="4 2" marker-end="url(#arrow-blue)" />
<!-- stdio Transport -->
<path d="M 600 170 L 600 292" stroke="var(--c-local-green)" marker-end="url(#arrow-green)" />
<path d="M 640 300 L 640 178" stroke="var(--c-local-green)" marker-end="url(#arrow-green)" />
<!-- app.ts to Controllers -->
<path d="M 600 370 L 600 395 L 410 395 L 410 422" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<path d="M 640 370 L 640 422" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<path d="M 680 370 L 680 395 L 870 395 L 870 422" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<!-- Controllers to Services -->
<path d="M 410 490 L 410 532" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<path d="M 640 490 L 640 532" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<path d="M 870 490 L 870 532" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<!-- resourceService to Local Vault -->
<path d="M 700 460 L 750 460 L 750 580 L 780 580" stroke="var(--c-neutral-gray)" marker-end="url(#arrow-gray)" />
<!-- Services to Schemas/Frameworks -->
<path d="M 410 620 L 410 652" stroke="var(--c-neutral-gray)" stroke-dasharray="2 2" marker-end="url(#arrow-gray)" />
<path d="M 640 620 L 640 652" stroke="var(--c-neutral-gray)" stroke-dasharray="2 2" marker-end="url(#arrow-gray)" />
<!-- toolsController to resourceService -->
<path d="M 870 620 L 870 680" stroke="var(--c-local-green)" marker-end="url(#arrow-green)" />
</g>
<!--
===========================================================================
路径标签说明 (Path Labels)
===========================================================================
-->
<g id="path-labels" class="font-sans label-text">
<!-- Top Level -->
<text x="445" y="95" text-anchor="middle">Query</text>
<text x="445" y="160" text-anchor="middle">Report</text>
<text x="830" y="85" text-anchor="middle" fill="var(--c-cloud-blue)">Reasoning</text>
<text x="830" y="160" text-anchor="middle" fill="var(--c-cloud-blue)">LLM Result</text>
<!-- stdio Link -->
<text x="585" y="200" text-anchor="end" fill="var(--c-local-green)">prompts/get</text>
<text x="585" y="220" text-anchor="end" fill="var(--c-local-green)">tools/call</text>
<text x="655" y="210" text-anchor="start" fill="var(--c-local-green)">Result Data</text>
<rect x="585" y="250" width="70" height="20" rx="4" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="620" y="264" text-anchor="middle" class="font-mono" font-size="11" fill="var(--c-local-green)">stdio</text>
<text x="820" y="650" text-anchor="middle" class="font-mono" font-size="11" fill="var(--c-neutral-gray)">load/save</text>
</g>
<!--
===========================================================================
架构节点卡片 (Node Cards)
===========================================================================
-->
<g id="nodes">
<!-- 1. User Node -->
<g transform="translate(280, 95)">
<rect x="0" y="0" width="110" height="60" rx="8" fill="#F8FAFC" stroke="var(--c-neutral-gray)" stroke-width="2" />
<circle cx="55" cy="22" r="10" fill="var(--c-neutral-gray)" />
<path d="M 35 50 C 35 35, 75 35, 75 50" fill="none" stroke="var(--c-neutral-gray)" stroke-width="3" stroke-linecap="round"/>
<text x="55" y="75" text-anchor="middle" class="font-sans label-text">User / 用户</text>
</g>
<!-- 2. Cherry Studio -->
<g transform="translate(490, 80)">
<rect x="0" y="0" width="260" height="90" rx="8" fill="var(--c-gov-blue-light)" stroke="var(--c-gov-blue)" stroke-width="2" />
<rect x="0" y="0" width="260" height="30" fill="var(--c-gov-blue)" rx="8" />
<rect x="0" y="20" width="260" height="10" fill="var(--c-gov-blue)" />
<text x="130" y="20" text-anchor="middle" class="font-sans card-title">Cherry Studio (MCP Client)</text>
<text x="130" y="55" text-anchor="middle" class="font-sans card-text" font-weight="bold">大模型对话与调度宿主</text>
<text x="130" y="75" text-anchor="middle" class="font-mono card-text" font-size="11">Initiates stdio subprocess</text>
</g>
<!-- 3. Remote LLM Brain -->
<g transform="translate(970, 120)">
<polygon points="0,-45 40,-20 40,20 0,45 -40,20 -40,-20" fill="var(--c-cloud-blue-light)" stroke="var(--c-cloud-blue)" stroke-width="3" />
<text x="0" y="-5" text-anchor="middle" class="font-mono card-test" fill="var(--c-cloud-blue)" font-size="14">LLM</text>
<text x="0" y="15" text-anchor="middle" class="font-mono card-text" font-size="10" fill="var(--c-cloud-blue)">(Remote)</text>
</g>
<!-- 4. app.ts -->
<g transform="translate(560, 300)">
<rect x="-10" y="0" width="180" height="70" rx="6" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2" />
<rect x="-10" y="0" width="180" height="26" fill="var(--c-local-green)" rx="6" />
<rect x="-10" y="20" width="180" height="6" fill="var(--c-local-green)" />
<text x="80" y="18" text-anchor="middle" class="font-mono card-title">app.ts</text>
<text x="80" y="45" text-anchor="middle" class="font-sans text-code" font-size="12">McpServer 注册原语</text>
<text x="80" y="62" text-anchor="middle" class="font-mono card-text" font-size="10">Prompts &amp; Tools (stdio)</text>
</g>
<!-- 5. promptsController.ts -->
<g transform="translate(320, 430)">
<rect x="0" y="0" width="180" height="60" rx="6" fill="#FFFFFF" stroke="var(--c-risk-amber)" stroke-width="2" />
<rect x="0" y="0" width="180" height="26" fill="var(--c-risk-amber)" rx="6" />
<rect x="0" y="20" width="180" height="6" fill="var(--c-risk-amber)" />
<text x="90" y="18" text-anchor="middle" class="font-mono card-title">promptsController</text>
<text x="90" y="48" text-anchor="middle" class="font-sans card-text">处理 prompts/get 和 list</text>
</g>
<!-- 6. toolsController.ts -->
<g transform="translate(550, 430)">
<rect x="0" y="0" width="180" height="60" rx="6" fill="#FFFFFF" stroke="var(--c-risk-amber)" stroke-width="2" />
<rect x="0" y="0" width="180" height="26" fill="var(--c-risk-amber)" rx="6" />
<rect x="0" y="20" width="180" height="6" fill="var(--c-risk-amber)" />
<text x="90" y="18" text-anchor="middle" class="font-mono card-title">toolsController</text>
<text x="90" y="48" text-anchor="middle" class="font-sans card-text">处理 tools 工具调度分发</text>
</g>
<!-- 7. resourcesController.ts -->
<g transform="translate(780, 430)">
<rect x="0" y="0" width="180" height="60" rx="6" fill="#FFFFFF" stroke="var(--c-neutral-gray-light)" stroke-width="2" stroke-dasharray="2 2" opacity="0.8"/>
<rect x="0" y="0" width="180" height="26" fill="var(--c-neutral-gray-light)" rx="6" />
<rect x="0" y="20" width="180" height="6" fill="var(--c-neutral-gray-light)" />
<text x="90" y="18" text-anchor="middle" class="font-mono card-title">resourcesController</text>
<text x="90" y="48" text-anchor="middle" class="font-sans card-text">处理 resources 请求分发</text>
</g>
<!-- 8. promptService.ts -->
<g transform="translate(320, 540)">
<rect x="0" y="0" width="180" height="80" rx="6" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2" />
<rect x="0" y="0" width="180" height="26" fill="var(--c-local-green)" rx="6" />
<rect x="0" y="20" width="180" height="6" fill="var(--c-local-green)" />
<text x="90" y="18" text-anchor="middle" class="font-mono card-title">promptService.ts</text>
<text x="90" y="50" text-anchor="middle" class="font-sans text-code" font-size="12" fill="var(--c-local-green)">管理多维思维框架库</text>
<text x="90" y="70" text-anchor="middle" class="font-sans card-text" font-size="11">返回静态结构化模板</text>
</g>
<!-- 9. intentService.ts -->
<g transform="translate(550, 540)">
<rect x="0" y="0" width="180" height="80" rx="6" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2" />
<rect x="0" y="0" width="180" height="26" fill="var(--c-local-green)" rx="6" />
<rect x="0" y="20" width="180" height="6" fill="var(--c-local-green)" />
<text x="90" y="18" text-anchor="middle" class="font-mono card-title">intentService.ts</text>
<rect x="25" y="35" width="130" height="20" rx="3" fill="var(--c-risk-amber-light)" />
<text x="90" y="50" text-anchor="middle" class="font-sans text-code" font-size="12" fill="var(--c-risk-amber)">意图拆解核心算法</text>
<text x="90" y="70" text-anchor="middle" class="font-sans card-text" font-size="11">生成专业检索词(3~5个)</text>
</g>
<!-- 10. resourceService.ts -->
<g transform="translate(780, 540)">
<rect x="0" y="0" width="180" height="80" rx="6" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2" stroke-dasharray="2 2" opacity="0.8"/>
<rect x="0" y="0" width="180" height="26" fill="var(--c-local-green)" rx="6" />
<rect x="0" y="20" width="180" height="6" fill="var(--c-local-green)" />
<text x="90" y="18" text-anchor="middle" class="font-mono card-title">resourceService.ts</text>
<text x="90" y="50" text-anchor="middle" class="font-sans text-code" font-size="12">文件系统 I/O 交互</text>
<text x="90" y="70" text-anchor="middle" class="font-sans card-text" font-size="11">读取本地知识库</text>
</g>
<!-- 11. models/frameworks -->
<g transform="translate(320, 660)">
<rect x="0" y="0" width="180" height="60" rx="6" fill="#F8FAFC" stroke="var(--c-neutral-gray)" stroke-width="1.5" stroke-dasharray="4 2" />
<path d="M 0 20 L 180 20" stroke="var(--c-neutral-gray)" stroke-width="1.5" stroke-dasharray="4 2" />
<text x="90" y="14" text-anchor="middle" class="font-mono text-code" font-size="11">models/frameworks/</text>
<text x="90" y="38" text-anchor="middle" class="font-mono card-text" font-size="11">5w3h.json, scqa.json</text>
<text x="90" y="52" text-anchor="middle" class="font-mono card-text" font-size="11">swot.json, pestle.json</text>
</g>
<!-- 12. schemas.ts -->
<g transform="translate(595, 660)">
<rect x="0" y="0" width="90" height="60" rx="6" fill="#F8FAFC" stroke="var(--c-neutral-gray)" stroke-width="1.5" />
<text x="45" y="25" text-anchor="middle" class="font-mono text-code" font-size="12">schemas.ts</text>
<text x="45" y="45" text-anchor="middle" class="font-sans card-text" font-size="11">Zod 强校验</text>
</g>
<!-- 13. External Resources -->
<g transform="translate(820, 680)">
<path d="M 0 15 A 50 15 0 1 0 100 15 V 60 A 50 15 0 1 1 0 60 Z" fill="var(--c-local-green-light)" stroke="var(--c-neutral-gray)" stroke-width="2" stroke-dasharray="2 2" />
<ellipse cx="50" cy="15" rx="50" ry="15" fill="var(--c-local-green-light)" stroke="var(--c-neutral-gray)" stroke-width="2" stroke-dasharray="2 2" />
<text x="50" y="55" text-anchor="middle" class="font-sans card-text" fill="var(--c-neutral-gray)" font-size="12">Local Vault</text>
</g>
</g>
<!--
===========================================================================
步骤侧边栏与流程图注 (Execution Steps)
===========================================================================
-->
<g id="execution-steps">
<g transform="translate(440, 110)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">1</text>
</g>
<g transform="translate(830, 100)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">2</text>
</g>
<g transform="translate(600, 210)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">3</text>
</g>
<g transform="translate(410, 505)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">4</text>
</g>
<g transform="translate(830, 140)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">5</text>
</g>
<g transform="translate(640, 505)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">6</text>
</g>
<g transform="translate(440, 140)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">7</text>
</g>
<g transform="translate(640, 210)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">8</text>
</g>
<g transform="translate(870, 645)">
<circle cx="0" cy="0" r="10" fill="var(--c-step-red)" />
<text x="0" y="4.5" text-anchor="middle" class="font-sans step-text">9</text>
</g>
<!-- 步骤流程侧边栏 -->
<g transform="translate(20, 280)">
<rect x="0" y="0" width="260" height="240" rx="8" fill="#FEF2F2" stroke="var(--c-step-red)" stroke-width="1.5" />
<text x="130" y="25" text-anchor="middle" class="font-sans" font-size="14" font-weight="bold" fill="var(--c-step-red)">Sprint 2 执行步骤流</text>
<line x1="15" y1="35" x2="245" y2="35" stroke="var(--c-step-red)" stroke-dasharray="2 2" />
<g transform="translate(15, 55)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">1</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">用户在 Cherry Studio 输入查询</text>
</g>
<g transform="translate(15, 75)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">2</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">大模型判断需要调用多维思维框架</text>
</g>
<g transform="translate(15, 95)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">3</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">Client发起 prompts/get 获取模板</text>
</g>
<g transform="translate(15, 115)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">4</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">组合模板与查询,大模型初步推理</text>
</g>
<g transform="translate(15, 135)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">5</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">调用 tools/call 获取专业检索词</text>
</g>
<g transform="translate(15, 155)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">6</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">Server 执行意图拆解并返回结果</text>
</g>
<g transform="translate(15, 175)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">7</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">大模型结合检索词完成返回查询结果</text>
</g>
<g transform="translate(15, 195)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">8</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">结构化提示词传递给模型</text>
</g>
<g transform="translate(15, 215)">
<circle cx="6" cy="-4" r="7" fill="var(--c-step-red)" />
<text x="6" y="0" text-anchor="middle" class="font-sans step-text" font-size="10">9</text>
<text x="20" y="0" class="font-sans card-text" fill="#000000">查询结果保存到本地知识库</text>
</g>
</g>
</g>
</g>
<!--
===========================================================================
底部图例与注释块 (Legend & Key Block)
===========================================================================
-->
<g id="legend" transform="translate(640, 920)">
<!-- 统一的半透明背景容器 -->
<rect x="-440" y="-16" width="880" height="40" rx="4" fill="rgba(255, 255, 255, 0.9)" stroke="var(--c-neutral-gray)" stroke-width="0.5"/>
<g transform="translate(-420, 0)">
<!-- 图例引导文本 -->
<text x="0" y="8" class="font-sans" font-size="13" font-weight="bold" fill="var(--c-neutral-gray)">组件与语义对照:</text>
<!-- 图例项 1 -->
<g transform="translate(130, 0)">
<rect x="-6" y="-4" width="12" height="12" rx="2" fill="var(--c-gov-blue)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">宿主客户端架构</text>
</g>
<!-- 图例项 2 -->
<g transform="translate(280, 0)">
<rect x="-6" y="-4" width="12" height="12" rx="2" fill="var(--c-risk-amber)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">请求分发控制器 (Controllers)</text>
</g>
<!-- 图例项 3 -->
<g transform="translate(490, 0)">
<rect x="-6" y="-4" width="12" height="12" rx="2" fill="var(--c-local-green)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">核心执行引擎与资源层</text>
</g>
<!-- 图例项 4 -->
<g transform="translate(680, 0)">
<rect x="-6" y="-4" width="12" height="12" rx="2" fill="var(--c-neutral-gray-light)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">Sprint 3 预留扩展 (灰色)</text>
</g>
</g>
</g>
<!--
===========================================================================
版权许可声明 (License)
===========================================================================
-->
<text x="640" y="980" text-anchor="middle" class="font-sans" font-size="11" fill="var(--c-neutral-gray)">
本作品采用 CC-BY-SA 4.0 进行许可,© 2025-2026 Gitconomy Research社区
</text>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,134 @@
<!--
---
title: Arabica Release Sprint 功能开发规划
description: 全面规划 Arabica (v1.0.0) 版本的 5 个渐进式 Sprint 迭代目标,遵循敏捷迭代原则,涵盖从底层 MCP 基础设施建设、思维框架组装,到递归深度研究算法攻坚与本地 PKM 融合的完整演进路径。
type: Feature Design
version: v1.0.0 (Arabica)
file: arabica-release-sprint-design.md
author: Gitconomy Research-郭晧
date: 2026-03-05
tags:
- Project Caffeine
- MVP
- Sprint 规划
- 开发路线图
- Deep Research
- MCP
license: CC BY-SA 4.0
status: Active
---
-->
# Arabica Release Sprint 功能开发规划
## 🏁 Sprint 1本地基础设施与单点能力验证 (已完成)
**概述** 本次迭代的核心目标是搭建零网络开销的底层标准通信,跑通大模型对本地知识库的安全读取与基础策略生成的物理链路。系统在一套代码中集成了官方 MCP SDK支持 Cherry Studio 的 `stdio` 标准通信),无缝接入本地 Obsidian 目录,并通过 VS Code 跑通了完美的源码级断点联调工作流。
|功能模块|详细说明|
|---|---|
|**底层架构 (stdio) 初始化**|初始化基于 Node.js 的主入口 `src/app.ts`,负责建立标准输入输出传输层,并向客户端注册工具字典。|
|**本地资源安全挂载**|开发 `src/services/resourceService.ts`,实现 `list_local_notes``read_local_note` 工具并带有严格路径防穿越Path Traversal安全校验。|
|**提示词策略引擎建设**|开发 `src/services/promptService.ts`,提供纯本地业务逻辑,负责核心的 **5 Whys 框架生成**。|
|**全链路源码级联调配置**|配置 `tsconfig.json` 生成 `sourceMap`,并在 `.vscode/launch.json` 中映射 `dist` 目录,实现在 Cherry Studio 挂载 `--inspect=9229` 参数的源码级断点拦截。|
---
## Sprint 2提示词策略 Server (S2) 建设与多维思维引擎组装
**概述** 本次迭代的核心目标是全面扩充系统的“大脑”——**S2 (提示词策略 Server)**。通过引入 MCP 的 `Prompts` 原语,系统将写入多种静态思维框架模板,让大模型在面对用户模糊的自然语言提问时,能够主动调用这些标准化的模板来规范交互结构和意图拆解逻辑,彻底打通基于思维框架的单次分析闭环。
|功能模块|详细说明|
|:--|:--|
|**MCP Prompts 原语接入**|启用 MCP 规范中的第三大核心系统原语 `Prompts`。开发 `prompts/list``prompts/get` 接口,将各种思维框架作为可复用的模板暴露给大模型,帮助其构造标准化的交互结构,降低每次对话所需的前置上下文长度。|
|**多维静态思维框架扩展**|在 Sprint 1 的 5 Whys 基础上,向 S2 写入并注册更多经典的静态思维框架模板,如 **5W3H、SCQA、SWOT、PESTLE** 等。这些框架将指导大模型按照标准逻辑结构进行逐步推理。|
|**意图拆解与广度解析工具**|配合上述思维框架,开发 `generate_search_queries` 工具。该工具将赋予大模型将用户的“大白话”拆解为 3-5 个专业检索词的能力,从而实现研究主题的 Breadth广度解析。|
|**底层角色矩阵与输出规范设计**|建立多智能体角色矩阵 (Persona Matrix) 的雏形,设计精确的 System Prompts并通过 Few-Shot少样本示例在提示词模板中定义大模型的输出结构约束如强制输出 Markdown 格式)。|
---
## Sprint 3文献查询 Server (S1) 与外围学术检索
**概述** 本次迭代**聚焦于外部学术数据的抓取与标准化落盘**。让系统拥有向外探索的“触手”,接入学术 API并将抓取到的离散 JSON 数据转化为符合后续系统流转的本地化 Markdown 数据。
|功能模块|详细说明|
|---|---|
|**基础学术检索能力**|集成至少 2 个核心学术 API如 arXiv API、Semantic Scholar API实现基础的 `search_academic_literature` 工具。|
|**双轨制数据落盘模块**|开发 `save_to_local_vault` 工具,实现外部 API 的 JSON 数据到 Markdown + YAML Frontmatter 的自动转换。|
|**标准化数据字典**|设计最终落盘的 Markdown 模板与 YAML Frontmatter 元数据字典,明确 `title`, `citation_density_check`, `research_depth_level` 等字段。|
---
## Sprint 4长文本切块算法与单轮 CoT 推理合成 (S3)
**概述**:本次迭代**聚焦于大模型上下文窗口限制的突破与基础报告生成**。解决长篇 PDF 或文献导致的 Token 超载问题,并正式建立 S3CoT 多步推理 Server打通单次分析的工作流闭环。
|功能模块|详细说明|
|---|---|
|**Token 感知语义切块**|开发 `fetch_and_split_document` 工具制定长文本“Token 感知语义切块Semantic Chunking”的具体策略与重叠率标准。|
|**异步局部同步**|服务端在本地完成文本解析与向量切割,仅将统计学上高度相关的片段异步同步给客户端,避免 Token 极度消耗。|
|**CoT 多步推理合成**|开发 `cot_literature_synthesis` 核心提示词模板,规范大模型的输出结构(摘要、引言、主体等)。|
---
## Sprint 5深研状态机设计与防死循环管控
**概述**:本次迭代是系统的算法攻坚核心,**聚焦于递归检索的状态管理**。为了让系统从“单轮问答”升级为“AI 研究员”,本阶段专门开发探索账本与状态机,严防模型在多轮检索中陷入自我循环的死胡同。
|功能模块|详细说明|
|---|---|
|**深研状态机设计**|明确大模型在“检索 -> 切块 -> 提取 -> 评估盲区 -> 追问”循环中的状态流转图。|
|**探索账本管理**|开发 `manage_exploration_state` 工具,记录已经检索过的 Query 和文献 ID。|
|**哈希去重与循环拦截**|设计布隆过滤器或哈希去重逻辑,严防大模型陷入检索死循环。|
---
## Sprint 6多智能体角色矩阵与知识盲区探测
**概述**:在状态机建好后,本次迭代**聚焦于智能体角色赋予与递归评估逻辑**。通过下发不同的专家指令并强约束模型必须自我评估知识盲区实现真正的多轮次深度研究Deep Research
| 功能模块 | 详细说明 |
| ------------- | --------------------------------------------------------------------------- |
| **多智能体角色矩阵** | 建立 Persona Matrix为“检索策略专家”、“洞察提取研究员”、“战略分析顾问”等角色撰写并动态下发精确的 System Prompts。 |
| **深度评估与盲区探测** | 开发最关键的 `evaluate_research_depth`(深度评估)和 `evaluate_knowledge_gaps`(盲区探测)工具。 |
| **递归工作流编排** | 在客户端提示词中写入递归循环逻辑:强约束大模型在提取洞察后,必须调用评估盲区工具;若未达标,必须发起新一轮检索。 |
---
## Sprint 7学术级质量把控与深度网络爬虫强化
**概述**:本次迭代**聚焦于学术级内容质检与突破性信息获取**。要求模型输出的结果必须具备严谨的学术溯源特征,同时补齐系统对深层网页内容的抓取能力。
| 功能模块 | 详细说明 |
| ------------ | --------------------------------------------------------------------------------------- |
| **引用密度强制校验** | 强化 S3 质检逻辑,实现引用密度强制校验,确保正文中的核心事实必须带有 `[文献ID]` 尾注。 |
| **时效性与局限声明** | 开发“利益冲突与时效性局限”自动声明模块,降低学术幻觉。 |
| **深度网络爬虫强化** | 实现 `scrape_and_parse_deep_content` 工具,引入 Playwright 或 Firecrawl 突破纯 API 限制,抓取含金量高的网页正文。 |
---
## Sprint 8PKM (个人知识管理) 深度对接与双向融合
**概述**:本次迭代**完全聚焦于最终知识产物的网状关联**。致力于让系统生成的报告不只是孤立的文件,而是能完美融入用户现有的 Obsidian 或 Logseq 知识图谱中。
| 功能模块 | 详细说明 |
| ---------- | ------------------------------------------------------------------------------------------ |
| **物理串联机制** | 梳理与 Obsidian/Logseq 等工具联动的双向链接(`[[...]]`)自动生成策略。 |
| **本地图谱融合** | 深度优化 `save_to_local_vault`,在 Markdown 正文中自动生成 Obsidian 格式的双向链接 `[[文献名称]]`,将主报告与独立洞察卡片物理串联。 |
---
## Sprint 9网络层扩展、并发优化与最终交付
**概述**:作为 Arabica (v1.0.0) 的收官迭代,本次 Sprint **聚焦于网络协议扩展与企业级工程质量**。为系统增加远程云端调用能力,完成并发压测与开源交付。
| 功能模块 | 详细说明 |
| ------------------- | --------------------------------------------------------------------------------------------------- |
| **HTTP + SSE 协议扩展** | 引入 HTTP POST 请求与 Server-Sent Events (SSE) 流式下发响应,支持云端部署的远程 MCP 服务端跨网络调用。 |
| **LRU 缓存与异步优化** | 引入全面的异步处理模型(如 Node.js 非阻塞事件流并对高频读写的中间结果采用最近最少使用LRU缓存策略结合哈希映射和双向链表管理生命周期。 |
| **环境变量与测试交付** | 完善 `.env.example`(配置各路 API Keys 等),利用 k6 Load Testing 进行 P99 压测,最终发布 V0.1.0(对应 Arabica v1.0.0)正式版本。 |
---
## 许可声明
本文档采用 **知识共享署名--相同方式共享 4.0 国际许可协议 (CC BY--SA 4.0)** 进行许可,© 2025-2026 Gitconomy Research.

View File

@@ -4,11 +4,11 @@ title: 提示词策略 MCP Server 原型设计文档
description: Project Caffeine 提示词策略 MCP Server 的最小可行性功能MVP原型设计涵盖 5 Whys 模板调用、增强提示词合成及 Node.js 环境工作流验证
type: Architecture Design
file: project-caffeine-mvp-sprint1-architecture-design.md
version: v1.0.1 (Arabica)
version: v1.0.2 (Arabica)
author: Gitconomy Research-郭晧
date: 2026-03-1
last-update: 2026-03-01
update-description: 增加Cherry Stuio作为 MCP Client上一版的设计还是基于传统的“AI Web 应用后端”,而不是严格意义上的 MCP 系统框架
last-update: 2026-03-05
update-description: 更新Sprint1 数据流示意图和架构图的说明描述
tags:
- Project Caffeine
- MCP Server
@@ -21,7 +21,7 @@ license: CC BY-SA 4.0
status: Active
---
-->
# Project Caffeine最小可行功能原型设计 —— 提示词策略MCP Server
# PArabica Sprint1 系统架构设计说明
## 1. 原型设计概述
@@ -38,19 +38,34 @@ status: Active
### 2. 功能实现步骤说明
#### 2.1 客户端请求与工具分发
- 用户在 **Cherry Studio** 中输入查询意图“分析LLM在医疗中的应用瓶颈”
- Cherry Studio 内部的大模型判断需要更深度的思考框架,主动向本 **MCP Server** 发起 `generate_5_whys` 的工具调用。
```mermaid
sequenceDiagram
participant User as 用户
participant Client as Cherry Studio (MCP Client)
participant LLM as 大语言模型
participant Server as MCP Server (Project Caffeine)
#### 2.2 生成 5 Whys 增强提示词
User->>Client: 1. 输入查询如“分析LLM在医疗中的应用瓶颈”
Client->>LLM: 传递查询
LLM-->>Client: 2. 决策需要深度思考框架,决定调用工具
Client->>Server: 3. tools/call (generate_5_whys, query=...)
Server->>Server: 4. promptService.js 本地生成 5 Whys 追问列表
Server-->>Client: 5. 返回 5 Whys 数组
Client->>LLM: 6. 将 5 Whys 作为上下文,发起最终推理请求
LLM-->>Client: 返回深度分析结果
Client-->>User: 7. 渲染并展示深度研究报告
```
- **MCP Server** 接收到参数后,执行本地 `promptService.js`,根据查询主题自动生成 5 个逐层递进的问题5 Whys
基于 Cherry Studio 和 MCP (Model Context Protocol) 架构的工作流分为七个关键步骤:
#### 2.3 结果返回与最终推理
- **MCP Server** 将生成的 5 Whys 数组作为工具执行结果,通过标准协议返回给 Cherry Studio
- Cherry Studio 携带这些增强提示词再次请求大模型,生成最终的深度研究洞察,并展示给用户
1. **用户发起提问**用户首先在前端Cherry Studio输入自己的问题或查询需求。
2. **大模型决策调用工具**Cherry Studio 作为 MCP 客户端,接收到用户提问后,其连接的大模型会对问题进行分析,并判断出需要调用系统注册的外部工具(如 5 Whys 分析法)来获取更好的提示词策略,而不是直接回答。
3. **发起工具调用请求 tools/call**Cherry Studio 通过标准输入输出流(`stdio`)协议,向后端的 Project Caffeine MCP Server基于 Node.js 构建)发送一个名为 `generate_5_whys` 的工具调用指令
4. **本地生成 5 Whys 文本**Project Caffeine MCP Server 接收到指令后,触发其内部的业务逻辑模块 `promptService.js`。该模块完全在本地运行,不依赖外部大模型,根据用户的初始问题自动生成 5 个逐层深入的追问(即 5 Whys 文本)
5. **返回工具执行结果**MCP Server 将生成的 5 Whys 文本打包成标准的结果格式,通过协议传回给 Cherry Studio。
6. **结合工具结果发起最终推理**Cherry Studio 拿到这 5 个问题后,将其作为增强的上下文提示词,再次向大语言模型发起最终的深度推理请求,要求模型基于这些追问给出详尽的分析。
7. **渲染并呈现结果**大模型完成最终推理后Cherry Studio 将这部分内容进行界面渲染,最终向用户呈现一份高质量的“深度洞察报告”。
---
@@ -86,33 +101,30 @@ project-caffeine/
*表1-1**Project Caffeine** 项目 MVP 系统文件和文件夹功能详细说明表格*
| **目录** | **文件名** | **功能说明** |
| --- | --- | --- |
| **`src/`** | **`app.js`** | 实例化官方 `McpServer`,配置 `stdio` 传输层,向 Client 注册 Tools 和 Resources。 |
| **`src/controllers/`** | **`promptsController.js`** | 接收 `tools/call` 请求,调用 `promptService` 并格式化输出返回给 Client。 |
| **`src/controllers/`** | **`resourcesController.js`** | 处理 `resources/list``resources/read` 请求,返回资源数据。 |
| **`src/services/`** | **`promptService.js`** | 纯本地业务逻辑:根据入参字符串生成 **5 Whys** 数组结构。 |
| **`src/services/`** | **`resourceService.js`** | 本地文件系统交互:读取本地知识库(如 Obsidian或指定目录文档。 |
| **`.vscode/`** | **`launch.json`** | 极其关键:配置 Node.js 的 `--inspect` 端口,实现基于 Cherry Studio 唤起时的断点联调。 |
| **目录** | **文件名** | **功能说明** |
| ---------------------- | ---------------------------- | --------------------------------------------------------------- |
| **`src/`** | **`app.js`** | 实例化官方 `McpServer`,配置 `stdio` 传输层,向 Client 注册 Tools 和 Resources。 |
| **`src/controllers/`** | **`promptsController.js`** | 接收 `tools/call` 请求,调用 `promptService` 并格式化输出返回给 Client。 |
| **`src/controllers/`** | **`resourcesController.js`** | 处理 `resources/list``resources/read` 请求,返回资源数据。 |
| **`src/services/`** | **`promptService.js`** | 纯本地业务逻辑:根据入参字符串生成 **5 Whys** 数组结构。 |
| **`src/services/`** | **`resourceService.js`** | 本地文件系统交互:读取本地知识库(如 Obsidian或指定目录文档。 |
| **`.vscode/`** | **`launch.json`** | 极其关键:配置 Node.js 的 `--inspect` 端口,实现基于 Cherry Studio 唤起时的断点联调。 |
### 3.2 系统模块架构说明
*图1-1提示词策略 MCP Server 系统组件工作流架构图*
*图 1-2Sprint 1 组件架构与数据流*
![提示词策略工作流](./../../../../docs/assets/images/prompt-strategy-mcp-server-prototype-architecture.svg)
![Sprint1组件架构图](./../../../../docs/assets/images/arabica-srpint1-architecture-design.svg)
Sprint 1 系统组件架构基于 MCP 协议构建了一个轻量级的提示词策略服务器。
基于 Cherry Studio 和 MCP (Model Context Protocol) 架构的工作流分为七个关键步骤
核心组件包括
- `app.js` 作为主入口,负责初始化 `McpServer` 实例并配置 `stdio` 传输层向客户端Cherry Studio注册 `generate_5_whys` 工具;
- `controllers/promptsController.js` 接收并路由工具调用请求;
- `services/promptService.js` 实现本地业务逻辑,根据用户查询自动生成 5 Whys 逐层追问列表;
- `models/schemas.js` 基于 Zod 进行参数校验。
1. **用户发起提问**用户首先在前端Cherry Studio输入自己的问题或查询需求
2. **大模型决策调用工具**Cherry Studio 作为 MCP 客户端,接收到用户提问后,其连接的大模型会对问题进行分析,并判断出需要调用系统注册的外部工具(如 5 Whys 分析法)来获取更好的提示词策略,而不是直接回答。
3. **发起工具调用请求 tools/call**Cherry Studio 通过标准输入输出流(`stdio`)协议,向后端的 Project Caffeine MCP Server基于 Node.js 构建)发送一个名为 `generate_5_whys` 的工具调用指令。
4. **本地生成 5 Whys 文本**Project Caffeine MCP Server 接收到指令后,触发其内部的业务逻辑模块 `promptService.js`。该模块完全在本地运行,不依赖外部大模型,根据用户的初始问题自动生成 5 个逐层深入的追问(即 5 Whys 文本)。
5. **返回工具执行结果**MCP Server 将生成的 5 Whys 文本打包成标准的结果格式,通过协议传回给 Cherry Studio。
6. **结合工具结果发起最终推理**Cherry Studio 拿到这 5 个问题后,将其作为增强的上下文提示词,再次向大语言模型发起最终的深度推理请求,要求模型基于这些追问给出详尽的分析。
7. **渲染并呈现结果**大模型完成最终推理后Cherry Studio 将这部分内容进行界面渲染,最终向用户呈现一份高质量的“深度洞察报告”。
简单来说,这是一个“用户提问 -> 客户端大模型决定求助 -> 本地服务端生成分析框架 -> 客户端大模型根据框架给出深度回答”的完整闭环。
整个服务不依赖外部大模型,完全在本地运行,通过标准输入输出与客户端通信,形成“用户提问 → 客户端大模型决策 → 服务端生成框架 → 客户端大模型深度推理”的闭环工作流。该架构为后续扩展更多思维框架和资源访问奠定了坚实基础
---

View File

@@ -18,7 +18,7 @@ license: "CC BY-SA 4.0"
status: "Active"
---
-->
# Project Caffeine Sprint1版本开发指南
# Arabica Sprint1 版本开发指南说明
## 1. 环境前置要求

View File

@@ -0,0 +1,285 @@
<!--
---
title: Arabica Sprint12系统架构设计说明
description: Project Caffeine 提示词策略 MCP Server Sprint 2 架构设计,聚焦于 MCP Prompts 原语接入、多维思维框架组装及底层角色矩阵设计。
version: v1.0.0 (Arabica) - Sprint 2
author: Gitconomy Research-郭晧
date: 2026-03-05
type: Architecture Design
file: project-caffeine-mvp-sprint2-architecture-design.md
tags:
- Project Caffeine
- MCP Server
- Sprint 2
- Prompt Strategy
- Prompts
- Node.js
license: CC BY-SA 4.0
status: Active
---
-->
# Arabica Sprint2 系统架构设计说明
## 1. Sprint2 设计概述
**Sprint 1** 实现了基于 **5 Whys** 的单一思维框架工具调用,验证了 MCP 协议下本地策略服务与大模型协同的可行性。
**Sprint 2** 的核心目标是将提示词策略 ServerS2从“单点工具”升级为“多维思维框架引擎”通过引入 MCP 的 **Prompts 原语**将多种经典思维框架5W3H、SCQA、SWOT、PESTLE 等)作为可复用的模板暴露给大模型,并开发意图拆解工具,使系统能够自动将用户模糊的自然语言查询拆解为专业检索词,从而大幅提升研究的广度与深度。
**关键功能**
- **Prompts 原语接入**:实现 `prompts/list``prompts/get` 接口向客户端Cherry Studio注册多个静态思维框架模板。
- **多维思维框架库**:内置 5W3H、SCQA、SWOT、PESTLE 等框架,每个框架包含结构化提示词模板。
- **意图拆解工具**:开发 `generate_search_queries` 工具,将用户原始查询拆解为 3~5 个专业检索词用于后续文献检索Sprint 3
- **角色矩阵与输出规范**:设计多智能体角色矩阵雏形,并在提示词中通过 Few-Shot 示例约束输出格式(如强制 Markdown 结构)。
---
## 2. 功能实现步骤说明
典型用户查询流程(参见图 2-1
```mermaid
sequenceDiagram
participant User as 用户
participant Client as Cherry Studio (MCP Client)
participant LLM as 大模型
participant S2 as 提示词策略 Server (S2)
User->>Client: 输入查询Q
Client->>LLM: 传递查询Q
LLM->>Client: 决策需要思维框架
Client->>S2: prompts/get (框架=SCQA)
S2-->>Client: 返回SCQA模板
Client->>LLM: 组合模板+Q请求推理
LLM->>Client: 需要检索词,调用工具
Client->>S2: tools/call (generate_search_queries, query=Q)
S2->>S2: 意图拆解逻辑
S2-->>Client: 返回检索词列表
Client->>LLM: 提供检索词,继续推理
LLM-->>Client: 生成深度报告
Client-->>User: 展示结果
```
1. **用户输入自然语言查询**(如“分析新能源汽车行业竞争格局”)。
2. **Cherry Studio 内大模型决策**:判断需要调用多维思维框架辅助分析。
3. **客户端发起 `prompts/get` 请求**:选择合适的思维框架(例如 SCQA获取模板内容。
4. **客户端组合提示词**:将模板与用户查询结合,形成增强提示词。
5. **大模型初步推理**:可能识别出需要更专业的检索词,于是调用 `generate_search_queries` 工具。
6. **服务端执行意图拆解**`intentService` 根据查询生成检索词列表。
7. **工具结果返回**:客户端获得检索词,可结合文献查询 ServerSprint 3进行下一步检索。
8. **最终推理与输出**:大模型利用框架模板和检索结果生成结构化深度报告。
---
## 3. 系统组件架构设计
### 3.1 项目结构更新(基于 Sprint 1
```markdown
project-caffeine/
├── src/
│ ├── controllers/
│ │ ├── promptsController.js # 处理 prompts/list 和 prompts/get
│ │ ├── toolsController.js # 处理工具调用含原有5Whys+新增意图拆解)
│ │ └── resourcesController.js # 保留Sprint3扩展
│ ├── services/
│ │ ├── promptService.js # 升级:管理多框架模板库,根据框架名返回结构化提示词
│ │ ├── intentService.js # 新增:意图拆解逻辑,生成检索词
│ │ └── resourceService.js # (保留)
│ ├── models/
│ │ ├── schemas.js # Zod校验新增prompts参数校验
│ │ └── frameworks/ # 思维框架定义目录
│ │ ├── 5w3h.json
│ │ ├── scqa.json
│ │ ├── swot.json
│ │ └── pestle.json
│ └── app.js # 主入口:注册 Prompts 和 Tools
├── .vscode/launch.json # 调试配置(不变)
├── config/config.js # 配置(可扩展框架路径)
└── package.json # 依赖(不变)
```
*表 2-1Sprint 2 新增/修改文件说明*
|文件/目录|类型|功能说明|
|---|---|---|
|`src/controllers/promptsController.js`|新增|处理 `prompts/list``prompts/get` 请求,调用 `promptService` 获取模板|
|`src/services/intentService.js`|新增|实现 `generate_search_queries` 工具的核心逻辑:基于规则或小模型将自然语言拆解为检索词|
|`src/models/frameworks/`|新增|存放各思维框架的 JSON 定义,包含名称、描述、模板内容、参数占位符等|
|`src/services/promptService.js`|修改|从静态文件加载框架库,提供 `listFrameworks()``getFramework(name, params)` 方法|
|`src/controllers/toolsController.js`|修改|增加对 `generate_search_queries` 的路由分发|
|`src/models/schemas.js`|修改|增加 `generate_search_queries` 的输入参数校验(如 `query` 字符串)|
### 3.2 系统模块架构图
*图 2-2Sprint 2 组件架构与数据流*
![Sprint2组件架构图](./../../../../docs/assets/images/arabica-srpint2-architecture-design.svg)
Sprint 2 系统组件架构在 Sprint 1 的基础上,将提示词策略 ServerS2从单一工具升级为多维思维框架引擎。核心组件包括
- 控制器层:新增 promptsController.js 专门处理 MCP Prompts 原语prompts/list 和 prompts/gettoolsController.js 扩展支持 generate_search_queries 工具调用。
- 服务层promptService.js 升级为多框架管理器,从 models/frameworks/ 目录加载 JSON 定义的思维模板5W3H、SCQA、SWOT、PESTLE 等);新增 intentService.js 实现意图拆解逻辑,将自然语言查询转化为专业检索词。
- 模型层schemas.js 增加 Prompts 参数和意图拆解工具的 Zod 校验frameworks/ 目录以 JSON 形式存放各框架的元数据、模板内容和角色定义。
- 主入口app.js 同时注册 Prompts 和 Tools 能力,通过 stdio 与客户端通信。
该架构的核心数据链路分为四步:客户端通过 prompts/get 获取匹配的思维框架模板;服务端返回结构化提示词;大模型在推理中可调用 generate_search_queries 获取检索词;最终通过模板内嵌的系统消息(含角色矩阵和 Few-Shot 示例约束输出格式生成符合规范的深度报告。这一设计为后续文献检索Sprint 3和递归深度研究奠定了坚实的“大脑”基础。
---
## 4. MCP 标准通信接口设计
### 4.1 Prompts 原语
**`prompts/list` 响应示例**
向客户端声明可用的思维框架列表:
```json
{
"prompts": [
{
"name": "5w3h",
"description": "5W3H 分析法:从 What、Why、Who、When、Where、How、How much、How feel 八个维度拆解问题",
"arguments": [
{
"name": "topic",
"description": "需要分析的主题",
"required": true
}
]
},
{
"name": "scqa",
"description": "SCQA 架构Situation、Complication、Question、Answer适用于问题分析与方案构建",
"arguments": [
{
"name": "situation",
"description": "背景描述",
"required": true
}
]
},
{
"name": "swot",
"description": "SWOT 分析Strengths、Weaknesses、Opportunities、Threats",
"arguments": [
{
"name": "entity",
"description": "分析对象(企业、项目等)",
"required": true
}
]
},
{
"name": "pestle",
"description": "PESTLE 宏观环境分析Political、Economic、Social、Technological、Legal、Environmental",
"arguments": [
{
"name": "domain",
"description": "行业或领域",
"required": true
}
]
}
]
}
```
**`prompts/get` 请求与响应示例**
客户端请求 `scqa` 框架,并提供参数:
```json
// 请求
{
"name": "scqa",
"arguments": {
"situation": "新能源汽车行业竞争日益激烈"
}
}
// 响应
{
"description": "SCQA 分析框架",
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "请使用 SCQA 架构分析以下情境:\n情境 (Situation):新能源汽车行业竞争日益激烈。\n\n请依次构建\n1. 复杂化 (Complication):指出情境中存在的矛盾或挑战。\n2. 问题 (Question):基于复杂化提炼出核心问题。\n3. 答案 (Answer):提出解决问题的初步方案或分析路径。\n\n输出格式要求使用 Markdown 标题分节,每个部分至少 200 字。"
}
}
]
}
```
### 4.2 新增 Tool`generate_search_queries`
**工具声明 (`tools/list` 追加)**
```json
{
"name": "generate_search_queries",
"description": "将用户的自然语言查询拆解为 3-5 个专业的学术检索词,用于后续文献检索",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "用户的原始查询语句,例如:新能源汽车电池回收技术难点"
}
},
"required": ["query"]
}
}
```
**工具调用响应 (`tools/call`)**
```json
// 请求参数
{
"query": "新能源汽车电池回收技术难点"
}
// 响应
{
"content": [
{
"type": "text",
"text": "[\"动力电池梯次利用技术\", \"废旧锂离子电池回收工艺\", \"电池拆解自动化\", \"有价金属提取效率\", \"环保法规与回收成本\"]"
}
]
}
```
### 4.3 角色矩阵与输出规范(内置于 Prompt 模板)
在每个思维框架的模板中通过系统消息System Prompt注入角色定义和输出格式要求。例如在 SWOT 模板中:
```json
{
"role": "system",
"content": {
"type": "text",
"text": "你是一位资深的战略分析顾问,擅长使用 SWOT 框架进行竞争态势分析。请严格按照以下结构输出 Markdown 报告:\n# SWOT 分析报告:{entity}\n## 1. 优势 (Strengths)\n- 内部积极因素...\n## 2. 劣势 (Weaknesses)\n- 内部消极因素...\n## 3. 机会 (Opportunities)\n- 外部积极因素...\n## 4. 威胁 (Threats)\n- 外部消极因素...\n\n每个要点必须附上简要论证报告总字数不低于 800 字。"
}
}
```
---
## 5. 总结
Sprint 2 通过接入 MCP `Prompts` 原语,扩展了系统的多维思维框架,为大模型提供了结构化的推理模板。通过拆解用户意图,系统能够更高效地生成标准化的响应内容,推动开源协作流程的自动化与优化。随着 Sprint 2 的完成,系统将在后续迭代中逐步完善与扩展,推动开源项目管理和协作效率的提升。
---
## 许可声明
本文档采用 **知识共享署名--相同方式共享 4.0 国际许可协议 (CC BY--SA 4.0)** 进行许可,© 2025-2026 Gitconomy Research.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,117 @@
<!--
---
title: "Project Caffeine - Arabica Sprint1 QuickStart"
description: "Project Caffeine Arabica Sprint1 的快速启动指南,涵盖基于 MCP stdio 架构的零网络开销部署、Obsidian 本地知识库接入、5 Whys 策略引擎配置及 Cherry Studio 客户端联调全流程。"
version: "1.0.0"
author: "Gitconomy Research郭晧"
date: "2026-03-01"
type: "README / QuickStart"
tags:
- Project Caffeine
- MCP
- stdio
- Obsidian
- QuickStart
- Cherry Studio
license: "CC BY-SA 4.0"
---
-->
# Project Caffeine - Arabica Sprint1 QuickStart
## 1. Sprint1 `0.1.0` 版本核心特性
- **零网络开销通信**:作为本地集成版本,本系统采用 `stdio` 传输协议,利用同一台机器上本地进程间的 stdin 和 stdout 管道进行直接通信,实现零网络传输开销。
- **本地知识图谱接入**:无缝对接 Obsidia个人知识管理软件让大模型能够直接读取你的本地知识库。
- **内置 5 Whys 策略引擎**引入经典的“5 Whys”思维框架挂载强制约束大模型的思考路径辅助其将模糊想法拆解为高精度的追问。
- **沙箱隔离级安全防御**:默认将 AI 生成的指令视为不可信负载,通过底层机制阻断越权访问和路径遍历漏洞,确保本地文件系统的绝对安全。
---
## 2. 克隆仓库与获取分支代码
**📌 重要说明**Sprint 的迭代代码不会直接合并到`master` 分支。为了获取 Sprint1 的完整代码,你需要在克隆时指定对应的特性分支 (`feature/arabica-sprint-1`)
```bash
# 直接克隆指定的 feature 分支
git clone -b feature-arabica-sprint-1 https://gitlink.org.cn/Gitconomy/Project-Caffeine.git
# 进入 Sprint1 的独立工作目录
cd Project-Caffeine/projects/arabica/sprint1
# 安装 Node.js 项目依赖
npm install
```
---
## 3. 环境与路径配置
为了让系统准确挂载你的知识库,请打开 `src/services/resourceService.ts`,将 `OBSIDIAN_VAULT_PATH` 变量修改为你本机实际的 Markdown 文件夹绝对路径。
## 4. 编译与工作流说明
项目采用 TypeScript 开发,底层依靠 Node.js 运行,因此必须先将 `.ts` 源码编译为 `.js` 文件。Sprint1的项目目录已经包含编译过的 `.js` 文件(/dist目录),可以直接快速测试运行。
**⚠️ 极其重要的运行说明 (必读)**
基于 MCP 的 `stdio` 架构特性,本程序**不需要**你手动启动独立的后台服务。请根据你的使用场景选择工作流:
- **🟢 日常使用 (生产模式)**
你**不需要**在终端里输入 `npm run start`。只要确保 `dist/app.js` 文件存在,当你在 Cherry Studio 或 Claude Desktop 等客户端中配置好绝对路径并打开开关时,客户端会在系统后台自动唤起并接管这个 Node 进程。
- **🛠️ 开发与调试 (实时监听模式)**
如果你正在修改源码,并希望配合 VS Code 进行断点联调,请在终端中保持运行以下命令:
_(此命令会在后台实时监控代码改动。当你按 `Ctrl+S` 保存代码后,只需在 Cherry Studio 中将 Server 开关关闭再打开,即可瞬间应用最新的代码逻辑!)_
---
## 5. Sprint1 暴露的工具 (Tools)
本服务端向支持 MCP 的 LLM 暴露了以下 3 个核心工具,赋予其检索本地数据与优化提示词的主动权:
- **`list_local_notes`**: 扫描本地知识库目录,返回所有 `.md` 格式的文献与笔记列表,帮助大模型确立探索边界。
- **`read_local_note`**: 深度读取指定 Markdown 文件的原文,将本地知识库的物理边界转化为大模型内存中的上下文。
- **`generate_5_whys`**: 针对用户宽泛的研究主题,强制模型连续追问五次“为什么”,层层递进剥离问题的表象,寻找最底层的学术痛点。
## 6. Sprint1 暴露的资源 (Resources)
资源Resources作为被动的静态上下文信息数据源供客户端 UI 直接发现与提取:
- **`obsidian-index`** (`obsidian://vault/index`): 向客户端暴露本地知识库的完整目录索引数据。
---
## 7. 客户端接入联调 (以 Cherry Studio 为例)
Sprint1 采用纯本地 `stdio` 架构,推荐使用 VS Code 配合客户端进行源码级联调:
1. 打开 Cherry Studio进入 **设置 -> MCP**
2. 添加一个新的 Server 配置:
- **名称**: `ProjectCaffeine-Sprint1`
- **Command**: `node`
- **Args**: `["--inspect=9229", "/你的实际克隆路径/Project-Caffeine/projects/arabica/sprint1/dist/app.js"]` _(⚠️ 必须为编译后的 js 文件绝对路径,且 `--inspect` 需放在首位以开启调试)_
3. 保存后确认状态灯变为绿色。
4. 返回 VS Code在侧边栏“运行和调试”中执行附加 (Attach),即可对大模型发起的每一次工具调用进行完美断点拦截。
---
## 8. Sprint1 文档
- Sprint1 [设计文档](./docs/arabica-sprint1-architecture-specification.md)
- Sprint1 [开发文档](./docs/arabica-sprint1-development-specification.md)
---
## 许可声明
本文档采用 **知识共享署名--相同方式共享 4.0 国际许可协议 (CC BY--SA 4.0)** 进行许可,© 2025-2026 Gitconomy Research.

Some files were not shown because too many files have changed in this diff Show More