docs(update):更新Arabica Sprint3 相关文档
Signed-off-by: gzkoala <guohao@gitconomy.org>
This commit is contained in:
@@ -151,6 +151,12 @@ server.tool(
|
||||
);
|
||||
```
|
||||
|
||||
关键解析:
|
||||
|
||||
- 放宽类型校验 (z.any()):大语言模型在生成包含大量 Markdown 语法的长篇报告时,极易因未闭合的引号或换行符导致底层的 JSON RPC 解析崩溃(AI_JSONParseError)。将其由严格的 z.string() 放宽为 z.any(),使得系统允许大模型即使错误地传入了一个嵌套 JSON 对象,也能顺利进入 Controller 层。
|
||||
|
||||
- 字面量断言 (as const):MCP SDK 在强类型下强制要求返回的 content 数组内元素 type 必须为特指的字面量 "text",使用 as const 断言完美消除了 TypeScript 宽泛类型推断带来的编译时报错。
|
||||
|
||||
## 3.2 控制层 (`toolsController.ts`)
|
||||
|
||||
#### 3.2.1 模块职责与设计目标
|
||||
@@ -208,21 +214,15 @@ async function handleFetchFramework(params: any) {
|
||||
}
|
||||
```
|
||||
|
||||
关键解析:
|
||||
|
||||
- JSON 外壳剥离:如果直接将带有 {{variable}} 等变量占位符和嵌套结构的原始 JSON 返回给大模型,模型极大概率会产生“幻觉”,认为这是需要它进一步填空后重新发起请求的数据结构。提取内部纯文本能够大幅降低模型的理解成本。
|
||||
|
||||
- 强制刹车指令 (🛑 立即停止...):这是解决大模型陷入“工具无限死循环”的核心护城河。通过在返回文本首部注入最高优先级的底层指令,能够强制打断其内部的 Tool-Call 冲动,迫使其状态机切回文本生成模式。
|
||||
|
||||
##### 3.2.2.2 `handleSaveNote` (兜底序列化)
|
||||
|
||||
1. **逻辑流程图**
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["接收参"] --> B{"typeof content === string?"}
|
||||
B -- 是 --> C["直接将 content 传给 resourceService"]
|
||||
B -- 否("是个对象") --> D["执行"]
|
||||
D --> C
|
||||
C --> E["写入 Markdown 文件"]
|
||||
E --> F["返回操作成功"]
|
||||
```
|
||||
|
||||
2. **核心代码**
|
||||
**核心代码**
|
||||
|
||||
```typescript
|
||||
async function handleSaveNote(params: any) {
|
||||
@@ -244,6 +244,12 @@ async function handleSaveNote(params: any) {
|
||||
}
|
||||
```
|
||||
|
||||
关键解析:
|
||||
|
||||
- 隐式类型转换(兜底机制):完美承接了接入层中放开的 z.any() 校验。当大模型发生幻觉,自作主张地将整篇分析报告包装成了类似 { "title": "...", "data": "..." } 的对象传入时,这段底层逻辑会悄无声息地帮它执行 JSON.stringify(..., null, 2),完成序列化。
|
||||
|
||||
- 业务平滑流转:通过这种代码层的宽容处理,避免了仅仅因为一个参数类型错误就让模型前序耗费大量 Token 思考和生成的长篇内容全部作废,极大提升了工程鲁棒性。
|
||||
|
||||
## 3.3 服务层 (`arxivService.ts`)
|
||||
|
||||
#### 3.3.1 模块职责
|
||||
|
||||
Reference in New Issue
Block a user