knight-agent 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Host.d.ts +23 -0
- package/Host.d.ts.map +1 -0
- package/Host.js +23 -0
- package/Host.js.map +1 -0
- package/base/AbstractAgent.d.ts +100 -0
- package/base/AbstractAgent.d.ts.map +1 -0
- package/base/AbstractAgent.js +23 -0
- package/base/AbstractAgent.js.map +1 -0
- package/base/AbstractDialog.d.ts +54 -0
- package/base/AbstractDialog.d.ts.map +1 -0
- package/base/AbstractDialog.js +86 -0
- package/base/AbstractDialog.js.map +1 -0
- package/base/AbstractModule.d.ts +7 -0
- package/base/AbstractModule.d.ts.map +1 -0
- package/base/AbstractModule.js +13 -0
- package/base/AbstractModule.js.map +1 -0
- package/base/AbstractObject.d.ts +18 -0
- package/base/AbstractObject.d.ts.map +1 -0
- package/base/AbstractObject.js +25 -0
- package/base/AbstractObject.js.map +1 -0
- package/base/AbstractReason.d.ts +44 -0
- package/base/AbstractReason.d.ts.map +1 -0
- package/base/AbstractReason.js +23 -0
- package/base/AbstractReason.js.map +1 -0
- package/base/AbstractSkill.d.ts +25 -0
- package/base/AbstractSkill.d.ts.map +1 -0
- package/base/AbstractSkill.js +3 -0
- package/base/AbstractSkill.js.map +1 -0
- package/base/AbstractTool.d.ts +34 -0
- package/base/AbstractTool.d.ts.map +1 -0
- package/base/AbstractTool.js +3 -0
- package/base/AbstractTool.js.map +1 -0
- package/base/index.d.ts +8 -0
- package/base/index.d.ts.map +1 -0
- package/base/index.js +24 -0
- package/base/index.js.map +1 -0
- package/docs/ARCHITECTURE.md +601 -0
- package/docs/README.md +562 -0
- package/index.d.ts +4 -0
- package/index.d.ts.map +1 -0
- package/index.js +25 -0
- package/index.js.map +1 -0
- package/module/AgentModule/Agent.d.ts +55 -0
- package/module/AgentModule/Agent.d.ts.map +1 -0
- package/module/AgentModule/Agent.js +210 -0
- package/module/AgentModule/Agent.js.map +1 -0
- package/module/AgentModule/AgentModule.d.ts +26 -0
- package/module/AgentModule/AgentModule.d.ts.map +1 -0
- package/module/AgentModule/AgentModule.js +66 -0
- package/module/AgentModule/AgentModule.js.map +1 -0
- package/module/AgentModule/Memory.d.ts +55 -0
- package/module/AgentModule/Memory.d.ts.map +1 -0
- package/module/AgentModule/Memory.js +288 -0
- package/module/AgentModule/Memory.js.map +1 -0
- package/module/AgentModule/index.d.ts +2 -0
- package/module/AgentModule/index.d.ts.map +1 -0
- package/module/AgentModule/index.js +18 -0
- package/module/AgentModule/index.js.map +1 -0
- package/module/DialogModule/Dialog.d.ts +14 -0
- package/module/DialogModule/Dialog.d.ts.map +1 -0
- package/module/DialogModule/Dialog.js +27 -0
- package/module/DialogModule/Dialog.js.map +1 -0
- package/module/DialogModule/DialogModule.d.ts +39 -0
- package/module/DialogModule/DialogModule.d.ts.map +1 -0
- package/module/DialogModule/DialogModule.js +118 -0
- package/module/DialogModule/DialogModule.js.map +1 -0
- package/module/DialogModule/index.d.ts +3 -0
- package/module/DialogModule/index.d.ts.map +1 -0
- package/module/DialogModule/index.js +19 -0
- package/module/DialogModule/index.js.map +1 -0
- package/module/ReasonModule/ChainReason.d.ts +11 -0
- package/module/ReasonModule/ChainReason.d.ts.map +1 -0
- package/module/ReasonModule/ChainReason.js +34 -0
- package/module/ReasonModule/ChainReason.js.map +1 -0
- package/module/ReasonModule/CommanderReason.d.ts +15 -0
- package/module/ReasonModule/CommanderReason.d.ts.map +1 -0
- package/module/ReasonModule/CommanderReason.js +151 -0
- package/module/ReasonModule/CommanderReason.js.map +1 -0
- package/module/ReasonModule/CompetitiveReason.d.ts +13 -0
- package/module/ReasonModule/CompetitiveReason.d.ts.map +1 -0
- package/module/ReasonModule/CompetitiveReason.js +133 -0
- package/module/ReasonModule/CompetitiveReason.js.map +1 -0
- package/module/ReasonModule/PlanReason.d.ts +25 -0
- package/module/ReasonModule/PlanReason.d.ts.map +1 -0
- package/module/ReasonModule/PlanReason.js +133 -0
- package/module/ReasonModule/PlanReason.js.map +1 -0
- package/module/ReasonModule/ReasonModule.d.ts +41 -0
- package/module/ReasonModule/ReasonModule.d.ts.map +1 -0
- package/module/ReasonModule/ReasonModule.js +83 -0
- package/module/ReasonModule/ReasonModule.js.map +1 -0
- package/module/ReasonModule/ReflectReason.d.ts +15 -0
- package/module/ReasonModule/ReflectReason.d.ts.map +1 -0
- package/module/ReasonModule/ReflectReason.js +86 -0
- package/module/ReasonModule/ReflectReason.js.map +1 -0
- package/module/ReasonModule/TreeReason.d.ts +16 -0
- package/module/ReasonModule/TreeReason.d.ts.map +1 -0
- package/module/ReasonModule/TreeReason.js +139 -0
- package/module/ReasonModule/TreeReason.js.map +1 -0
- package/module/ReasonModule/index.d.ts +8 -0
- package/module/ReasonModule/index.d.ts.map +1 -0
- package/module/ReasonModule/index.js +24 -0
- package/module/ReasonModule/index.js.map +1 -0
- package/module/SkillModule/SkillModule.d.ts +42 -0
- package/module/SkillModule/SkillModule.d.ts.map +1 -0
- package/module/SkillModule/SkillModule.js +134 -0
- package/module/SkillModule/SkillModule.js.map +1 -0
- package/module/SkillModule/index.d.ts +2 -0
- package/module/SkillModule/index.d.ts.map +1 -0
- package/module/SkillModule/index.js +18 -0
- package/module/SkillModule/index.js.map +1 -0
- package/module/ToolModule/ToolModule.d.ts +57 -0
- package/module/ToolModule/ToolModule.d.ts.map +1 -0
- package/module/ToolModule/ToolModule.js +220 -0
- package/module/ToolModule/ToolModule.js.map +1 -0
- package/module/ToolModule/ToolRAG.d.ts +38 -0
- package/module/ToolModule/ToolRAG.d.ts.map +1 -0
- package/module/ToolModule/ToolRAG.js +124 -0
- package/module/ToolModule/ToolRAG.js.map +1 -0
- package/module/ToolModule/index.d.ts +3 -0
- package/module/ToolModule/index.d.ts.map +1 -0
- package/module/ToolModule/index.js +19 -0
- package/module/ToolModule/index.js.map +1 -0
- package/module/index.d.ts +6 -0
- package/module/index.d.ts.map +1 -0
- package/module/index.js +22 -0
- package/module/index.js.map +1 -0
- package/package.json +19 -0
- package/utility/InterfaceUtility.d.ts +14 -0
- package/utility/InterfaceUtility.d.ts.map +1 -0
- package/utility/InterfaceUtility.js +3 -0
- package/utility/InterfaceUtility.js.map +1 -0
- package/utility/LogUtility.d.ts +41 -0
- package/utility/LogUtility.d.ts.map +1 -0
- package/utility/LogUtility.js +70 -0
- package/utility/LogUtility.js.map +1 -0
- package/utility/NetworkUtility.d.ts +91 -0
- package/utility/NetworkUtility.d.ts.map +1 -0
- package/utility/NetworkUtility.js +104 -0
- package/utility/NetworkUtility.js.map +1 -0
- package/utility/ObjectUtility.d.ts +134 -0
- package/utility/ObjectUtility.d.ts.map +1 -0
- package/utility/ObjectUtility.js +313 -0
- package/utility/ObjectUtility.js.map +1 -0
- package/utility/OpenAIUtility.d.ts +333 -0
- package/utility/OpenAIUtility.d.ts.map +1 -0
- package/utility/OpenAIUtility.js +95 -0
- package/utility/OpenAIUtility.js.map +1 -0
- package/utility/PromiseUtility.d.ts +9 -0
- package/utility/PromiseUtility.d.ts.map +1 -0
- package/utility/PromiseUtility.js +16 -0
- package/utility/PromiseUtility.js.map +1 -0
- package/utility/StringUtility.d.ts +10 -0
- package/utility/StringUtility.d.ts.map +1 -0
- package/utility/StringUtility.js +42 -0
- package/utility/StringUtility.js.map +1 -0
- package/utility/TimeUtility.d.ts +10 -0
- package/utility/TimeUtility.d.ts.map +1 -0
- package/utility/TimeUtility.js +24 -0
- package/utility/TimeUtility.js.map +1 -0
- package/utility/index.d.ts +9 -0
- package/utility/index.d.ts.map +1 -0
- package/utility/index.js +25 -0
- package/utility/index.js.map +1 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TreeReason = void 0;
|
|
4
|
+
const base_1 = require("../../base");
|
|
5
|
+
/**
|
|
6
|
+
* 思维树推理策略 (Tree of Thoughts)
|
|
7
|
+
* 生成多个候选方案 → 评估择优 → 展开最佳方案
|
|
8
|
+
* 适合:方案设计、多方案对比、需要多角度探索的开放问题
|
|
9
|
+
* 策略内部自行创建/管理一个 Agent 贯穿全流程
|
|
10
|
+
*/
|
|
11
|
+
class TreeReason extends base_1.AbstractReason {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.type = "TreeReason";
|
|
15
|
+
/** 候选分支数 */
|
|
16
|
+
this._branches = 3;
|
|
17
|
+
}
|
|
18
|
+
async execute(input, config) {
|
|
19
|
+
const agent = config.useAgent ?? this.host.agentModule.createAgent(config.baseConfig);
|
|
20
|
+
const runOptions = this.buildRunOptions(config);
|
|
21
|
+
try {
|
|
22
|
+
const trace = [];
|
|
23
|
+
// Phase 1: 生成多个候选方案
|
|
24
|
+
trace.push("[ToT Phase 1] 生成候选方案");
|
|
25
|
+
const genResult = await agent.run(`请针对以下问题,生成 ${this._branches} 个不同的解决方案。\n\n` +
|
|
26
|
+
`问题: ${input}\n\n` +
|
|
27
|
+
`请严格按以下格式输出:\n` +
|
|
28
|
+
`\`\`\`\n` +
|
|
29
|
+
`【方案 1】\n` +
|
|
30
|
+
`思路: (简要说明核心思路)\n` +
|
|
31
|
+
`方案: (详细方案)\n` +
|
|
32
|
+
`优劣: (优点和缺点)\n\n` +
|
|
33
|
+
`【方案 2】\n` +
|
|
34
|
+
`...\n` +
|
|
35
|
+
`\`\`\`\n\n` +
|
|
36
|
+
`要求:\n` +
|
|
37
|
+
`1. 每个方案应有不同的切入角度\n` +
|
|
38
|
+
`2. 每个方案应具体、可操作\n` +
|
|
39
|
+
`3. 客观分析各方案的优劣`, runOptions);
|
|
40
|
+
if (!genResult.success) {
|
|
41
|
+
return { ...genResult, strategy: this.type, trace };
|
|
42
|
+
}
|
|
43
|
+
const candidates = this._parseCandidates(genResult.content);
|
|
44
|
+
if (candidates.length === 0) {
|
|
45
|
+
trace.push("候选方案解析失败,降级为直接执行");
|
|
46
|
+
const fallback = await agent.run(`请直接回答: ${input}`, runOptions);
|
|
47
|
+
return { ...fallback, strategy: this.type, trace };
|
|
48
|
+
}
|
|
49
|
+
trace.push(`生成 ${candidates.length} 个候选方案`);
|
|
50
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
51
|
+
trace.push(` 候选 ${i + 1}: ${candidates[i].summary}`);
|
|
52
|
+
}
|
|
53
|
+
// Phase 2: 评估并选择最佳方案
|
|
54
|
+
trace.push("[ToT Phase 2] 评估候选方案");
|
|
55
|
+
const evalPrompt = `以下是针对问题「${input}」的 ${candidates.length} 个候选方案:\n\n` +
|
|
56
|
+
candidates.map((c, i) => `【候选 ${i + 1}】\n${c.full}\n`).join("---\n\n") +
|
|
57
|
+
`\n请完成以下评估:\n` +
|
|
58
|
+
`1. 对每个候选方案打分(1-10 分)并简要说明理由\n` +
|
|
59
|
+
`2. 选出最佳方案并说明为什么\n` +
|
|
60
|
+
`3. 对最佳方案提出改进建议\n\n` +
|
|
61
|
+
`请按以下格式输出:\n` +
|
|
62
|
+
`评分:\n` +
|
|
63
|
+
`- 候选 1: X分 - (理由)\n` +
|
|
64
|
+
`- 候选 2: X分 - (理由)\n` +
|
|
65
|
+
`...\n` +
|
|
66
|
+
`最佳方案: 候选 X\n` +
|
|
67
|
+
`改进建议: (具体建议)`;
|
|
68
|
+
const evalResult = await agent.run(evalPrompt, runOptions);
|
|
69
|
+
if (!evalResult.success) {
|
|
70
|
+
trace.push("评估失败,返回第一个候选方案");
|
|
71
|
+
return {
|
|
72
|
+
success: true,
|
|
73
|
+
content: candidates[0].full,
|
|
74
|
+
strategy: this.type,
|
|
75
|
+
trace,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
trace.push(`评估结果: ${evalResult.content.substring(0, 300)}`);
|
|
79
|
+
// 解析获胜方案编号
|
|
80
|
+
const winnerMatch = evalResult.content.match(/最佳方案[::]\s*候选\s*(\d+)/i);
|
|
81
|
+
const winnerIdx = winnerMatch
|
|
82
|
+
? Math.max(0, Math.min(parseInt(winnerMatch[1]) - 1, candidates.length - 1))
|
|
83
|
+
: 0;
|
|
84
|
+
// 提取改进建议
|
|
85
|
+
const improveMatch = evalResult.content.match(/改进建议[::]\s*([\s\S]*?)(?:\n\n|$)/i);
|
|
86
|
+
const improveSuggestion = improveMatch ? improveMatch[1].trim() : "";
|
|
87
|
+
trace.push(`选择候选 ${winnerIdx + 1},改进建议: ${improveSuggestion.substring(0, 200)}`);
|
|
88
|
+
// Phase 3: 基于改进建议,展开最佳方案
|
|
89
|
+
trace.push("[ToT Phase 3] 展开最佳方案");
|
|
90
|
+
const refinePrompt = improveSuggestion
|
|
91
|
+
? `请基于以下最佳方案和改进建议,输出最终的完整方案。\n\n` +
|
|
92
|
+
`最佳方案:\n${candidates[winnerIdx].full}\n\n` +
|
|
93
|
+
`改进建议:\n${improveSuggestion}\n\n` +
|
|
94
|
+
`要求: 整合改进建议,输出完整、可执行的最终方案。`
|
|
95
|
+
: `请将以下最佳方案展开为完整的最终输出:\n\n${candidates[winnerIdx].full}\n\n` +
|
|
96
|
+
`要求: 详细阐述,形成可执行的完整方案。`;
|
|
97
|
+
const finalResult = await agent.run(refinePrompt, runOptions);
|
|
98
|
+
if (!finalResult.success) {
|
|
99
|
+
return {
|
|
100
|
+
success: true,
|
|
101
|
+
content: candidates[winnerIdx].full,
|
|
102
|
+
strategy: this.type,
|
|
103
|
+
trace,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
...finalResult,
|
|
108
|
+
strategy: this.type,
|
|
109
|
+
trace,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
if (!config.useAgent) {
|
|
114
|
+
this.host.agentModule.destroyAgent(agent.id);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** 解析候选方案文本 */
|
|
119
|
+
_parseCandidates(text) {
|
|
120
|
+
const candidates = [];
|
|
121
|
+
// 按【方案 N】分割
|
|
122
|
+
const parts = text.split(/【方案\s*(\d+)】/);
|
|
123
|
+
// parts: ["", "1", "方案内容...", "2", "方案内容...", ...]
|
|
124
|
+
for (let i = 1; i < parts.length; i += 2) {
|
|
125
|
+
const full = parts[i + 1]?.trim();
|
|
126
|
+
if (!full || full.length < 10)
|
|
127
|
+
continue;
|
|
128
|
+
// 提取"思路:"作为摘要
|
|
129
|
+
const thoughtMatch = full.match(/思路[::]\s*(.+)/);
|
|
130
|
+
const summary = thoughtMatch
|
|
131
|
+
? thoughtMatch[1].substring(0, 80)
|
|
132
|
+
: full.substring(0, 80);
|
|
133
|
+
candidates.push({ summary, full });
|
|
134
|
+
}
|
|
135
|
+
return candidates;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.TreeReason = TreeReason;
|
|
139
|
+
//# sourceMappingURL=TreeReason.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeReason.js","sourceRoot":"","sources":["../../../src/module/ReasonModule/TreeReason.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./ReasonModule";
|
|
2
|
+
export * from "./ChainReason";
|
|
3
|
+
export * from "./ReflectReason";
|
|
4
|
+
export * from "./TreeReason";
|
|
5
|
+
export * from "./PlanReason";
|
|
6
|
+
export * from "./CompetitiveReason";
|
|
7
|
+
export * from "./CommanderReason";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/module/ReasonModule/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ReasonModule"), exports);
|
|
18
|
+
__exportStar(require("./ChainReason"), exports);
|
|
19
|
+
__exportStar(require("./ReflectReason"), exports);
|
|
20
|
+
__exportStar(require("./TreeReason"), exports);
|
|
21
|
+
__exportStar(require("./PlanReason"), exports);
|
|
22
|
+
__exportStar(require("./CompetitiveReason"), exports);
|
|
23
|
+
__exportStar(require("./CommanderReason"), exports);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/module/ReasonModule/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,gDAA8B;AAC9B,kDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B;AAC7B,sDAAoC;AACpC,oDAAkC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AbstractModule, ToolDefinition, Skill } from "../../base";
|
|
2
|
+
/** 技能管理模块 — 能力包注册 + 对话级启用/禁用 */
|
|
3
|
+
export declare class SkillModule extends AbstractModule {
|
|
4
|
+
/** 技能注册表 */
|
|
5
|
+
private readonly _skills;
|
|
6
|
+
/** 对话启用的技能(对话ID → 技能名集合) */
|
|
7
|
+
private readonly _dialogSkills;
|
|
8
|
+
constructor();
|
|
9
|
+
/** 已注册技能数量 */
|
|
10
|
+
get count(): number;
|
|
11
|
+
/** 注册技能 */
|
|
12
|
+
register(skill: Skill): this;
|
|
13
|
+
/** 批量注册 */
|
|
14
|
+
registerAll(skills: Array<Skill>): this;
|
|
15
|
+
/** 移除技能 */
|
|
16
|
+
unregister(name: string): boolean;
|
|
17
|
+
/** 获取技能定义 */
|
|
18
|
+
get(name: string): Skill | undefined;
|
|
19
|
+
/** 获取全部技能 */
|
|
20
|
+
list(): Array<Skill>;
|
|
21
|
+
/** 按分类获取 */
|
|
22
|
+
listByCategory(category: string): Array<Skill>;
|
|
23
|
+
/** 为对话启用技能 */
|
|
24
|
+
enable(dialogId: string, skillName: string): boolean;
|
|
25
|
+
/** 为对话禁用技能 */
|
|
26
|
+
disable(dialogId: string, skillName: string): void;
|
|
27
|
+
/** 获取对话启用的技能名列表 */
|
|
28
|
+
getEnabled(dialogId: string): Array<string>;
|
|
29
|
+
/**
|
|
30
|
+
* 解析对话可用的工具集合
|
|
31
|
+
* 遍历启用的技能,匹配工具名(支持 "ns/*" 通配),
|
|
32
|
+
* 从 ToolModule 中查找对应 ToolDefinition
|
|
33
|
+
*/
|
|
34
|
+
resolveTools(dialogId: string): Array<ToolDefinition>;
|
|
35
|
+
/**
|
|
36
|
+
* 聚合对话启用技能的系统提示
|
|
37
|
+
*/
|
|
38
|
+
buildPrompt(dialogId: string): string;
|
|
39
|
+
/** 清理对话的技能绑定 */
|
|
40
|
+
clearDialog(dialogId: string): void;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=SkillModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillModule.d.ts","sourceRoot":"","sources":["../../../src/module/SkillModule/SkillModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnE,gCAAgC;AAChC,qBAAa,WAAY,SAAQ,cAAc;IAE3C,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,4BAA4B;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;;IASzD,cAAc;IACd,IAAW,KAAK,IAAI,MAAM,CAA8B;IAIxD,WAAW;IACJ,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMnC,WAAW;IACJ,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IAM9C,WAAW;IACJ,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASxC,aAAa;IACN,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAK3C,aAAa;IACN,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;IAK3B,YAAY;IACL,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAOrD,cAAc;IACP,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAa3D,cAAc;IACP,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKzD,mBAAmB;IACZ,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAMlD;;;;OAIG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC;IA8C5D;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAe5C,gBAAgB;IACT,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAI7C"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SkillModule = void 0;
|
|
4
|
+
const base_1 = require("../../base");
|
|
5
|
+
/** 技能管理模块 — 能力包注册 + 对话级启用/禁用 */
|
|
6
|
+
class SkillModule extends base_1.AbstractModule {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
this._skills = new Map();
|
|
10
|
+
this._dialogSkills = new Map();
|
|
11
|
+
}
|
|
12
|
+
/** 已注册技能数量 */
|
|
13
|
+
get count() { return this._skills.size; }
|
|
14
|
+
// ======================== 技能注册 ========================
|
|
15
|
+
/** 注册技能 */
|
|
16
|
+
register(skill) {
|
|
17
|
+
this._skills.set(skill.name, skill);
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/** 批量注册 */
|
|
21
|
+
registerAll(skills) {
|
|
22
|
+
for (const s of skills) {
|
|
23
|
+
this.register(s);
|
|
24
|
+
}
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
/** 移除技能 */
|
|
28
|
+
unregister(name) {
|
|
29
|
+
for (const [, skills] of this._dialogSkills) {
|
|
30
|
+
skills.delete(name);
|
|
31
|
+
}
|
|
32
|
+
return this._skills.delete(name);
|
|
33
|
+
}
|
|
34
|
+
/** 获取技能定义 */
|
|
35
|
+
get(name) {
|
|
36
|
+
return this._skills.get(name);
|
|
37
|
+
}
|
|
38
|
+
/** 获取全部技能 */
|
|
39
|
+
list() {
|
|
40
|
+
return Array.from(this._skills.values());
|
|
41
|
+
}
|
|
42
|
+
/** 按分类获取 */
|
|
43
|
+
listByCategory(category) {
|
|
44
|
+
return this.list().filter(s => s.category === category);
|
|
45
|
+
}
|
|
46
|
+
// ======================== 对话级启用/禁用 ========================
|
|
47
|
+
/** 为对话启用技能 */
|
|
48
|
+
enable(dialogId, skillName) {
|
|
49
|
+
if (!this._skills.has(skillName)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
let skills = this._dialogSkills.get(dialogId);
|
|
53
|
+
if (!skills) {
|
|
54
|
+
skills = new Set();
|
|
55
|
+
this._dialogSkills.set(dialogId, skills);
|
|
56
|
+
}
|
|
57
|
+
skills.add(skillName);
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
/** 为对话禁用技能 */
|
|
61
|
+
disable(dialogId, skillName) {
|
|
62
|
+
this._dialogSkills.get(dialogId)?.delete(skillName);
|
|
63
|
+
}
|
|
64
|
+
/** 获取对话启用的技能名列表 */
|
|
65
|
+
getEnabled(dialogId) {
|
|
66
|
+
const skills = this._dialogSkills.get(dialogId);
|
|
67
|
+
return skills ? Array.from(skills) : [];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 解析对话可用的工具集合
|
|
71
|
+
* 遍历启用的技能,匹配工具名(支持 "ns/*" 通配),
|
|
72
|
+
* 从 ToolModule 中查找对应 ToolDefinition
|
|
73
|
+
*/
|
|
74
|
+
resolveTools(dialogId) {
|
|
75
|
+
const enabled = this.getEnabled(dialogId);
|
|
76
|
+
if (enabled.length === 0) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const toolNames = new Set();
|
|
80
|
+
const allTools = this.host.toolModule.list();
|
|
81
|
+
const toolMap = new Map();
|
|
82
|
+
for (const t of allTools) {
|
|
83
|
+
toolMap.set(t.name, t);
|
|
84
|
+
}
|
|
85
|
+
for (const skillName of enabled) {
|
|
86
|
+
const skill = this._skills.get(skillName);
|
|
87
|
+
if (!skill) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
for (const pattern of skill.tools) {
|
|
91
|
+
if (pattern.endsWith("/*")) {
|
|
92
|
+
// 通配: "pc/*" → 匹配 "pc/screenshot", "pc/clipboard", ...
|
|
93
|
+
const prefix = pattern.slice(0, -1);
|
|
94
|
+
for (const name of toolMap.keys()) {
|
|
95
|
+
if (name.startsWith(prefix)) {
|
|
96
|
+
toolNames.add(name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// 精确匹配
|
|
102
|
+
if (toolMap.has(pattern)) {
|
|
103
|
+
toolNames.add(pattern);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return Array.from(toolNames).map(n => toolMap.get(n)).filter(Boolean);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 聚合对话启用技能的系统提示
|
|
112
|
+
*/
|
|
113
|
+
buildPrompt(dialogId) {
|
|
114
|
+
const enabled = this.getEnabled(dialogId);
|
|
115
|
+
if (enabled.length === 0) {
|
|
116
|
+
return "";
|
|
117
|
+
}
|
|
118
|
+
const parts = [];
|
|
119
|
+
for (const skillName of enabled) {
|
|
120
|
+
const skill = this._skills.get(skillName);
|
|
121
|
+
if (!skill?.systemPrompt) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
parts.push(`[${skillName}]: ${skill.systemPrompt}`);
|
|
125
|
+
}
|
|
126
|
+
return parts.join("\n");
|
|
127
|
+
}
|
|
128
|
+
/** 清理对话的技能绑定 */
|
|
129
|
+
clearDialog(dialogId) {
|
|
130
|
+
this._dialogSkills.delete(dialogId);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.SkillModule = SkillModule;
|
|
134
|
+
//# sourceMappingURL=SkillModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillModule.js","sourceRoot":"","sources":["../../../src/module/SkillModule/SkillModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/module/SkillModule/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./SkillModule"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/module/SkillModule/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AbstractModule, ToolDefinition, ToolContext } from "../../base";
|
|
2
|
+
import { OpenAIUtility } from "../../utility";
|
|
3
|
+
import { IEmbeddingProvider } from "./ToolRAG";
|
|
4
|
+
/** 工具管理模块 — 注册表 + 缓存 + 重试 + 执行调度 */
|
|
5
|
+
export declare class ToolModule extends AbstractModule {
|
|
6
|
+
/** 工具注册表 */
|
|
7
|
+
private readonly _tools;
|
|
8
|
+
/** 结果缓存 */
|
|
9
|
+
private readonly _cache;
|
|
10
|
+
/** 工具语义检索器(可选) */
|
|
11
|
+
private readonly _rag;
|
|
12
|
+
constructor();
|
|
13
|
+
/** 已注册工具数量 */
|
|
14
|
+
get count(): number;
|
|
15
|
+
/** 注册单个工具 */
|
|
16
|
+
register(tool: ToolDefinition): this;
|
|
17
|
+
/** 批量注册 */
|
|
18
|
+
registerAll(tools: Array<ToolDefinition>): this;
|
|
19
|
+
/** 移除工具 */
|
|
20
|
+
unregister(name: string): boolean;
|
|
21
|
+
/** 获取工具定义 */
|
|
22
|
+
get(name: string): ToolDefinition | undefined;
|
|
23
|
+
/** 获取全部工具 */
|
|
24
|
+
list(): Array<ToolDefinition>;
|
|
25
|
+
/** 按分类获取 */
|
|
26
|
+
listByCategory(category: string): Array<ToolDefinition>;
|
|
27
|
+
/** 设置语义检索的嵌入提供者(不设则使用内置关键词匹配) */
|
|
28
|
+
setEmbeddingProvider(provider: IEmbeddingProvider): void;
|
|
29
|
+
/**
|
|
30
|
+
* 根据用户输入从候选工具中检索最相关的 Top-K 个
|
|
31
|
+
* 先经过 RAG 语义排序,再取前 topK 个
|
|
32
|
+
* @param query 用户输入
|
|
33
|
+
* @param candidates 候选工具名列表(如 Skill 过滤后的结果)
|
|
34
|
+
* @param topK 返回数量
|
|
35
|
+
*/
|
|
36
|
+
selectTools(query: string, candidates?: Array<string>, topK?: number): Promise<Array<string>>;
|
|
37
|
+
/**
|
|
38
|
+
* 导出为 OpenAI API 工具列表(可按名称过滤)
|
|
39
|
+
* @param names 工具名白名单
|
|
40
|
+
* @param compact 精简模式:去掉 schema 中的 description/default,减少 token 开销
|
|
41
|
+
*/
|
|
42
|
+
ToAPITools(names?: Array<string>, compact?: boolean): Array<OpenAIUtility.OpenAI.ToolCall>;
|
|
43
|
+
/** 递归裁剪 JSONSchema:去掉 description/default,只保留 type/enum/required/properties/items */
|
|
44
|
+
private stripSchema;
|
|
45
|
+
private cacheKey;
|
|
46
|
+
private checkCache;
|
|
47
|
+
private setCache;
|
|
48
|
+
/** 清除缓存(可按工具名精确清除) */
|
|
49
|
+
invalidateCache(name?: string): void;
|
|
50
|
+
/** 执行单个工具调用 */
|
|
51
|
+
Execute(toolCall: OpenAIUtility.OpenAI.ToolResponse, ctx: ToolContext): Promise<string>;
|
|
52
|
+
/** 批量执行(自动分组并行/串行) */
|
|
53
|
+
ExecuteBatch(toolCalls: Array<OpenAIUtility.OpenAI.ToolResponse>, ctx: ToolContext): Promise<Map<string, string>>;
|
|
54
|
+
/** 清空全部工具和缓存 */
|
|
55
|
+
clear(): void;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=ToolModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolModule.d.ts","sourceRoot":"","sources":["../../../src/module/ToolModule/ToolModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAW,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExD,oCAAoC;AACpC,qBAAa,UAAW,SAAQ,cAAc;IAE1C,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,WAAW;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;;IAS/C,cAAc;IACd,IAAW,KAAK,IAAI,MAAM,CAA6B;IAIvD,aAAa;IACN,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAO3C,WAAW;IACJ,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI;IAMtD,WAAW;IACJ,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOxC,aAAa;IACN,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKpD,aAAa;IACN,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC;IAKpC,YAAY;IACL,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC;IAK9D,iCAAiC;IAC1B,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAK/D;;;;;;OAMG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAY9G;;;;OAIG;IACI,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAE,OAAe,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;IAgBxG,qFAAqF;IACrF,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;IAMhB,sBAAsB;IACf,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAiB3C,eAAe;IACF,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IA+CpG,sBAAsB;IACT,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAiC9H,gBAAgB;IACT,KAAK,IAAI,IAAI;CAMvB"}
|