tianxincode 1.0.2 → 1.0.3
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/README.md +164 -21
- package/dist/api/chat.routes.js +2 -2
- package/dist/api/chat.routes.js.map +1 -1
- package/dist/modules/ai/ai.service.d.ts.map +1 -1
- package/dist/modules/ai/ai.service.js +0 -1
- package/dist/modules/ai/ai.service.js.map +1 -1
- package/dist/modules/ai/openai.provider.d.ts +2 -124
- package/dist/modules/ai/openai.provider.d.ts.map +1 -1
- package/dist/modules/ai/openai.provider.js +42 -212
- package/dist/modules/ai/openai.provider.js.map +1 -1
- package/dist/modules/ai/react/react.parser.d.ts +6 -5
- package/dist/modules/ai/react/react.parser.d.ts.map +1 -1
- package/dist/modules/ai/react/react.parser.js +56 -45
- package/dist/modules/ai/react/react.parser.js.map +1 -1
- package/dist/modules/ai/react/react.prompts.d.ts.map +1 -1
- package/dist/modules/ai/react/react.prompts.js +0 -16
- package/dist/modules/ai/react/react.prompts.js.map +1 -1
- package/dist/modules/ai/react.agent.d.ts +41 -0
- package/dist/modules/ai/react.agent.d.ts.map +1 -1
- package/dist/modules/ai/react.agent.js +51 -1
- package/dist/modules/ai/react.agent.js.map +1 -1
- package/dist/modules/tools/builtin/edit_file.d.ts.map +1 -1
- package/dist/modules/tools/builtin/edit_file.js +43 -8
- package/dist/modules/tools/builtin/edit_file.js.map +1 -1
- package/dist/modules/tools/builtin/edit_file.txt +1 -0
- package/dist/modules/tools/builtin/read_file.d.ts.map +1 -1
- package/dist/modules/tools/builtin/read_file.js +10 -3
- package/dist/modules/tools/builtin/read_file.js.map +1 -1
- package/dist/modules/tools/builtin/write_file.d.ts.map +1 -1
- package/dist/modules/tools/builtin/write_file.js +15 -1
- package/dist/modules/tools/builtin/write_file.js.map +1 -1
- package/dist/modules/tools/builtin/write_file.txt +1 -0
- package/dist/modules/tools/tool.service.d.ts.map +1 -1
- package/dist/modules/tools/tool.service.js +3 -0
- package/dist/modules/tools/tool.service.js.map +1 -1
- package/package.json +9 -6
|
@@ -1,236 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
* OpenAI Provider 模块
|
|
3
|
-
*
|
|
4
|
-
* 本模块负责与 OpenAI API (及兼容 API) 进行交互
|
|
5
|
-
*
|
|
6
|
-
* 核心功能:
|
|
7
|
-
* 1. chat() - 发送聊天请求,获取完整响应
|
|
8
|
-
* 2. chatStream() - 流式聊天,逐块获取响应
|
|
9
|
-
* 3. Tool Calls - 支持 AI 调用工具 (Function Calling)
|
|
10
|
-
*
|
|
11
|
-
* 支持的 AI 提供商:
|
|
12
|
-
* - OpenAI (GPT-4, GPT-3.5)
|
|
13
|
-
* - 兼容 OpenAI API 的其他提供商 (如 Anthropic Claude 通过适配器)
|
|
14
|
-
* - 自定义 API 端点 (通过 baseUrl 配置)
|
|
15
|
-
*
|
|
16
|
-
* 使用方式:
|
|
17
|
-
* const provider = new OpenAIProvider({
|
|
18
|
-
* apiKey: 'your-api-key',
|
|
19
|
-
* baseUrl: 'https://api.openai.com/v1',
|
|
20
|
-
* defaultModel: 'gpt-4'
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* const response = await provider.chat([
|
|
24
|
-
* { role: 'user', content: '你好' }
|
|
25
|
-
* ]);
|
|
26
|
-
*/
|
|
1
|
+
import OpenAI from 'openai';
|
|
27
2
|
import { logger } from '../logger/index.js';
|
|
28
|
-
/**
|
|
29
|
-
* OpenAIProvider 类
|
|
30
|
-
*
|
|
31
|
-
* 封装与 OpenAI API 的所有交互逻辑
|
|
32
|
-
* 使用原生 fetch API 发送请求
|
|
33
|
-
*
|
|
34
|
-
* API 端点:
|
|
35
|
-
* - POST /chat/completions - 聊天完成
|
|
36
|
-
*
|
|
37
|
-
* 请求格式:
|
|
38
|
-
* - model: 模型名称
|
|
39
|
-
* - messages: 消息数组
|
|
40
|
-
* - temperature: 温度参数 (0-2)
|
|
41
|
-
* - max_tokens: 最大 Token 数
|
|
42
|
-
* - tools: 工具定义数组 (可选)
|
|
43
|
-
* - tool_choice: 工具选择策略 (可选)
|
|
44
|
-
* - stream: 是否流式响应 (可选)
|
|
45
|
-
*/
|
|
46
3
|
export class OpenAIProvider {
|
|
47
|
-
/**
|
|
48
|
-
* 构造函数
|
|
49
|
-
*
|
|
50
|
-
* @param config - 配置对象
|
|
51
|
-
*
|
|
52
|
-
* baseUrl 默认值说明:
|
|
53
|
-
* - OpenAI: https://api.openai.com/v1
|
|
54
|
-
* - 本地部署: http://localhost:11434/v1 (Ollama)
|
|
55
|
-
* - 自定义: 用户配置的任意兼容 API 地址
|
|
56
|
-
*/
|
|
57
4
|
constructor(config) {
|
|
58
|
-
this.
|
|
59
|
-
|
|
5
|
+
this.client = new OpenAI({
|
|
6
|
+
apiKey: config.apiKey,
|
|
7
|
+
baseURL: config.baseUrl || 'https://api.openai.com/v1',
|
|
8
|
+
});
|
|
60
9
|
this.defaultModel = config.defaultModel || 'gpt-4';
|
|
61
10
|
}
|
|
62
|
-
/**
|
|
63
|
-
* 发送聊天请求 (非流式)
|
|
64
|
-
*
|
|
65
|
-
* 将消息数组发送给 AI,获取完整的响应
|
|
66
|
-
* 支持 Tool Calls 功能
|
|
67
|
-
*
|
|
68
|
-
* 执行流程:
|
|
69
|
-
* 1. 构建请求体 (model, messages, temperature 等)
|
|
70
|
-
* 2. 如果有工具定义,添加到请求体
|
|
71
|
-
* 3. 发送 POST 请求到 /chat/completions
|
|
72
|
-
* 4. 解析响应,返回 ChatResponse
|
|
73
|
-
*
|
|
74
|
-
* @param messages - 消息数组,包含角色和内容
|
|
75
|
-
* @param options - 可选配置 (temperature, maxTokens, model, tools)
|
|
76
|
-
* @returns {Promise<ChatResponse>} AI 响应对象
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* const response = await provider.chat([
|
|
80
|
-
* { role: 'system', content: '你是一个助手' },
|
|
81
|
-
* { role: 'user', content: '你好' }
|
|
82
|
-
* ]);
|
|
83
|
-
*
|
|
84
|
-
* console.log(response.content); // AI 的回复
|
|
85
|
-
* console.log(response.usage); // Token 使用量
|
|
86
|
-
*/
|
|
87
11
|
async chat(messages, options = {}) {
|
|
88
|
-
|
|
89
|
-
// 使用提供的值或默认值
|
|
90
|
-
const { temperature = 0.7, // 温度:控制生成随机性,0-2 之间
|
|
91
|
-
maxTokens = 2000, // 最大 Token 数
|
|
92
|
-
model = this.defaultModel, // 模型名称
|
|
93
|
-
tools, // 工具定义数组 (可选)
|
|
94
|
-
} = options;
|
|
95
|
-
// ========== 构建请求体 ==========
|
|
12
|
+
const { temperature = 0.7, maxTokens = 8192, model = this.defaultModel, tools, } = options;
|
|
96
13
|
const requestBody = {
|
|
97
14
|
model,
|
|
98
|
-
messages: messages.map(m => this.formatMessage(m)),
|
|
15
|
+
messages: messages.map(m => this.formatMessage(m)),
|
|
99
16
|
temperature,
|
|
100
17
|
max_tokens: maxTokens,
|
|
101
18
|
};
|
|
102
|
-
// ========== 添加工具定义 ==========
|
|
103
|
-
// 如果提供了工具,AI 可以选择调用工具
|
|
104
19
|
if (tools && tools.length > 0) {
|
|
105
20
|
requestBody.tools = tools;
|
|
106
|
-
requestBody.tool_choice = 'auto';
|
|
21
|
+
requestBody.tool_choice = 'auto';
|
|
107
22
|
}
|
|
108
|
-
|
|
109
|
-
// 完整的 API 端点: {baseUrl}/chat/completions
|
|
110
|
-
const url = `${this.baseUrl}/chat/completions`;
|
|
111
|
-
// 记录请求日志 (调试用)
|
|
23
|
+
const url = `${this.client.baseURL}/chat/completions`;
|
|
112
24
|
logger.logRequest(url, requestBody);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
headers: {
|
|
117
|
-
'Content-Type': 'application/json',
|
|
118
|
-
Authorization: `Bearer ${this.apiKey}`, // Bearer Token 认证
|
|
119
|
-
},
|
|
120
|
-
body: JSON.stringify(requestBody),
|
|
121
|
-
});
|
|
122
|
-
// ========== 错误处理 ==========
|
|
123
|
-
if (!response.ok) {
|
|
124
|
-
const error = await response.text();
|
|
125
|
-
throw new Error(`OpenAI API error: ${response.status} - ${error}`);
|
|
126
|
-
}
|
|
127
|
-
// ========== 解析响应 ==========
|
|
128
|
-
const data = (await response.json());
|
|
129
|
-
// 记录响应日志
|
|
130
|
-
logger.logResponse(url, data);
|
|
131
|
-
// 转换为内部格式并返回
|
|
132
|
-
return this.parseResponse(data);
|
|
25
|
+
const response = await this.client.chat.completions.create(requestBody);
|
|
26
|
+
logger.logResponse(url, response);
|
|
27
|
+
return this.parseResponse(response);
|
|
133
28
|
}
|
|
134
|
-
/**
|
|
135
|
-
* 流式聊天
|
|
136
|
-
*
|
|
137
|
-
* 使用 Server-Sent Events (SSE) 流式获取 AI 响应
|
|
138
|
-
* 适用于需要实时展示 AI 回复的场景
|
|
139
|
-
*
|
|
140
|
-
* 实现原理:
|
|
141
|
-
* 1. 发送请求时设置 stream: true
|
|
142
|
-
* 2. 逐块读取响应体
|
|
143
|
-
* 3. 解析每个 SSE 消息块
|
|
144
|
-
* 4. yield 每个内容块给调用者
|
|
145
|
-
* 5. 直到收到 [DONE] 标记结束
|
|
146
|
-
*
|
|
147
|
-
* @param messages - 消息数组
|
|
148
|
-
* @param options - 可选配置
|
|
149
|
-
* @returns {AsyncGenerator<string>} 异步生成器,逐块返回内容
|
|
150
|
-
*/
|
|
151
29
|
async *chatStream(messages, options = {}) {
|
|
152
30
|
const { temperature = 0.7, maxTokens = 2000, model = this.defaultModel, } = options;
|
|
153
|
-
|
|
154
|
-
const url = `${this.baseUrl}/chat/completions`;
|
|
31
|
+
const url = `${this.client.baseURL}/chat/completions`;
|
|
155
32
|
const requestBody = {
|
|
156
33
|
model,
|
|
157
34
|
messages: messages.map(m => this.formatMessage(m)),
|
|
158
35
|
temperature,
|
|
159
36
|
max_tokens: maxTokens,
|
|
160
|
-
stream: true,
|
|
37
|
+
stream: true,
|
|
161
38
|
};
|
|
162
39
|
logger.logRequest(url, requestBody);
|
|
163
|
-
const response = await
|
|
164
|
-
|
|
165
|
-
headers: {
|
|
166
|
-
'Content-Type': 'application/json',
|
|
167
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
168
|
-
},
|
|
169
|
-
body: JSON.stringify(requestBody),
|
|
170
|
-
});
|
|
171
|
-
if (!response.ok) {
|
|
172
|
-
throw new Error(`OpenAI API error: ${response.status}`);
|
|
173
|
-
}
|
|
174
|
-
// ========== 获取响应流 ==========
|
|
175
|
-
// response.body 是一个 ReadableStream
|
|
176
|
-
const reader = response.body?.getReader();
|
|
177
|
-
if (!reader)
|
|
40
|
+
const response = await this.client.chat.completions.create(requestBody);
|
|
41
|
+
if (!response.body) {
|
|
178
42
|
throw new Error('No response body');
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
|
|
43
|
+
}
|
|
44
|
+
const reader = response.body.getReader();
|
|
45
|
+
const decoder = new TextDecoder();
|
|
46
|
+
let buffer = '';
|
|
183
47
|
while (true) {
|
|
184
|
-
// 读取一块数据
|
|
185
48
|
const { done, value } = await reader.read();
|
|
186
49
|
if (done)
|
|
187
|
-
break;
|
|
188
|
-
// 解码并追加到缓冲区
|
|
50
|
+
break;
|
|
189
51
|
buffer += decoder.decode(value, { stream: true });
|
|
190
|
-
// 按行分割
|
|
191
52
|
const lines = buffer.split('\n');
|
|
192
|
-
buffer = lines.pop() || '';
|
|
193
|
-
// ========== 处理每一行 ==========
|
|
53
|
+
buffer = lines.pop() || '';
|
|
194
54
|
for (const line of lines) {
|
|
195
55
|
const trimmed = line.trim();
|
|
196
|
-
// SSE 格式: data: {...}
|
|
197
56
|
if (trimmed.startsWith('data: ')) {
|
|
198
|
-
const data = trimmed.slice(6);
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
if (data === '[DONE]') {
|
|
202
|
-
logger.logResponse(url, streamData);
|
|
203
|
-
return; // 流式响应结束
|
|
204
|
-
}
|
|
205
|
-
// ========== 解析并 yield 内容 ==========
|
|
57
|
+
const data = trimmed.slice(6);
|
|
58
|
+
if (data === '[DONE]')
|
|
59
|
+
return;
|
|
206
60
|
try {
|
|
207
61
|
const parsed = JSON.parse(data);
|
|
208
|
-
// OpenAI 流式响应的格式: choices[0].delta.content
|
|
209
62
|
const content = parsed.choices?.[0]?.delta?.content;
|
|
210
|
-
if (content)
|
|
211
|
-
yield content;
|
|
212
|
-
}
|
|
63
|
+
if (content)
|
|
64
|
+
yield content;
|
|
213
65
|
}
|
|
214
66
|
catch { }
|
|
215
67
|
}
|
|
216
68
|
}
|
|
217
69
|
}
|
|
218
|
-
logger.logResponse(url, streamData);
|
|
219
70
|
}
|
|
220
|
-
/**
|
|
221
|
-
* 格式化消息
|
|
222
|
-
*
|
|
223
|
-
* 将内部 ChatMessage 格式转换为 OpenAI API 格式
|
|
224
|
-
*
|
|
225
|
-
* @param message - 内部消息格式
|
|
226
|
-
* @returns {Record<string, any>} OpenAPI API 消息格式
|
|
227
|
-
*/
|
|
228
71
|
formatMessage(message) {
|
|
229
72
|
const formatted = {
|
|
230
73
|
role: message.role,
|
|
231
74
|
content: message.content,
|
|
232
75
|
};
|
|
233
|
-
// 添加可选字段
|
|
234
76
|
if (message.name)
|
|
235
77
|
formatted.name = message.name;
|
|
236
78
|
if (message.toolCallId)
|
|
@@ -239,41 +81,29 @@ export class OpenAIProvider {
|
|
|
239
81
|
formatted.tool_calls = message.toolCalls;
|
|
240
82
|
return formatted;
|
|
241
83
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
*
|
|
245
|
-
* 将 OpenAI API 响应转换为内部 ChatResponse 格式
|
|
246
|
-
*
|
|
247
|
-
* @param data - OpenAI API 响应数据
|
|
248
|
-
* @returns {ChatResponse} 内部响应格式
|
|
249
|
-
*/
|
|
250
|
-
parseResponse(data) {
|
|
251
|
-
// 获取第一个 choice (通常只有一个)
|
|
252
|
-
const choice = data.choices[0];
|
|
84
|
+
parseResponse(response) {
|
|
85
|
+
const choice = response.choices[0];
|
|
253
86
|
const message = choice.message;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
totalTokens: data.usage.total_tokens,
|
|
87
|
+
const responseData = {
|
|
88
|
+
content: message.content || '',
|
|
89
|
+
finishReason: choice.finish_reason,
|
|
90
|
+
usage: response.usage ? {
|
|
91
|
+
promptTokens: response.usage.prompt_tokens,
|
|
92
|
+
completionTokens: response.usage.completion_tokens,
|
|
93
|
+
totalTokens: response.usage.total_tokens,
|
|
262
94
|
} : undefined,
|
|
263
95
|
};
|
|
264
|
-
// ========== 处理工具调用 ==========
|
|
265
|
-
// 如果 AI 调用了工具,解析工具调用信息
|
|
266
96
|
if (message.tool_calls && message.tool_calls.length > 0) {
|
|
267
|
-
|
|
268
|
-
id: tc.id,
|
|
269
|
-
type: 'function',
|
|
97
|
+
responseData.toolCalls = message.tool_calls.map((tc) => ({
|
|
98
|
+
id: tc.id,
|
|
99
|
+
type: 'function',
|
|
270
100
|
function: {
|
|
271
|
-
name: tc.function.name,
|
|
272
|
-
arguments: tc.function.arguments,
|
|
101
|
+
name: tc.function.name,
|
|
102
|
+
arguments: tc.function.arguments,
|
|
273
103
|
},
|
|
274
104
|
}));
|
|
275
105
|
}
|
|
276
|
-
return
|
|
106
|
+
return responseData;
|
|
277
107
|
}
|
|
278
108
|
}
|
|
279
109
|
//# sourceMappingURL=openai.provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../../src/modules/ai/openai.provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../../src/modules/ai/openai.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* <thought>我需要读取文件</thought>
|
|
21
21
|
* <action>readFile</action>
|
|
22
22
|
* <action_input>
|
|
23
|
-
* <
|
|
23
|
+
* <file_path>/path/to/file</file_path>
|
|
24
24
|
* </action_input>
|
|
25
25
|
* <keep_context>true</keep_context>
|
|
26
26
|
* </react>
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* <thought>需要创建一个组件</thought>
|
|
30
30
|
* <action>write_file</action>
|
|
31
31
|
* <action_input>
|
|
32
|
-
* <
|
|
32
|
+
* <file_path>src/Hello.tsx</file_path>
|
|
33
33
|
* <content><![CDATA[import React from 'react';]]></content>
|
|
34
34
|
* </action_input>
|
|
35
35
|
* </react>
|
|
@@ -47,17 +47,18 @@ import { ReActStep } from './react.types.js';
|
|
|
47
47
|
* 将 AI 返回的文本解析为结构化的 ReActStep 数组
|
|
48
48
|
*/
|
|
49
49
|
export declare class ReActParser {
|
|
50
|
-
parse(content: string): {
|
|
50
|
+
parse(content: string): Promise<{
|
|
51
51
|
steps: ReActStep[];
|
|
52
52
|
finalAnswer: string;
|
|
53
|
-
}
|
|
53
|
+
}>;
|
|
54
54
|
private splitBlocks;
|
|
55
55
|
/**
|
|
56
56
|
* 解析 XML 格式的块
|
|
57
57
|
*/
|
|
58
58
|
private parseXMLBlock;
|
|
59
|
+
private extractValue;
|
|
59
60
|
/**
|
|
60
|
-
* 解析
|
|
61
|
+
* 解析 action_input 参数节点
|
|
61
62
|
*/
|
|
62
63
|
private parseXMLParams;
|
|
63
64
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.parser.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,SAAS,EAAe,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.parser.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,SAAS,EAAe,MAAM,kBAAkB,CAAC;AAG1D;;;;GAIG;AACH,qBAAa,WAAW;IAChB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;YAwCpE,WAAW;IAsDzB;;OAEG;YACW,aAAa;IA6C3B,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,cAAc;IAc5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,aAAa;IAUrB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO;IAI3C,iBAAiB,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM;IAO3C,wBAAwB,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM;CAUnD;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* <thought>我需要读取文件</thought>
|
|
21
21
|
* <action>readFile</action>
|
|
22
22
|
* <action_input>
|
|
23
|
-
* <
|
|
23
|
+
* <file_path>/path/to/file</file_path>
|
|
24
24
|
* </action_input>
|
|
25
25
|
* <keep_context>true</keep_context>
|
|
26
26
|
* </react>
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* <thought>需要创建一个组件</thought>
|
|
30
30
|
* <action>write_file</action>
|
|
31
31
|
* <action_input>
|
|
32
|
-
* <
|
|
32
|
+
* <file_path>src/Hello.tsx</file_path>
|
|
33
33
|
* <content><![CDATA[import React from 'react';]]></content>
|
|
34
34
|
* </action_input>
|
|
35
35
|
* </react>
|
|
@@ -40,14 +40,15 @@
|
|
|
40
40
|
* ---
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
+
import { parseStringPromise } from 'xml2js';
|
|
43
44
|
/**
|
|
44
45
|
* ReActParser 类
|
|
45
46
|
*
|
|
46
47
|
* 将 AI 返回的文本解析为结构化的 ReActStep 数组
|
|
47
48
|
*/
|
|
48
49
|
export class ReActParser {
|
|
49
|
-
parse(content) {
|
|
50
|
-
const blocks = this.splitBlocks(content);
|
|
50
|
+
async parse(content) {
|
|
51
|
+
const blocks = await this.splitBlocks(content);
|
|
51
52
|
const steps = [];
|
|
52
53
|
const contentMap = new Map();
|
|
53
54
|
let finalAnswer = '';
|
|
@@ -85,7 +86,7 @@ export class ReActParser {
|
|
|
85
86
|
}
|
|
86
87
|
return { steps, finalAnswer };
|
|
87
88
|
}
|
|
88
|
-
splitBlocks(content) {
|
|
89
|
+
async splitBlocks(content) {
|
|
89
90
|
const blocks = [];
|
|
90
91
|
const parts = content.split(/\n---\n/);
|
|
91
92
|
for (const part of parts) {
|
|
@@ -102,7 +103,7 @@ export class ReActParser {
|
|
|
102
103
|
continue;
|
|
103
104
|
}
|
|
104
105
|
// 尝试解析 XML 格式
|
|
105
|
-
const xmlResult = this.parseXMLBlock(trimmed);
|
|
106
|
+
const xmlResult = await this.parseXMLBlock(trimmed);
|
|
106
107
|
if (xmlResult) {
|
|
107
108
|
blocks.push(xmlResult);
|
|
108
109
|
continue;
|
|
@@ -141,53 +142,63 @@ export class ReActParser {
|
|
|
141
142
|
/**
|
|
142
143
|
* 解析 XML 格式的块
|
|
143
144
|
*/
|
|
144
|
-
parseXMLBlock(content) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
145
|
+
async parseXMLBlock(content) {
|
|
146
|
+
try {
|
|
147
|
+
const wrappedXml = `<root>${content}</root>`;
|
|
148
|
+
const parsed = await parseStringPromise(wrappedXml, {
|
|
149
|
+
trim: false,
|
|
150
|
+
explicitArray: false,
|
|
151
|
+
mergeAttrs: true,
|
|
152
|
+
});
|
|
153
|
+
if (!parsed?.root?.react) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const react = parsed.root.react;
|
|
157
|
+
const data = {};
|
|
158
|
+
if (react.thought) {
|
|
159
|
+
data.thought = this.extractValue(react.thought);
|
|
160
|
+
}
|
|
161
|
+
if (react.final_answer) {
|
|
162
|
+
data.final_answer = this.extractValue(react.final_answer);
|
|
163
|
+
return { type: 'step', data };
|
|
164
|
+
}
|
|
165
|
+
if (react.action) {
|
|
166
|
+
data.action = this.extractValue(react.action);
|
|
167
|
+
}
|
|
168
|
+
if (react.keep_context) {
|
|
169
|
+
const keepCtx = this.extractValue(react.keep_context);
|
|
170
|
+
data.keep_context = keepCtx?.toLowerCase() === 'true';
|
|
171
|
+
}
|
|
172
|
+
if (react.action_input) {
|
|
173
|
+
data.action_input = await this.parseXMLParams(react.action_input);
|
|
174
|
+
}
|
|
160
175
|
return { type: 'step', data };
|
|
161
176
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
data.action = actionMatch[1].trim();
|
|
166
|
-
}
|
|
167
|
-
// 解析 keep_context
|
|
168
|
-
const keepContextMatch = inner.match(/<keep_context>([\s\S]*?)<\/keep_context>/i);
|
|
169
|
-
if (keepContextMatch) {
|
|
170
|
-
data.keep_context = keepContextMatch[1].trim().toLowerCase() === 'true';
|
|
177
|
+
catch (e) {
|
|
178
|
+
console.error('XML parse error:', e);
|
|
179
|
+
return null;
|
|
171
180
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (
|
|
175
|
-
|
|
181
|
+
}
|
|
182
|
+
extractValue(value) {
|
|
183
|
+
if (!value)
|
|
184
|
+
return '';
|
|
185
|
+
if (typeof value === 'string')
|
|
186
|
+
return value.trim();
|
|
187
|
+
if (typeof value === 'object' && '_' in value) {
|
|
188
|
+
return this.extractCDATAOrText(String(value._));
|
|
176
189
|
}
|
|
177
|
-
return
|
|
190
|
+
return String(value);
|
|
178
191
|
}
|
|
179
192
|
/**
|
|
180
|
-
* 解析
|
|
193
|
+
* 解析 action_input 参数节点
|
|
181
194
|
*/
|
|
182
|
-
parseXMLParams(
|
|
195
|
+
async parseXMLParams(actionInput) {
|
|
183
196
|
const params = {};
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const paramValue = match[2];
|
|
190
|
-
params[paramName] = this.extractCDATAOrText(paramValue);
|
|
197
|
+
if (!actionInput || typeof actionInput !== 'object') {
|
|
198
|
+
return params;
|
|
199
|
+
}
|
|
200
|
+
for (const [key, value] of Object.entries(actionInput)) {
|
|
201
|
+
params[key] = this.extractValue(value);
|
|
191
202
|
}
|
|
192
203
|
return params;
|
|
193
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.parser.js","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;
|
|
1
|
+
{"version":3,"file":"react.parser.js","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.prompts.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"react.prompts.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+H7D,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,EAAE,SAAS,EAAE,EACpB,aAAa,GAAE,MAAW,EAC1B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
|
|
@@ -75,22 +75,6 @@ function getReActPromptTemplate(roleTemplate) {
|
|
|
75
75
|
</react>
|
|
76
76
|
\`\`\`
|
|
77
77
|
|
|
78
|
-
**需要写入/编辑文件时,内容使用 CDATA 包裹:**
|
|
79
|
-
\`\`\`xml
|
|
80
|
-
<react>
|
|
81
|
-
<thought>需要创建一个组件</thought>
|
|
82
|
-
<action>write_file</action>
|
|
83
|
-
<action_input>
|
|
84
|
-
<path>src/components/Hello.tsx</path>
|
|
85
|
-
<content><![CDATA[import React from 'react';
|
|
86
|
-
export const Hello = () => {
|
|
87
|
-
return <div>Hello World</div>;
|
|
88
|
-
};]]></content>
|
|
89
|
-
</action_input>
|
|
90
|
-
<keep_context>true</keep_context>
|
|
91
|
-
</react>
|
|
92
|
-
\`\`\`
|
|
93
|
-
|
|
94
78
|
**返回最终答案时:**
|
|
95
79
|
\`\`\`xml
|
|
96
80
|
<react>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.prompts.js","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,oCAAoC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,YAAoB;IAClD,OAAO,GAAG,YAAY
|
|
1
|
+
{"version":3,"file":"react.prompts.js","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,oCAAoC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,YAAoB;IAClD,OAAO,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGvB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA8B,EAC9B,OAAoB,EACpB,gBAAwB,EAAE,EAC1B,OAAiD;IAEjD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACvD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAElD,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS;QACnD,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO;YACjC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO;gBAChC,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAC1E,QAAQ,IAAI,UAAU,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,IAAI,GAAG,CACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,mBAAmB,CAAC,CAAC,IAAI,2BAA2B,CAAC,CAAC,WAAW,mCAAmC,MAAM,4BAA4B,CAAC;IAChJ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,YAAY,GAAG,MAAM,0BAA0B,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAEtD,OAAO,QAAQ;SACZ,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC;SACnC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;SAC7B,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,IAAI,KAAK,CAAC;SACpD,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;SACjC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,CAAC"}
|