@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
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
# Agentic
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@agenticc/core)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://github.com/Chajian/agentic/actions)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](https://nodejs.org/)
|
|
8
|
+
|
|
9
|
+
[English](./README.md) | 简体中文
|
|
10
|
+
|
|
11
|
+
一个智能 AI 智能体框架,支持 LLM、ReAct 模式执行、RAG 知识检索和可扩展工具系统。
|
|
12
|
+
|
|
13
|
+
## 特性
|
|
14
|
+
|
|
15
|
+
- 🤖 **多 LLM 支持**: OpenAI、Anthropic Claude、Google Gemini
|
|
16
|
+
- 🔧 **工具调用系统**: 内置 ReAct 模式实现自主推理
|
|
17
|
+
- 📚 **RAG 知识库**: 语义搜索和文档检索
|
|
18
|
+
- 💬 **无状态架构**: 灵活的对话管理
|
|
19
|
+
- 📝 **审计日志**: 完整的操作跟踪
|
|
20
|
+
- 🔌 **插件系统**: 可扩展的自定义工具架构
|
|
21
|
+
- ⚡ **流式支持**: 实时响应流
|
|
22
|
+
- 🎯 **意图解析**: 智能请求理解
|
|
23
|
+
|
|
24
|
+
## 安装
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install @agenticc/core
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 快速开始
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import { Agent, ToolRegistry } from '@agenticc/core';
|
|
34
|
+
|
|
35
|
+
// 使用 OpenAI 初始化智能体
|
|
36
|
+
const agent = new Agent({
|
|
37
|
+
llm: {
|
|
38
|
+
provider: 'openai',
|
|
39
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
40
|
+
model: 'gpt-4',
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// 定义一个工具
|
|
45
|
+
agent.tools.register({
|
|
46
|
+
name: 'get_weather',
|
|
47
|
+
description: '获取某个地点的天气信息',
|
|
48
|
+
parameters: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: {
|
|
51
|
+
location: { type: 'string' },
|
|
52
|
+
},
|
|
53
|
+
required: ['location'],
|
|
54
|
+
},
|
|
55
|
+
execute: async (params) => {
|
|
56
|
+
// 实现你的工具逻辑
|
|
57
|
+
return `${params.location} 的天气: ...`;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// 使用智能体(无状态 - 从你的存储传入历史记录)
|
|
62
|
+
const response = await agent.chat('纽约的天气怎么样?', {
|
|
63
|
+
history: [], // 从数据库加载
|
|
64
|
+
});
|
|
65
|
+
console.log(response);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 配置
|
|
69
|
+
|
|
70
|
+
### LLM 提供商
|
|
71
|
+
|
|
72
|
+
#### OpenAI
|
|
73
|
+
```typescript
|
|
74
|
+
new Agent({
|
|
75
|
+
llm: {
|
|
76
|
+
provider: 'openai',
|
|
77
|
+
apiKey: 'sk-...',
|
|
78
|
+
model: 'gpt-4',
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### Anthropic Claude
|
|
84
|
+
```typescript
|
|
85
|
+
new Agent({
|
|
86
|
+
llm: {
|
|
87
|
+
provider: 'anthropic',
|
|
88
|
+
apiKey: 'sk-ant-...',
|
|
89
|
+
model: 'claude-3-opus-20240229',
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### Google Gemini
|
|
95
|
+
```typescript
|
|
96
|
+
new Agent({
|
|
97
|
+
llm: {
|
|
98
|
+
provider: 'openai', // 使用 OpenAI 适配器兼容 Gemini API
|
|
99
|
+
apiKey: process.env.GEMINI_API_KEY,
|
|
100
|
+
model: 'gemini-pro',
|
|
101
|
+
baseURL: 'https://generativelanguage.googleapis.com/v1beta/openai/',
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 工具注册表
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
const tools = new ToolRegistry();
|
|
110
|
+
|
|
111
|
+
// 注册单个工具
|
|
112
|
+
tools.register({
|
|
113
|
+
name: 'calculator',
|
|
114
|
+
description: '执行数学计算',
|
|
115
|
+
parameters: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
properties: {
|
|
118
|
+
expression: { type: 'string' },
|
|
119
|
+
},
|
|
120
|
+
required: ['expression'],
|
|
121
|
+
},
|
|
122
|
+
execute: async ({ expression }) => {
|
|
123
|
+
return eval(expression);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// 批量注册工具
|
|
128
|
+
tools.registerBatch([tool1, tool2, tool3]);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## 核心概念
|
|
132
|
+
|
|
133
|
+
### 无状态架构
|
|
134
|
+
|
|
135
|
+
Agentic 采用无状态设计 - 它不存储对话历史。你需要:
|
|
136
|
+
|
|
137
|
+
1. 从你的数据库/存储加载历史记录
|
|
138
|
+
2. 将历史记录传递给 `chat()` 方法
|
|
139
|
+
3. 将新消息保存回你的存储
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// 从数据库加载
|
|
143
|
+
const history = await db.getMessages(sessionId);
|
|
144
|
+
|
|
145
|
+
// 处理消息
|
|
146
|
+
const response = await agent.chat(userMessage, {
|
|
147
|
+
sessionId,
|
|
148
|
+
history
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// 保存到数据库
|
|
152
|
+
await db.saveMessage(sessionId, {
|
|
153
|
+
role: 'user',
|
|
154
|
+
content: userMessage
|
|
155
|
+
});
|
|
156
|
+
await db.saveMessage(sessionId, {
|
|
157
|
+
role: 'assistant',
|
|
158
|
+
content: response.message
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 插件系统
|
|
163
|
+
|
|
164
|
+
插件允许你将相关工具组织在一起:
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
const weatherPlugin = {
|
|
168
|
+
name: 'weather',
|
|
169
|
+
version: '1.0.0',
|
|
170
|
+
description: '天气相关工具',
|
|
171
|
+
tools: [
|
|
172
|
+
{
|
|
173
|
+
name: 'get_current_weather',
|
|
174
|
+
description: '获取当前天气',
|
|
175
|
+
parameters: [...],
|
|
176
|
+
execute: async (params) => { ... }
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'get_forecast',
|
|
180
|
+
description: '获取天气预报',
|
|
181
|
+
parameters: [...],
|
|
182
|
+
execute: async (params) => { ... }
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
await agent.loadPlugin(weatherPlugin);
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 流式响应
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
const stream = await agent.chatStream('给我讲个故事', {
|
|
194
|
+
sessionId: 'user-123',
|
|
195
|
+
history: []
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
for await (const chunk of stream) {
|
|
199
|
+
if (chunk.type === 'content') {
|
|
200
|
+
process.stdout.write(chunk.content);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 事件监听
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
agent.on('tool:start', (event) => {
|
|
209
|
+
console.log(`开始执行工具: ${event.toolName}`);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
agent.on('tool:end', (event) => {
|
|
213
|
+
console.log(`工具执行完成: ${event.toolName}`);
|
|
214
|
+
console.log(`结果: ${event.result}`);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
agent.on('error', (event) => {
|
|
218
|
+
console.error(`错误: ${event.error.message}`);
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 高级用法
|
|
223
|
+
|
|
224
|
+
### 多 LLM 配置
|
|
225
|
+
|
|
226
|
+
为不同任务使用不同的 LLM:
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
const agent = new Agent({
|
|
230
|
+
llm: {
|
|
231
|
+
mode: 'multi',
|
|
232
|
+
models: {
|
|
233
|
+
fast: {
|
|
234
|
+
provider: 'openai',
|
|
235
|
+
model: 'gpt-3.5-turbo',
|
|
236
|
+
apiKey: process.env.OPENAI_API_KEY
|
|
237
|
+
},
|
|
238
|
+
smart: {
|
|
239
|
+
provider: 'anthropic',
|
|
240
|
+
model: 'claude-3-opus-20240229',
|
|
241
|
+
apiKey: process.env.ANTHROPIC_API_KEY
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
default: 'fast'
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// 为特定任务使用特定模型
|
|
249
|
+
const response = await agent.chat('复杂问题', {
|
|
250
|
+
llmModel: 'smart'
|
|
251
|
+
});
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### RAG 知识库
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
import { KnowledgeStore } from '@agenticc/core';
|
|
258
|
+
|
|
259
|
+
const knowledge = new KnowledgeStore();
|
|
260
|
+
|
|
261
|
+
// 添加文档
|
|
262
|
+
await knowledge.addDocument({
|
|
263
|
+
id: 'doc1',
|
|
264
|
+
content: '关于产品的重要信息...',
|
|
265
|
+
metadata: { source: 'manual', page: 1 }
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
// 搜索相关文档
|
|
269
|
+
const results = await knowledge.search('产品特性', {
|
|
270
|
+
limit: 5,
|
|
271
|
+
threshold: 0.7
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
// 在智能体中使用
|
|
275
|
+
const agent = new Agent({
|
|
276
|
+
llm: { ... },
|
|
277
|
+
knowledge
|
|
278
|
+
});
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### 自定义工具验证
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
tools.register({
|
|
285
|
+
name: 'send_email',
|
|
286
|
+
description: '发送电子邮件',
|
|
287
|
+
parameters: {
|
|
288
|
+
type: 'object',
|
|
289
|
+
properties: {
|
|
290
|
+
to: { type: 'string', format: 'email' },
|
|
291
|
+
subject: { type: 'string', minLength: 1 },
|
|
292
|
+
body: { type: 'string' }
|
|
293
|
+
},
|
|
294
|
+
required: ['to', 'subject', 'body']
|
|
295
|
+
},
|
|
296
|
+
validate: async (params) => {
|
|
297
|
+
// 自定义验证逻辑
|
|
298
|
+
if (!params.to.endsWith('@company.com')) {
|
|
299
|
+
throw new Error('只能发送到公司邮箱');
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
execute: async (params) => {
|
|
303
|
+
// 发送邮件
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## API 参考
|
|
309
|
+
|
|
310
|
+
### Agent
|
|
311
|
+
|
|
312
|
+
主要的智能体类。
|
|
313
|
+
|
|
314
|
+
#### 构造函数
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
new Agent(config: AgentConfig)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
#### 方法
|
|
321
|
+
|
|
322
|
+
- `chat(message: string, options?: ChatOptions): Promise<AgentResponse>`
|
|
323
|
+
- `chatStream(message: string, options?: ChatOptions): AsyncIterator<StreamChunk>`
|
|
324
|
+
- `loadPlugin(plugin: Plugin): Promise<void>`
|
|
325
|
+
- `unloadPlugin(pluginName: string): void`
|
|
326
|
+
|
|
327
|
+
### ToolRegistry
|
|
328
|
+
|
|
329
|
+
管理工具注册和执行。
|
|
330
|
+
|
|
331
|
+
#### 方法
|
|
332
|
+
|
|
333
|
+
- `register(tool: Tool): void`
|
|
334
|
+
- `registerBatch(tools: Tool[]): void`
|
|
335
|
+
- `unregister(toolName: string): void`
|
|
336
|
+
- `get(toolName: string): Tool | undefined`
|
|
337
|
+
- `list(): Tool[]`
|
|
338
|
+
|
|
339
|
+
### KnowledgeStore
|
|
340
|
+
|
|
341
|
+
管理文档和语义搜索。
|
|
342
|
+
|
|
343
|
+
#### 方法
|
|
344
|
+
|
|
345
|
+
- `addDocument(doc: Document): Promise<void>`
|
|
346
|
+
- `addDocuments(docs: Document[]): Promise<void>`
|
|
347
|
+
- `search(query: string, options?: SearchOptions): Promise<SearchResult[]>`
|
|
348
|
+
- `delete(docId: string): Promise<void>`
|
|
349
|
+
|
|
350
|
+
## 示例
|
|
351
|
+
|
|
352
|
+
查看 [examples](./examples/) 目录获取完整示例:
|
|
353
|
+
|
|
354
|
+
- [基础聊天机器人](./examples/basic-chatbot/)
|
|
355
|
+
- [带工具的智能体](./examples/agent-with-tools/)
|
|
356
|
+
- [RAG 系统](./examples/rag-system/)
|
|
357
|
+
- [多 LLM 路由](./examples/multi-llm/)
|
|
358
|
+
- [流式响应](./examples/streaming/)
|
|
359
|
+
|
|
360
|
+
## 许可证
|
|
361
|
+
|
|
362
|
+
MIT
|
|
363
|
+
|
|
364
|
+
## 贡献
|
|
365
|
+
|
|
366
|
+
欢迎贡献!请查看我们的[贡献指南](../../CONTRIBUTING.zh-CN.md)。
|
|
367
|
+
|
|
368
|
+
## 支持
|
|
369
|
+
|
|
370
|
+
- **文档**: https://chajian.github.io/agentic/
|
|
371
|
+
- **Issues**: https://github.com/Chajian/agentic/issues
|
|
372
|
+
- **讨论**: https://github.com/Chajian/agentic/discussions
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Logger
|
|
3
|
+
*
|
|
4
|
+
* Records tool executions, configuration changes, and errors
|
|
5
|
+
* for audit and troubleshooting purposes.
|
|
6
|
+
*
|
|
7
|
+
* _Requirements: 10.1, 10.2, 10.3_
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Operation types that can be logged
|
|
11
|
+
*/
|
|
12
|
+
export type OperationType = 'tool_execution' | 'config_change' | 'knowledge_add' | 'knowledge_delete' | 'session_create' | 'session_close' | 'error';
|
|
13
|
+
/**
|
|
14
|
+
* Status of an operation
|
|
15
|
+
*/
|
|
16
|
+
export type OperationStatus = 'success' | 'failure' | 'pending';
|
|
17
|
+
/**
|
|
18
|
+
* Operation log entry
|
|
19
|
+
*/
|
|
20
|
+
export interface OperationLog {
|
|
21
|
+
/** Unique log entry ID */
|
|
22
|
+
id: string;
|
|
23
|
+
/** Session ID associated with this operation */
|
|
24
|
+
sessionId?: string;
|
|
25
|
+
/** Type of operation */
|
|
26
|
+
operationType: OperationType;
|
|
27
|
+
/** Target of the operation (e.g., tool name, config key) */
|
|
28
|
+
target?: string;
|
|
29
|
+
/** Parameters passed to the operation */
|
|
30
|
+
params?: Record<string, unknown>;
|
|
31
|
+
/** Result of the operation */
|
|
32
|
+
result?: Record<string, unknown>;
|
|
33
|
+
/** Operation status */
|
|
34
|
+
status: OperationStatus;
|
|
35
|
+
/** Error message if operation failed */
|
|
36
|
+
errorMessage?: string;
|
|
37
|
+
/** Error stack trace if available */
|
|
38
|
+
errorStack?: string;
|
|
39
|
+
/** Timestamp when the operation occurred */
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
/** Duration of the operation in milliseconds */
|
|
42
|
+
durationMs?: number;
|
|
43
|
+
/** Additional metadata */
|
|
44
|
+
metadata?: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Input for creating a tool execution log
|
|
48
|
+
*/
|
|
49
|
+
export interface ToolExecutionLogInput {
|
|
50
|
+
/** Session ID */
|
|
51
|
+
sessionId?: string;
|
|
52
|
+
/** Tool name */
|
|
53
|
+
toolName: string;
|
|
54
|
+
/** Tool arguments */
|
|
55
|
+
args: Record<string, unknown>;
|
|
56
|
+
/** Execution result */
|
|
57
|
+
result: {
|
|
58
|
+
success: boolean;
|
|
59
|
+
content: string;
|
|
60
|
+
data?: unknown;
|
|
61
|
+
error?: {
|
|
62
|
+
code: string;
|
|
63
|
+
message: string;
|
|
64
|
+
details?: unknown;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/** Execution duration in milliseconds */
|
|
68
|
+
durationMs: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Input for creating a config change log
|
|
72
|
+
*/
|
|
73
|
+
export interface ConfigChangeLogInput {
|
|
74
|
+
/** Session ID */
|
|
75
|
+
sessionId?: string;
|
|
76
|
+
/** Config key that was changed */
|
|
77
|
+
configKey: string;
|
|
78
|
+
/** Value before the change */
|
|
79
|
+
beforeValue?: unknown;
|
|
80
|
+
/** Value after the change */
|
|
81
|
+
afterValue?: unknown;
|
|
82
|
+
/** Additional metadata */
|
|
83
|
+
metadata?: Record<string, unknown>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Input for creating an error log
|
|
87
|
+
*/
|
|
88
|
+
export interface ErrorLogInput {
|
|
89
|
+
/** Session ID */
|
|
90
|
+
sessionId?: string;
|
|
91
|
+
/** Error message */
|
|
92
|
+
message: string;
|
|
93
|
+
/** Error stack trace */
|
|
94
|
+
stack?: string;
|
|
95
|
+
/** Context where the error occurred */
|
|
96
|
+
context?: string;
|
|
97
|
+
/** Additional error details */
|
|
98
|
+
details?: Record<string, unknown>;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Audit Logger
|
|
102
|
+
*
|
|
103
|
+
* In-memory audit logger that records all operations performed by the Agent.
|
|
104
|
+
* Provides methods for logging tool executions, config changes, and errors.
|
|
105
|
+
*/
|
|
106
|
+
export declare class AuditLogger {
|
|
107
|
+
private logs;
|
|
108
|
+
private logsBySession;
|
|
109
|
+
private logsByType;
|
|
110
|
+
/**
|
|
111
|
+
* Log a tool execution
|
|
112
|
+
*
|
|
113
|
+
* @param input - Tool execution details
|
|
114
|
+
* @returns The created log entry
|
|
115
|
+
*/
|
|
116
|
+
logToolExecution(input: ToolExecutionLogInput): OperationLog;
|
|
117
|
+
/**
|
|
118
|
+
* Log a configuration change
|
|
119
|
+
*
|
|
120
|
+
* @param input - Config change details
|
|
121
|
+
* @returns The created log entry
|
|
122
|
+
*/
|
|
123
|
+
logConfigChange(input: ConfigChangeLogInput): OperationLog;
|
|
124
|
+
/**
|
|
125
|
+
* Log an error
|
|
126
|
+
*
|
|
127
|
+
* @param input - Error details
|
|
128
|
+
* @returns The created log entry
|
|
129
|
+
*/
|
|
130
|
+
logError(input: ErrorLogInput): OperationLog;
|
|
131
|
+
/**
|
|
132
|
+
* Log a knowledge addition
|
|
133
|
+
*
|
|
134
|
+
* @param sessionId - Session ID
|
|
135
|
+
* @param documentId - Document ID
|
|
136
|
+
* @param category - Document category
|
|
137
|
+
* @param title - Document title
|
|
138
|
+
* @returns The created log entry
|
|
139
|
+
*/
|
|
140
|
+
logKnowledgeAdd(sessionId: string | undefined, documentId: string, category: string, title?: string): OperationLog;
|
|
141
|
+
/**
|
|
142
|
+
* Log a knowledge deletion
|
|
143
|
+
*
|
|
144
|
+
* @param sessionId - Session ID
|
|
145
|
+
* @param documentId - Document ID
|
|
146
|
+
* @param success - Whether deletion was successful
|
|
147
|
+
* @returns The created log entry
|
|
148
|
+
*/
|
|
149
|
+
logKnowledgeDelete(sessionId: string | undefined, documentId: string, success: boolean): OperationLog;
|
|
150
|
+
/**
|
|
151
|
+
* Log a session creation
|
|
152
|
+
*
|
|
153
|
+
* @param sessionId - Session ID
|
|
154
|
+
* @param metadata - Session metadata
|
|
155
|
+
* @returns The created log entry
|
|
156
|
+
*/
|
|
157
|
+
logSessionCreate(sessionId: string, metadata?: Record<string, unknown>): OperationLog;
|
|
158
|
+
/**
|
|
159
|
+
* Log a session close
|
|
160
|
+
*
|
|
161
|
+
* @param sessionId - Session ID
|
|
162
|
+
* @returns The created log entry
|
|
163
|
+
*/
|
|
164
|
+
logSessionClose(sessionId: string): OperationLog;
|
|
165
|
+
/**
|
|
166
|
+
* Get a log entry by ID
|
|
167
|
+
*
|
|
168
|
+
* @param logId - Log entry ID
|
|
169
|
+
* @returns The log entry or undefined
|
|
170
|
+
*/
|
|
171
|
+
getLog(logId: string): OperationLog | undefined;
|
|
172
|
+
/**
|
|
173
|
+
* Get all logs for a session
|
|
174
|
+
*
|
|
175
|
+
* @param sessionId - Session ID
|
|
176
|
+
* @returns Array of log entries
|
|
177
|
+
*/
|
|
178
|
+
getLogsBySession(sessionId: string): OperationLog[];
|
|
179
|
+
/**
|
|
180
|
+
* Get all logs of a specific type
|
|
181
|
+
*
|
|
182
|
+
* @param operationType - Operation type
|
|
183
|
+
* @returns Array of log entries
|
|
184
|
+
*/
|
|
185
|
+
getLogsByType(operationType: OperationType): OperationLog[];
|
|
186
|
+
/**
|
|
187
|
+
* Get all logs
|
|
188
|
+
*
|
|
189
|
+
* @returns Array of all log entries
|
|
190
|
+
*/
|
|
191
|
+
getAllLogs(): OperationLog[];
|
|
192
|
+
/**
|
|
193
|
+
* Get total log count
|
|
194
|
+
*
|
|
195
|
+
* @returns Total number of logs
|
|
196
|
+
*/
|
|
197
|
+
getLogCount(): number;
|
|
198
|
+
/**
|
|
199
|
+
* Clear all logs
|
|
200
|
+
*/
|
|
201
|
+
clear(): void;
|
|
202
|
+
/**
|
|
203
|
+
* Add a log entry to storage
|
|
204
|
+
*/
|
|
205
|
+
private addLog;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Create a new AuditLogger instance
|
|
209
|
+
*/
|
|
210
|
+
export declare function createAuditLogger(): AuditLogger;
|
|
211
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"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"}
|