@agenticc/core 1.0.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/LICENSE +21 -0
- package/README.md +370 -0
- package/README.zh-CN.md +372 -0
- package/dist/audit/index.d.ts +9 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +9 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/logger.d.ts +211 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/logger.js +268 -0
- package/dist/audit/logger.js.map +1 -0
- package/dist/audit/query.d.ts +164 -0
- package/dist/audit/query.d.ts.map +1 -0
- package/dist/audit/query.js +250 -0
- package/dist/audit/query.js.map +1 -0
- package/dist/conversation/context-builder.d.ts +119 -0
- package/dist/conversation/context-builder.d.ts.map +1 -0
- package/dist/conversation/context-builder.js +252 -0
- package/dist/conversation/context-builder.js.map +1 -0
- package/dist/conversation/index.d.ts +10 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +10 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/message-store.d.ts +231 -0
- package/dist/conversation/message-store.d.ts.map +1 -0
- package/dist/conversation/message-store.js +404 -0
- package/dist/conversation/message-store.js.map +1 -0
- package/dist/conversation/session.d.ts +201 -0
- package/dist/conversation/session.d.ts.map +1 -0
- package/dist/conversation/session.js +285 -0
- package/dist/conversation/session.js.map +1 -0
- package/dist/core/agent.d.ts +277 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +674 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/agentic-loop.d.ts +98 -0
- package/dist/core/agentic-loop.d.ts.map +1 -0
- package/dist/core/agentic-loop.js +496 -0
- package/dist/core/agentic-loop.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent-parser.d.ts +101 -0
- package/dist/core/intent-parser.d.ts.map +1 -0
- package/dist/core/intent-parser.js +221 -0
- package/dist/core/intent-parser.js.map +1 -0
- package/dist/core/plan-generator.d.ts +133 -0
- package/dist/core/plan-generator.d.ts.map +1 -0
- package/dist/core/plan-generator.js +294 -0
- package/dist/core/plan-generator.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +120 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +369 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/response-handler.d.ts +141 -0
- package/dist/core/response-handler.d.ts.map +1 -0
- package/dist/core/response-handler.js +384 -0
- package/dist/core/response-handler.js.map +1 -0
- package/dist/core/tool-executor.d.ts +143 -0
- package/dist/core/tool-executor.d.ts.map +1 -0
- package/dist/core/tool-executor.js +354 -0
- package/dist/core/tool-executor.js.map +1 -0
- package/dist/core/tool-registry.d.ts +133 -0
- package/dist/core/tool-registry.d.ts.map +1 -0
- package/dist/core/tool-registry.js +252 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/chunker.d.ts +78 -0
- package/dist/knowledge/chunker.d.ts.map +1 -0
- package/dist/knowledge/chunker.js +233 -0
- package/dist/knowledge/chunker.js.map +1 -0
- package/dist/knowledge/embedder.d.ts +93 -0
- package/dist/knowledge/embedder.d.ts.map +1 -0
- package/dist/knowledge/embedder.js +205 -0
- package/dist/knowledge/embedder.js.map +1 -0
- package/dist/knowledge/index.d.ts +10 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +11 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/loaders/index.d.ts +10 -0
- package/dist/knowledge/loaders/index.d.ts.map +1 -0
- package/dist/knowledge/loaders/index.js +10 -0
- package/dist/knowledge/loaders/index.js.map +1 -0
- package/dist/knowledge/loaders/markdown.d.ts +88 -0
- package/dist/knowledge/loaders/markdown.d.ts.map +1 -0
- package/dist/knowledge/loaders/markdown.js +205 -0
- package/dist/knowledge/loaders/markdown.js.map +1 -0
- package/dist/knowledge/loaders/yaml.d.ts +112 -0
- package/dist/knowledge/loaders/yaml.d.ts.map +1 -0
- package/dist/knowledge/loaders/yaml.js +368 -0
- package/dist/knowledge/loaders/yaml.js.map +1 -0
- package/dist/knowledge/retriever.d.ts +144 -0
- package/dist/knowledge/retriever.d.ts.map +1 -0
- package/dist/knowledge/retriever.js +399 -0
- package/dist/knowledge/retriever.js.map +1 -0
- package/dist/knowledge/store.d.ts +146 -0
- package/dist/knowledge/store.d.ts.map +1 -0
- package/dist/knowledge/store.js +420 -0
- package/dist/knowledge/store.js.map +1 -0
- package/dist/llm/adapter.d.ts +194 -0
- package/dist/llm/adapter.d.ts.map +1 -0
- package/dist/llm/adapter.js +42 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/adapters/anyrouter.d.ts +84 -0
- package/dist/llm/adapters/anyrouter.d.ts.map +1 -0
- package/dist/llm/adapters/anyrouter.js +372 -0
- package/dist/llm/adapters/anyrouter.js.map +1 -0
- package/dist/llm/adapters/claude.d.ts +66 -0
- package/dist/llm/adapters/claude.d.ts.map +1 -0
- package/dist/llm/adapters/claude.js +323 -0
- package/dist/llm/adapters/claude.js.map +1 -0
- package/dist/llm/adapters/index.d.ts +12 -0
- package/dist/llm/adapters/index.d.ts.map +1 -0
- package/dist/llm/adapters/index.js +12 -0
- package/dist/llm/adapters/index.js.map +1 -0
- package/dist/llm/adapters/mimo.d.ts +85 -0
- package/dist/llm/adapters/mimo.d.ts.map +1 -0
- package/dist/llm/adapters/mimo.js +316 -0
- package/dist/llm/adapters/mimo.js.map +1 -0
- package/dist/llm/adapters/openai.d.ts +53 -0
- package/dist/llm/adapters/openai.d.ts.map +1 -0
- package/dist/llm/adapters/openai.js +293 -0
- package/dist/llm/adapters/openai.js.map +1 -0
- package/dist/llm/adapters/qwen.d.ts +53 -0
- package/dist/llm/adapters/qwen.d.ts.map +1 -0
- package/dist/llm/adapters/qwen.js +299 -0
- package/dist/llm/adapters/qwen.js.map +1 -0
- package/dist/llm/adapters/siliconflow.d.ts +69 -0
- package/dist/llm/adapters/siliconflow.d.ts.map +1 -0
- package/dist/llm/adapters/siliconflow.js +331 -0
- package/dist/llm/adapters/siliconflow.js.map +1 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +12 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/manager.d.ts +97 -0
- package/dist/llm/manager.d.ts.map +1 -0
- package/dist/llm/manager.js +337 -0
- package/dist/llm/manager.js.map +1 -0
- package/dist/test-utils/arbitraries.d.ts +230 -0
- package/dist/test-utils/arbitraries.d.ts.map +1 -0
- package/dist/test-utils/arbitraries.js +280 -0
- package/dist/test-utils/arbitraries.js.map +1 -0
- package/dist/test-utils/cleanup.d.ts +184 -0
- package/dist/test-utils/cleanup.d.ts.map +1 -0
- package/dist/test-utils/cleanup.js +282 -0
- package/dist/test-utils/cleanup.js.map +1 -0
- package/dist/test-utils/config.d.ts +80 -0
- package/dist/test-utils/config.d.ts.map +1 -0
- package/dist/test-utils/config.js +94 -0
- package/dist/test-utils/config.js.map +1 -0
- package/dist/test-utils/index.d.ts +10 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +36 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/mocks.d.ts +170 -0
- package/dist/test-utils/mocks.d.ts.map +1 -0
- package/dist/test-utils/mocks.js +281 -0
- package/dist/test-utils/mocks.js.map +1 -0
- package/dist/types/config.d.ts +170 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +120 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/knowledge.d.ts +95 -0
- package/dist/types/knowledge.d.ts.map +1 -0
- package/dist/types/knowledge.js +7 -0
- package/dist/types/knowledge.js.map +1 -0
- package/dist/types/loop.d.ts +148 -0
- package/dist/types/loop.d.ts.map +1 -0
- package/dist/types/loop.js +16 -0
- package/dist/types/loop.js.map +1 -0
- package/dist/types/plugin.d.ts +137 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +15 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/response.d.ts +186 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +99 -0
- package/dist/types/response.js.map +1 -0
- package/dist/types/streaming.d.ts +478 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +483 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/tool.d.ts +118 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +42 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/error.d.ts +22 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +36 -0
- package/dist/utils/error.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Handler
|
|
3
|
+
*
|
|
4
|
+
* Generates appropriate responses based on execution results,
|
|
5
|
+
* knowledge assessment, and user interaction needs.
|
|
6
|
+
*
|
|
7
|
+
* _Requirements: 1.4, 5.1-5.5_
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_SYSTEM_PROMPT = `You are a helpful assistant for a game server management system.
|
|
10
|
+
Generate clear, concise responses based on the execution results provided.
|
|
11
|
+
Use the user's language (Chinese or English) based on their input.
|
|
12
|
+
Be specific about what was done and any relevant details.`;
|
|
13
|
+
/**
|
|
14
|
+
* Response Handler
|
|
15
|
+
*
|
|
16
|
+
* Determines the appropriate response type and generates responses
|
|
17
|
+
* based on the current state of agent processing.
|
|
18
|
+
*/
|
|
19
|
+
export class ResponseHandler {
|
|
20
|
+
llmManager;
|
|
21
|
+
config;
|
|
22
|
+
constructor(llmManager, config) {
|
|
23
|
+
this.llmManager = llmManager;
|
|
24
|
+
this.config = {
|
|
25
|
+
systemPrompt: config?.systemPrompt ?? DEFAULT_SYSTEM_PROMPT,
|
|
26
|
+
includeToolDetails: config?.includeToolDetails ?? true,
|
|
27
|
+
maxResponseLength: config?.maxResponseLength ?? 2000,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate an appropriate response based on context
|
|
32
|
+
*/
|
|
33
|
+
async generateResponse(context) {
|
|
34
|
+
// If we have successful execution results, prioritize returning them
|
|
35
|
+
if (context.executionResults && context.executionResults.length > 0) {
|
|
36
|
+
const hasSuccess = context.executionResults.some((r) => r.success);
|
|
37
|
+
if (hasSuccess) {
|
|
38
|
+
return this.createExecuteResponse(context);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Check if we need to request knowledge
|
|
42
|
+
if (this.shouldRequestKnowledge(context)) {
|
|
43
|
+
return this.createKnowledgeRequestResponse(context);
|
|
44
|
+
}
|
|
45
|
+
// Check if we need clarification
|
|
46
|
+
if (this.shouldRequestClarification(context)) {
|
|
47
|
+
return this.createClarifyResponse(context);
|
|
48
|
+
}
|
|
49
|
+
// Check if we need confirmation
|
|
50
|
+
if (this.shouldRequestConfirmation(context)) {
|
|
51
|
+
return this.createConfirmResponse(context);
|
|
52
|
+
}
|
|
53
|
+
// Check if we should present options
|
|
54
|
+
if (this.shouldPresentOptions(context)) {
|
|
55
|
+
return this.createOptionsResponse(context);
|
|
56
|
+
}
|
|
57
|
+
// Generate execute response
|
|
58
|
+
return this.createExecuteResponse(context);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if knowledge request is needed
|
|
62
|
+
*/
|
|
63
|
+
shouldRequestKnowledge(context) {
|
|
64
|
+
const assessment = context.knowledgeAssessment;
|
|
65
|
+
return assessment?.status === 'insufficient' && context.intent.confidence > 0.5; // Only if we understand the intent
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if clarification is needed
|
|
69
|
+
*/
|
|
70
|
+
shouldRequestClarification(context) {
|
|
71
|
+
// Low confidence intent
|
|
72
|
+
if (context.intent.confidence < 0.4) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
// Ambiguous knowledge
|
|
76
|
+
if (context.knowledgeAssessment?.status === 'ambiguous') {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
// Unknown operation type with no clear target
|
|
80
|
+
if (context.intent.operationType === 'unknown' && !context.intent.target) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if confirmation is needed
|
|
87
|
+
*/
|
|
88
|
+
shouldRequestConfirmation(context) {
|
|
89
|
+
return context.plan?.requiresConfirmation === true;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if options should be presented
|
|
93
|
+
*/
|
|
94
|
+
shouldPresentOptions(context) {
|
|
95
|
+
const assessment = context.knowledgeAssessment;
|
|
96
|
+
return (assessment?.status === 'ambiguous' &&
|
|
97
|
+
assessment.alternatives !== undefined &&
|
|
98
|
+
assessment.alternatives.length > 1);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a knowledge request response
|
|
102
|
+
*/
|
|
103
|
+
createKnowledgeRequestResponse(context) {
|
|
104
|
+
const assessment = context.knowledgeAssessment;
|
|
105
|
+
const topic = assessment.missingTopic || context.intent.action;
|
|
106
|
+
const options = [
|
|
107
|
+
{
|
|
108
|
+
id: 'provide_text',
|
|
109
|
+
type: 'provide_text',
|
|
110
|
+
label: '提供文本信息',
|
|
111
|
+
description: '直接输入相关信息',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: 'upload_file',
|
|
115
|
+
type: 'upload_file',
|
|
116
|
+
label: '上传文件',
|
|
117
|
+
description: '上传包含相关信息的文件',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
id: 'skip',
|
|
121
|
+
type: 'skip',
|
|
122
|
+
label: '跳过',
|
|
123
|
+
description: '跳过此步骤,继续其他操作',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: 'try_anyway',
|
|
127
|
+
type: 'try_anyway',
|
|
128
|
+
label: '尝试继续',
|
|
129
|
+
description: '使用现有知识尝试执行',
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
return {
|
|
133
|
+
type: 'knowledge_request',
|
|
134
|
+
message: `我需要更多关于 "${topic}" 的信息来完成您的请求。`,
|
|
135
|
+
missing: {
|
|
136
|
+
topic,
|
|
137
|
+
description: `缺少关于 ${topic} 的详细信息,无法准确执行操作。`,
|
|
138
|
+
},
|
|
139
|
+
options,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a clarify response
|
|
144
|
+
*/
|
|
145
|
+
async createClarifyResponse(context) {
|
|
146
|
+
const questions = await this.generateClarifyingQuestions(context);
|
|
147
|
+
return {
|
|
148
|
+
type: 'clarify',
|
|
149
|
+
message: '我需要一些额外信息来更好地理解您的请求。',
|
|
150
|
+
questions,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Generate clarifying questions using LLM
|
|
155
|
+
*/
|
|
156
|
+
async generateClarifyingQuestions(context) {
|
|
157
|
+
try {
|
|
158
|
+
const prompt = `Based on this user message: "${context.userMessage}"
|
|
159
|
+
|
|
160
|
+
The intent was parsed as:
|
|
161
|
+
- Action: ${context.intent.action}
|
|
162
|
+
- Operation: ${context.intent.operationType}
|
|
163
|
+
- Confidence: ${context.intent.confidence}
|
|
164
|
+
|
|
165
|
+
Generate 2-3 clarifying questions to better understand what the user wants.
|
|
166
|
+
Respond with a JSON array of questions in the user's language.`;
|
|
167
|
+
const response = await this.llmManager.generate('response_generation', [
|
|
168
|
+
{ role: 'system', content: 'Generate clarifying questions. Respond with a JSON array.' },
|
|
169
|
+
{ role: 'user', content: prompt },
|
|
170
|
+
], { temperature: 0.3 });
|
|
171
|
+
const match = response.match(/\[[\s\S]*\]/);
|
|
172
|
+
if (match) {
|
|
173
|
+
const questions = JSON.parse(match[0]);
|
|
174
|
+
if (Array.isArray(questions)) {
|
|
175
|
+
return questions.map((q) => String(q)).slice(0, 3);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.warn('Failed to generate clarifying questions:', error);
|
|
181
|
+
}
|
|
182
|
+
// Fallback questions
|
|
183
|
+
return ['您能更详细地描述您想要做什么吗?', '您要操作的具体对象是什么?'];
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Create a confirm response
|
|
187
|
+
*/
|
|
188
|
+
createConfirmResponse(context) {
|
|
189
|
+
const plan = context.plan;
|
|
190
|
+
const firstStep = plan.steps[0];
|
|
191
|
+
// Generate preview of changes
|
|
192
|
+
const preview = this.generatePlanPreview(plan);
|
|
193
|
+
return {
|
|
194
|
+
type: 'confirm',
|
|
195
|
+
message: `即将执行以下操作,请确认:`,
|
|
196
|
+
action: {
|
|
197
|
+
type: context.intent.operationType,
|
|
198
|
+
target: context.intent.target || firstStep?.toolName || 'unknown',
|
|
199
|
+
params: firstStep?.arguments || {},
|
|
200
|
+
},
|
|
201
|
+
risk: plan.riskLevel,
|
|
202
|
+
preview,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Generate a preview of the execution plan
|
|
207
|
+
*/
|
|
208
|
+
generatePlanPreview(plan) {
|
|
209
|
+
const lines = [];
|
|
210
|
+
lines.push(`计划: ${plan.description}`);
|
|
211
|
+
lines.push(`风险等级: ${plan.riskLevel}`);
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('执行步骤:');
|
|
214
|
+
for (const step of plan.steps) {
|
|
215
|
+
lines.push(`${step.stepNumber}. ${step.description}`);
|
|
216
|
+
if (Object.keys(step.arguments).length > 0) {
|
|
217
|
+
lines.push(` 参数: ${JSON.stringify(step.arguments)}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return lines.join('\n');
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create an options response
|
|
224
|
+
*/
|
|
225
|
+
createOptionsResponse(context) {
|
|
226
|
+
const alternatives = context.knowledgeAssessment?.alternatives || [];
|
|
227
|
+
const options = alternatives.map((alt, index) => ({
|
|
228
|
+
id: `option_${index}`,
|
|
229
|
+
label: alt.interpretation,
|
|
230
|
+
description: `置信度: ${(alt.confidence * 100).toFixed(0)}%`,
|
|
231
|
+
metadata: { confidence: alt.confidence },
|
|
232
|
+
}));
|
|
233
|
+
return {
|
|
234
|
+
type: 'options',
|
|
235
|
+
message: '发现多个可能的选项,请选择您想要的:',
|
|
236
|
+
options,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Create an execute response
|
|
241
|
+
*/
|
|
242
|
+
async createExecuteResponse(context) {
|
|
243
|
+
const results = context.executionResults || [];
|
|
244
|
+
const toolCalls = this.buildToolCallRecords(results);
|
|
245
|
+
// Generate response message using LLM
|
|
246
|
+
const message = await this.generateExecuteMessage(context, results);
|
|
247
|
+
// Collect data from successful executions
|
|
248
|
+
const data = this.collectExecutionData(results);
|
|
249
|
+
return {
|
|
250
|
+
type: 'execute',
|
|
251
|
+
message,
|
|
252
|
+
data: Object.keys(data).length > 0 ? data : undefined,
|
|
253
|
+
toolCalls: this.config.includeToolDetails ? toolCalls : undefined,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Build tool call records from execution results
|
|
258
|
+
*/
|
|
259
|
+
buildToolCallRecords(results) {
|
|
260
|
+
return results.map((result) => ({
|
|
261
|
+
toolName: result.toolName,
|
|
262
|
+
arguments: result.arguments,
|
|
263
|
+
result: {
|
|
264
|
+
success: result.success,
|
|
265
|
+
content: result.result.content,
|
|
266
|
+
data: result.result.data,
|
|
267
|
+
},
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Generate execute response message using LLM
|
|
272
|
+
*/
|
|
273
|
+
async generateExecuteMessage(context, results) {
|
|
274
|
+
// If no results, generate a simple response
|
|
275
|
+
if (results.length === 0) {
|
|
276
|
+
return this.generateNoActionMessage(context);
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
const prompt = this.buildExecuteMessagePrompt(context, results);
|
|
280
|
+
const response = await this.llmManager.generate('response_generation', [
|
|
281
|
+
{ role: 'system', content: this.config.systemPrompt },
|
|
282
|
+
{ role: 'user', content: prompt },
|
|
283
|
+
], { temperature: 0.5 });
|
|
284
|
+
// Truncate if too long
|
|
285
|
+
if (response.length > this.config.maxResponseLength) {
|
|
286
|
+
return response.slice(0, this.config.maxResponseLength) + '...';
|
|
287
|
+
}
|
|
288
|
+
return response;
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
console.warn('Failed to generate execute message:', error);
|
|
292
|
+
return this.generateFallbackMessage(results);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Build prompt for execute message generation
|
|
297
|
+
*/
|
|
298
|
+
buildExecuteMessagePrompt(context, results) {
|
|
299
|
+
const parts = [];
|
|
300
|
+
parts.push(`User request: ${context.userMessage}`);
|
|
301
|
+
parts.push('');
|
|
302
|
+
parts.push('Execution results:');
|
|
303
|
+
for (const result of results) {
|
|
304
|
+
parts.push(`- Tool: ${result.toolName}`);
|
|
305
|
+
parts.push(` Success: ${result.success}`);
|
|
306
|
+
parts.push(` Result: ${result.result.content}`);
|
|
307
|
+
if (result.result.data) {
|
|
308
|
+
parts.push(` Data: ${JSON.stringify(result.result.data).slice(0, 200)}`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
parts.push('');
|
|
312
|
+
parts.push('Generate a helpful response summarizing what was done.');
|
|
313
|
+
parts.push('Use the same language as the user (Chinese or English).');
|
|
314
|
+
return parts.join('\n');
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Generate message when no action was taken
|
|
318
|
+
*/
|
|
319
|
+
generateNoActionMessage(context) {
|
|
320
|
+
if (context.searchResults && context.searchResults.length > 0) {
|
|
321
|
+
return '根据您的请求,我找到了以下相关信息。';
|
|
322
|
+
}
|
|
323
|
+
return '我理解了您的请求,但目前没有需要执行的操作。';
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Generate fallback message when LLM fails
|
|
327
|
+
*/
|
|
328
|
+
generateFallbackMessage(results) {
|
|
329
|
+
const successful = results.filter((r) => r.success);
|
|
330
|
+
const failed = results.filter((r) => !r.success);
|
|
331
|
+
const parts = [];
|
|
332
|
+
if (successful.length > 0) {
|
|
333
|
+
parts.push(`成功执行了 ${successful.length} 个操作。`);
|
|
334
|
+
}
|
|
335
|
+
if (failed.length > 0) {
|
|
336
|
+
parts.push(`${failed.length} 个操作失败。`);
|
|
337
|
+
for (const f of failed) {
|
|
338
|
+
parts.push(`- ${f.toolName}: ${f.result.content}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return parts.join('\n');
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Collect data from execution results
|
|
345
|
+
*/
|
|
346
|
+
collectExecutionData(results) {
|
|
347
|
+
const data = {};
|
|
348
|
+
for (const result of results) {
|
|
349
|
+
if (result.success && result.result.data !== undefined) {
|
|
350
|
+
data[result.toolName] = result.result.data;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return data;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Create a simple execute response without LLM
|
|
357
|
+
*/
|
|
358
|
+
createSimpleExecuteResponse(message, data, toolCalls) {
|
|
359
|
+
return {
|
|
360
|
+
type: 'execute',
|
|
361
|
+
message,
|
|
362
|
+
data,
|
|
363
|
+
toolCalls,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Create an error response
|
|
368
|
+
*/
|
|
369
|
+
createErrorResponse(error) {
|
|
370
|
+
const message = error instanceof Error ? error.message : error;
|
|
371
|
+
return {
|
|
372
|
+
type: 'execute',
|
|
373
|
+
message: `操作失败: ${message}`,
|
|
374
|
+
data: { error: true },
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Get current configuration
|
|
379
|
+
*/
|
|
380
|
+
getConfig() {
|
|
381
|
+
return { ...this.config };
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=response-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../src/core/response-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Executor
|
|
3
|
+
*
|
|
4
|
+
* Handles the execution of tools with parameter validation,
|
|
5
|
+
* context injection, and error handling.
|
|
6
|
+
*
|
|
7
|
+
* @module core/tool-executor
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolResult, ToolLogger } from '../types/tool.js';
|
|
10
|
+
import type { KnowledgeBase } from '../types/knowledge.js';
|
|
11
|
+
import { ToolRegistry } from './tool-registry.js';
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when tool parameter validation fails
|
|
14
|
+
*/
|
|
15
|
+
export declare class ToolValidationError extends Error {
|
|
16
|
+
readonly toolName: string;
|
|
17
|
+
readonly parameterName: string;
|
|
18
|
+
readonly reason: string;
|
|
19
|
+
constructor(message: string, toolName: string, parameterName: string, reason: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Error thrown when tool execution fails
|
|
23
|
+
*/
|
|
24
|
+
export declare class ToolExecutionError extends Error {
|
|
25
|
+
readonly toolName: string;
|
|
26
|
+
readonly cause?: Error;
|
|
27
|
+
constructor(message: string, toolName: string, cause?: Error);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Error thrown when tool execution times out
|
|
31
|
+
*/
|
|
32
|
+
export declare class ToolTimeoutError extends Error {
|
|
33
|
+
readonly toolName: string;
|
|
34
|
+
readonly timeoutMs: number;
|
|
35
|
+
constructor(toolName: string, timeoutMs: number);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Options for tool execution
|
|
39
|
+
*/
|
|
40
|
+
export interface ToolExecutorOptions {
|
|
41
|
+
/** Default timeout for tool execution in milliseconds (default: 30000) */
|
|
42
|
+
defaultTimeout?: number;
|
|
43
|
+
/** Whether to validate parameters strictly (default: true) */
|
|
44
|
+
strictValidation?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Context provider for tool execution
|
|
48
|
+
*/
|
|
49
|
+
export interface ToolContextProvider {
|
|
50
|
+
/** Get the knowledge base instance */
|
|
51
|
+
getKnowledgeBase(): KnowledgeBase;
|
|
52
|
+
/** Get the current session ID */
|
|
53
|
+
getSessionId(): string;
|
|
54
|
+
/** Get the logger instance */
|
|
55
|
+
getLogger(): ToolLogger;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Result of a tool execution including metadata
|
|
59
|
+
*/
|
|
60
|
+
export interface ToolExecutionResult {
|
|
61
|
+
/** The tool result */
|
|
62
|
+
result: ToolResult;
|
|
63
|
+
/** Tool name that was executed */
|
|
64
|
+
toolName: string;
|
|
65
|
+
/** Arguments passed to the tool */
|
|
66
|
+
arguments: Record<string, unknown>;
|
|
67
|
+
/** Execution duration in milliseconds */
|
|
68
|
+
durationMs: number;
|
|
69
|
+
/** Whether the execution was successful */
|
|
70
|
+
success: boolean;
|
|
71
|
+
/** Error if execution failed */
|
|
72
|
+
error?: Error;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Tool Executor
|
|
76
|
+
*
|
|
77
|
+
* Executes tools with parameter validation, context injection,
|
|
78
|
+
* timeout handling, and error management.
|
|
79
|
+
*/
|
|
80
|
+
export declare class ToolExecutor {
|
|
81
|
+
private registry;
|
|
82
|
+
private options;
|
|
83
|
+
private contextProvider?;
|
|
84
|
+
constructor(registry: ToolRegistry, options?: ToolExecutorOptions);
|
|
85
|
+
/**
|
|
86
|
+
* Set the context provider for tool execution
|
|
87
|
+
*/
|
|
88
|
+
setContextProvider(provider: ToolContextProvider): void;
|
|
89
|
+
/**
|
|
90
|
+
* Create a tool context from the provider or defaults
|
|
91
|
+
*/
|
|
92
|
+
private createContext;
|
|
93
|
+
/**
|
|
94
|
+
* Execute a tool by name with the given arguments
|
|
95
|
+
*
|
|
96
|
+
* @param toolName - Name of the tool to execute
|
|
97
|
+
* @param args - Arguments to pass to the tool
|
|
98
|
+
* @param options - Execution options
|
|
99
|
+
* @returns The execution result
|
|
100
|
+
*/
|
|
101
|
+
execute(toolName: string, args: Record<string, unknown>, options?: {
|
|
102
|
+
sessionId?: string;
|
|
103
|
+
timeout?: number;
|
|
104
|
+
}): Promise<ToolExecutionResult>;
|
|
105
|
+
/**
|
|
106
|
+
* Execute multiple tools in sequence
|
|
107
|
+
*
|
|
108
|
+
* @param calls - Array of tool calls to execute
|
|
109
|
+
* @param options - Execution options
|
|
110
|
+
* @returns Array of execution results
|
|
111
|
+
*/
|
|
112
|
+
executeSequence(calls: Array<{
|
|
113
|
+
toolName: string;
|
|
114
|
+
args: Record<string, unknown>;
|
|
115
|
+
}>, options?: {
|
|
116
|
+
sessionId?: string;
|
|
117
|
+
timeout?: number;
|
|
118
|
+
stopOnError?: boolean;
|
|
119
|
+
}): Promise<ToolExecutionResult[]>;
|
|
120
|
+
/**
|
|
121
|
+
* Execute multiple tools in parallel
|
|
122
|
+
*
|
|
123
|
+
* @param calls - Array of tool calls to execute
|
|
124
|
+
* @param options - Execution options
|
|
125
|
+
* @returns Array of execution results
|
|
126
|
+
*/
|
|
127
|
+
executeParallel(calls: Array<{
|
|
128
|
+
toolName: string;
|
|
129
|
+
args: Record<string, unknown>;
|
|
130
|
+
}>, options?: {
|
|
131
|
+
sessionId?: string;
|
|
132
|
+
timeout?: number;
|
|
133
|
+
}): Promise<ToolExecutionResult[]>;
|
|
134
|
+
/**
|
|
135
|
+
* Check if a tool requires confirmation before execution
|
|
136
|
+
*/
|
|
137
|
+
requiresConfirmation(toolName: string): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Get the risk level of a tool
|
|
140
|
+
*/
|
|
141
|
+
getRiskLevel(toolName: string): 'low' | 'medium' | 'high' | undefined;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=tool-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../src/core/tool-executor.ts"],"names":[],"mappings":"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"}
|