opc-agent 4.1.0 → 4.1.1

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.
Files changed (245) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +20 -20
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +14 -14
  3. package/.github/PULL_REQUEST_TEMPLATE.md +13 -13
  4. package/CHANGELOG.md +48 -48
  5. package/CONTRIBUTING.md +36 -36
  6. package/README.zh-CN.md +497 -497
  7. package/dist/channels/wechat.js +6 -6
  8. package/dist/deploy/index.js +56 -56
  9. package/dist/studio/server.js +30 -1
  10. package/dist/studio-ui/index.html +230 -10
  11. package/dist/ui/components.js +105 -105
  12. package/examples/README.md +22 -22
  13. package/examples/basic-agent.ts +90 -90
  14. package/examples/brain-integration.ts +71 -71
  15. package/examples/multi-channel.ts +74 -74
  16. package/fix-sidebar.mjs +188 -188
  17. package/install.ps1 +154 -154
  18. package/install.sh +164 -164
  19. package/package.json +1 -1
  20. package/scripts/install.ps1 +31 -31
  21. package/scripts/install.sh +40 -40
  22. package/serve-studio.js +13 -13
  23. package/serve-test.js +25 -25
  24. package/src/channels/dingtalk.ts +46 -46
  25. package/src/channels/email.ts +351 -351
  26. package/src/channels/feishu.ts +349 -349
  27. package/src/channels/googlechat.ts +42 -42
  28. package/src/channels/imessage.ts +31 -31
  29. package/src/channels/irc.ts +82 -82
  30. package/src/channels/line.ts +32 -32
  31. package/src/channels/matrix.ts +33 -33
  32. package/src/channels/mattermost.ts +57 -57
  33. package/src/channels/msteams.ts +32 -32
  34. package/src/channels/nostr.ts +32 -32
  35. package/src/channels/qq.ts +33 -33
  36. package/src/channels/signal.ts +32 -32
  37. package/src/channels/sms.ts +33 -33
  38. package/src/channels/telegram.ts +616 -616
  39. package/src/channels/twitch.ts +65 -65
  40. package/src/channels/voice-call.ts +100 -100
  41. package/src/channels/websocket.ts +399 -399
  42. package/src/channels/wechat.ts +329 -329
  43. package/src/channels/whatsapp.ts +32 -32
  44. package/src/cli/chat.ts +99 -99
  45. package/src/cli/setup.ts +314 -314
  46. package/src/core/agent.ts +476 -476
  47. package/src/core/api-server.ts +277 -277
  48. package/src/core/audio.ts +98 -98
  49. package/src/core/collaboration.ts +275 -275
  50. package/src/core/context-discovery.ts +85 -85
  51. package/src/core/context-refs.ts +140 -140
  52. package/src/core/gateway.ts +106 -106
  53. package/src/core/heartbeat.ts +51 -51
  54. package/src/core/hooks.ts +105 -105
  55. package/src/core/ide-bridge.ts +133 -133
  56. package/src/core/node-network.ts +86 -86
  57. package/src/core/profiles.ts +122 -122
  58. package/src/core/scheduler.ts +187 -187
  59. package/src/core/session-manager.ts +137 -137
  60. package/src/core/subagent.ts +98 -98
  61. package/src/core/vision.ts +180 -180
  62. package/src/core/workflow-graph.ts +365 -365
  63. package/src/daemon.ts +96 -96
  64. package/src/deploy/index.ts +255 -255
  65. package/src/doctor.ts +156 -156
  66. package/src/eval/index.ts +211 -211
  67. package/src/eval/suites/basic.json +16 -16
  68. package/src/eval/suites/memory.json +12 -12
  69. package/src/eval/suites/safety.json +14 -14
  70. package/src/hub/brain-seed.ts +54 -54
  71. package/src/hub/client.ts +60 -60
  72. package/src/mcp/servers/calculator-mcp.ts +65 -65
  73. package/src/mcp/servers/crypto-mcp.ts +73 -73
  74. package/src/mcp/servers/database-mcp.ts +72 -72
  75. package/src/mcp/servers/datetime-mcp.ts +69 -69
  76. package/src/mcp/servers/filesystem.ts +66 -66
  77. package/src/mcp/servers/github-mcp.ts +58 -58
  78. package/src/mcp/servers/index.ts +63 -63
  79. package/src/mcp/servers/json-mcp.ts +102 -102
  80. package/src/mcp/servers/memory-mcp.ts +56 -56
  81. package/src/mcp/servers/regex-mcp.ts +53 -53
  82. package/src/mcp/servers/web-mcp.ts +49 -49
  83. package/src/memory/context-compressor.ts +189 -189
  84. package/src/memory/seed-loader.ts +212 -212
  85. package/src/memory/user-profiler.ts +215 -215
  86. package/src/plugins/content-filter.ts +23 -23
  87. package/src/plugins/logger.ts +18 -18
  88. package/src/plugins/rate-limiter.ts +38 -38
  89. package/src/protocols/a2a/client.ts +132 -132
  90. package/src/protocols/a2a/index.ts +8 -8
  91. package/src/protocols/a2a/server.ts +333 -333
  92. package/src/protocols/a2a/types.ts +88 -88
  93. package/src/protocols/a2a/utils.ts +50 -50
  94. package/src/protocols/agui/client.ts +83 -83
  95. package/src/protocols/agui/index.ts +4 -4
  96. package/src/protocols/agui/server.ts +218 -218
  97. package/src/protocols/agui/types.ts +153 -153
  98. package/src/protocols/index.ts +2 -2
  99. package/src/protocols/mcp/agent-tools.ts +134 -134
  100. package/src/protocols/mcp/index.ts +8 -8
  101. package/src/protocols/mcp/server.ts +262 -262
  102. package/src/protocols/mcp/types.ts +69 -69
  103. package/src/providers/index.ts +632 -632
  104. package/src/publish/index.ts +376 -376
  105. package/src/scheduler/cron-engine.ts +191 -191
  106. package/src/scheduler/index.ts +2 -2
  107. package/src/schema/oad.ts +217 -217
  108. package/src/security/approval.ts +131 -131
  109. package/src/security/approvals.ts +143 -143
  110. package/src/security/elevated.ts +105 -105
  111. package/src/security/guardrails.ts +248 -248
  112. package/src/security/index.ts +9 -9
  113. package/src/security/keys.ts +87 -87
  114. package/src/security/secrets.ts +129 -129
  115. package/src/skills/builtin/index.ts +408 -408
  116. package/src/skills/marketplace.ts +113 -113
  117. package/src/skills/types.ts +42 -42
  118. package/src/studio/server.ts +31 -1
  119. package/src/studio/templates-data.ts +178 -178
  120. package/src/studio-ui/index.html +230 -10
  121. package/src/telemetry/index.ts +324 -324
  122. package/src/tools/builtin/browser.ts +299 -299
  123. package/src/tools/builtin/datetime.ts +41 -41
  124. package/src/tools/builtin/file.ts +107 -107
  125. package/src/tools/builtin/home-assistant.ts +116 -116
  126. package/src/tools/builtin/rl-tools.ts +243 -243
  127. package/src/tools/builtin/shell.ts +43 -43
  128. package/src/tools/builtin/vision.ts +64 -64
  129. package/src/tools/builtin/web-search.ts +126 -126
  130. package/src/tools/builtin/web.ts +35 -35
  131. package/src/tools/document-processor.ts +213 -213
  132. package/src/tools/image-generator.ts +150 -150
  133. package/src/tools/integrations/calendar.ts +73 -73
  134. package/src/tools/integrations/code-exec.ts +39 -39
  135. package/src/tools/integrations/csv-analyzer.ts +92 -92
  136. package/src/tools/integrations/database.ts +44 -44
  137. package/src/tools/integrations/email-send.ts +76 -76
  138. package/src/tools/integrations/git-tool.ts +42 -42
  139. package/src/tools/integrations/github-tool.ts +76 -76
  140. package/src/tools/integrations/image-gen.ts +56 -56
  141. package/src/tools/integrations/index.ts +92 -92
  142. package/src/tools/integrations/jira.ts +83 -83
  143. package/src/tools/integrations/notion.ts +71 -71
  144. package/src/tools/integrations/npm-tool.ts +48 -48
  145. package/src/tools/integrations/pdf-reader.ts +58 -58
  146. package/src/tools/integrations/slack.ts +65 -65
  147. package/src/tools/integrations/summarizer.ts +49 -49
  148. package/src/tools/integrations/translator.ts +48 -48
  149. package/src/tools/integrations/trello.ts +60 -60
  150. package/src/tools/integrations/vector-search.ts +42 -42
  151. package/src/tools/integrations/web-scraper.ts +47 -47
  152. package/src/tools/integrations/web-search.ts +58 -58
  153. package/src/tools/integrations/webhook.ts +38 -38
  154. package/src/tools/mcp-client.ts +131 -131
  155. package/src/tools/web-scraper.ts +179 -179
  156. package/src/tools/web-search.ts +180 -180
  157. package/src/ui/components.ts +127 -127
  158. package/srv-out.txt +1 -1
  159. package/templates/ecommerce-assistant/README.md +45 -45
  160. package/templates/ecommerce-assistant/oad.yaml +47 -47
  161. package/templates/tech-support/README.md +43 -43
  162. package/templates/tech-support/oad.yaml +45 -45
  163. package/test-agent/Dockerfile +9 -9
  164. package/test-agent/README.md +50 -50
  165. package/test-agent/agent.yaml +23 -23
  166. package/test-agent/docker-compose.yml +11 -11
  167. package/test-agent/oad.yaml +31 -31
  168. package/test-agent/package-lock.json +1492 -1492
  169. package/test-agent/package.json +17 -17
  170. package/test-agent/src/index.ts +24 -24
  171. package/test-agent/src/skills/echo.ts +15 -15
  172. package/test-agent/tsconfig.json +24 -24
  173. package/test-full.js +43 -43
  174. package/test-sidebar.js +22 -22
  175. package/test-studio3.js +75 -75
  176. package/test-studio4.js +41 -41
  177. package/tests/a2a-protocol.test.ts +285 -285
  178. package/tests/agui-protocol.test.ts +246 -246
  179. package/tests/api-server.test.ts +148 -148
  180. package/tests/approvals.test.ts +89 -89
  181. package/tests/audio.test.ts +40 -40
  182. package/tests/brain-seed-extended.test.ts +490 -490
  183. package/tests/brain-seed.test.ts +239 -239
  184. package/tests/browser.test.ts +179 -179
  185. package/tests/channels/discord.test.ts +79 -79
  186. package/tests/channels/email.test.ts +148 -148
  187. package/tests/channels/feishu.test.ts +123 -123
  188. package/tests/channels/telegram.test.ts +129 -129
  189. package/tests/channels/websocket.test.ts +53 -53
  190. package/tests/channels/wechat.test.ts +170 -170
  191. package/tests/channels-extra.test.ts +45 -45
  192. package/tests/chat-cli.test.ts +160 -160
  193. package/tests/cli.test.ts +46 -46
  194. package/tests/context-compressor.test.ts +172 -172
  195. package/tests/context-refs.test.ts +121 -121
  196. package/tests/cron-engine.test.ts +101 -101
  197. package/tests/daemon.test.ts +135 -135
  198. package/tests/deepbrain-wire.test.ts +234 -234
  199. package/tests/deploy-and-dag.test.ts +196 -196
  200. package/tests/doctor.test.ts +38 -38
  201. package/tests/document-processor.test.ts +69 -69
  202. package/tests/e2e-nocode.test.ts +442 -442
  203. package/tests/elevated.test.ts +69 -69
  204. package/tests/eval.test.ts +173 -173
  205. package/tests/gateway.test.ts +63 -63
  206. package/tests/guardrails.test.ts +177 -177
  207. package/tests/home-assistant.test.ts +40 -40
  208. package/tests/hooks.test.ts +79 -79
  209. package/tests/ide-bridge.test.ts +38 -38
  210. package/tests/image-generator.test.ts +84 -84
  211. package/tests/init-role.test.ts +124 -124
  212. package/tests/integrations.test.ts +249 -249
  213. package/tests/mcp-client.test.ts +92 -92
  214. package/tests/mcp-server.test.ts +178 -178
  215. package/tests/mcp-servers.test.ts +260 -260
  216. package/tests/node-network.test.ts +74 -74
  217. package/tests/plugin-a2a-enhanced.test.ts +230 -230
  218. package/tests/profiles.test.ts +61 -61
  219. package/tests/publish.test.ts +231 -231
  220. package/tests/rl-tools.test.ts +93 -93
  221. package/tests/sandbox-manager.test.ts +46 -46
  222. package/tests/scheduler.test.ts +200 -200
  223. package/tests/secrets.test.ts +107 -107
  224. package/tests/security-enhanced.test.ts +233 -233
  225. package/tests/settings-api.test.ts +148 -148
  226. package/tests/setup.test.ts +73 -73
  227. package/tests/subagent.test.ts +193 -193
  228. package/tests/telegram-discord.test.ts +60 -60
  229. package/tests/telemetry.test.ts +186 -186
  230. package/tests/user-profiler.test.ts +169 -169
  231. package/tests/v090-features.test.ts +254 -254
  232. package/tests/vision.test.ts +61 -61
  233. package/tests/voice-call.test.ts +47 -47
  234. package/tests/voice-enhanced.test.ts +169 -169
  235. package/tests/voice-interaction.test.ts +38 -38
  236. package/tests/web-search.test.ts +155 -155
  237. package/tests/workflow-graph.test.ts +279 -279
  238. package/tutorial/customer-service-agent/README.md +612 -612
  239. package/tutorial/customer-service-agent/SOUL.md +26 -26
  240. package/tutorial/customer-service-agent/agent.yaml +63 -63
  241. package/tutorial/customer-service-agent/package.json +19 -19
  242. package/tutorial/customer-service-agent/src/index.ts +69 -69
  243. package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
  244. package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
  245. package/tutorial/customer-service-agent/tsconfig.json +14 -14
@@ -1,26 +1,26 @@
1
- # SOUL.md — Customer Service Agent Personality
2
-
3
- ## 我是谁 / Who I Am
4
-
5
- 我是一个专业的智能客服助手,服务于电商平台的客户。
6
-
7
- ## 性格 / Personality
8
-
9
- - **耐心 Patient** — 无论客户问多少次,我都不会不耐烦
10
- - **专业 Professional** — 回答准确、有条理
11
- - **温暖 Warm** — 让客户感受到被重视
12
- - **诚实 Honest** — 不确定时坦诚告知,绝不编造信息
13
-
14
- ## 沟通风格 / Communication Style
15
-
16
- - 使用中文,术语保留英文
17
- - 简洁明了,避免冗长
18
- - 主动提供相关信息
19
- - 遇到无法解决的问题,立即创建工单转人工
20
-
21
- ## 边界 / Boundaries
22
-
23
- - 不讨论政治、宗教等敏感话题
24
- - 不提供法律、医疗建议
25
- - 不泄露内部系统信息
26
- - 不代表公司做出超出权限的承诺
1
+ # SOUL.md — Customer Service Agent Personality
2
+
3
+ ## 我是谁 / Who I Am
4
+
5
+ 我是一个专业的智能客服助手,服务于电商平台的客户。
6
+
7
+ ## 性格 / Personality
8
+
9
+ - **耐心 Patient** — 无论客户问多少次,我都不会不耐烦
10
+ - **专业 Professional** — 回答准确、有条理
11
+ - **温暖 Warm** — 让客户感受到被重视
12
+ - **诚实 Honest** — 不确定时坦诚告知,绝不编造信息
13
+
14
+ ## 沟通风格 / Communication Style
15
+
16
+ - 使用中文,术语保留英文
17
+ - 简洁明了,避免冗长
18
+ - 主动提供相关信息
19
+ - 遇到无法解决的问题,立即创建工单转人工
20
+
21
+ ## 边界 / Boundaries
22
+
23
+ - 不讨论政治、宗教等敏感话题
24
+ - 不提供法律、医疗建议
25
+ - 不泄露内部系统信息
26
+ - 不代表公司做出超出权限的承诺
@@ -1,63 +1,63 @@
1
- apiVersion: opc/v1
2
- kind: Agent
3
- metadata:
4
- name: customer-service
5
- version: 1.0.0
6
- description: 智能客服 Agent — Smart Customer Service Agent
7
- author: deepleaper
8
- license: MIT
9
-
10
- spec:
11
- # LLM 配置 / LLM Configuration
12
- model: qwen2.5
13
- provider:
14
- default: ollama
15
-
16
- # 系统提示词 / System Prompt
17
- systemPrompt: |
18
- 你是一个专业的客服助手,代表我们的电商平台为客户提供帮助。
19
- You are a professional customer service assistant.
20
-
21
- 规则 / Rules:
22
- - 用中文回答,必要时使用英文术语
23
- - 始终保持礼貌和耐心
24
- - 如果不确定,创建工单转人工
25
- - 不要编造信息
26
-
27
- # 频道配置 / Channel Configuration
28
- channels:
29
- - type: web
30
- port: 3000
31
- # Uncomment to enable Telegram:
32
- # - type: telegram
33
- # token: ${TELEGRAM_BOT_TOKEN}
34
- # mode: polling
35
- # Uncomment to enable Discord:
36
- # - type: discord
37
- # token: ${DISCORD_BOT_TOKEN}
38
- # guildId: "your-server-id"
39
-
40
- # 记忆系统 / Memory System
41
- memory:
42
- shortTerm: true
43
-
44
- # 技能列表 / Skills
45
- skills:
46
- - name: faq
47
- - name: ticket
48
-
49
- # 调度任务 / Scheduled Jobs
50
- scheduler:
51
- jobs:
52
- - name: daily-report
53
- schedule: "0 9 * * *"
54
- task: "Generate daily customer service report"
55
- - name: cleanup-old-tickets
56
- schedule: "0 2 * * 0"
57
- task: "Archive tickets older than 30 days"
58
-
59
- # 安全配置 / Security
60
- security:
61
- approval: dangerous
62
- sandbox:
63
- maxFileSize: 10485760
1
+ apiVersion: opc/v1
2
+ kind: Agent
3
+ metadata:
4
+ name: customer-service
5
+ version: 1.0.0
6
+ description: 智能客服 Agent — Smart Customer Service Agent
7
+ author: deepleaper
8
+ license: MIT
9
+
10
+ spec:
11
+ # LLM 配置 / LLM Configuration
12
+ model: qwen2.5
13
+ provider:
14
+ default: ollama
15
+
16
+ # 系统提示词 / System Prompt
17
+ systemPrompt: |
18
+ 你是一个专业的客服助手,代表我们的电商平台为客户提供帮助。
19
+ You are a professional customer service assistant.
20
+
21
+ 规则 / Rules:
22
+ - 用中文回答,必要时使用英文术语
23
+ - 始终保持礼貌和耐心
24
+ - 如果不确定,创建工单转人工
25
+ - 不要编造信息
26
+
27
+ # 频道配置 / Channel Configuration
28
+ channels:
29
+ - type: web
30
+ port: 3000
31
+ # Uncomment to enable Telegram:
32
+ # - type: telegram
33
+ # token: ${TELEGRAM_BOT_TOKEN}
34
+ # mode: polling
35
+ # Uncomment to enable Discord:
36
+ # - type: discord
37
+ # token: ${DISCORD_BOT_TOKEN}
38
+ # guildId: "your-server-id"
39
+
40
+ # 记忆系统 / Memory System
41
+ memory:
42
+ shortTerm: true
43
+
44
+ # 技能列表 / Skills
45
+ skills:
46
+ - name: faq
47
+ - name: ticket
48
+
49
+ # 调度任务 / Scheduled Jobs
50
+ scheduler:
51
+ jobs:
52
+ - name: daily-report
53
+ schedule: "0 9 * * *"
54
+ task: "Generate daily customer service report"
55
+ - name: cleanup-old-tickets
56
+ schedule: "0 2 * * 0"
57
+ task: "Archive tickets older than 30 days"
58
+
59
+ # 安全配置 / Security
60
+ security:
61
+ approval: dangerous
62
+ sandbox:
63
+ maxFileSize: 10485760
@@ -1,19 +1,19 @@
1
- {
2
- "name": "customer-service-agent",
3
- "version": "1.0.0",
4
- "description": "智能客服 Agent tutorial — OPC Agent comprehensive example",
5
- "main": "dist/index.js",
6
- "scripts": {
7
- "build": "tsc",
8
- "start": "opc start",
9
- "dev": "opc chat",
10
- "test": "echo \"tutorial example — no tests configured\" && exit 0"
11
- },
12
- "dependencies": {
13
- "opc-agent": "latest",
14
- "deepbrain": "latest"
15
- },
16
- "devDependencies": {
17
- "typescript": "^5.0.0"
18
- }
19
- }
1
+ {
2
+ "name": "customer-service-agent",
3
+ "version": "1.0.0",
4
+ "description": "智能客服 Agent tutorial — OPC Agent comprehensive example",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "start": "opc start",
9
+ "dev": "opc chat",
10
+ "test": "echo \"tutorial example — no tests configured\" && exit 0"
11
+ },
12
+ "dependencies": {
13
+ "opc-agent": "latest",
14
+ "deepbrain": "latest"
15
+ },
16
+ "devDependencies": {
17
+ "typescript": "^5.0.0"
18
+ }
19
+ }
@@ -1,69 +1,69 @@
1
- /**
2
- * Customer Service Agent — Entry Point
3
- * 客服 Agent 入口文件
4
- *
5
- * Demonstrates: Agent init, DeepBrain memory, skills, tools, workflows, plugins
6
- */
7
- import { Agent, getBuiltinTools, WorkflowBuilder } from 'opc-agent';
8
- import { loggerPlugin, rateLimiterPlugin } from 'opc-agent';
9
- import { Brain } from 'deepbrain';
10
-
11
- // === 1. DeepBrain 记忆初始化 / Initialize Memory ===
12
- const brain = new Brain({
13
- database: './data/customer-brain.db',
14
- embedding_provider: 'ollama',
15
- });
16
- await brain.connect();
17
-
18
- // === 2. 内置工具 / Built-in Tools ===
19
- const tools = getBuiltinTools('./workspace');
20
-
21
- // === 3. 创建 Agent / Create Agent ===
22
- const agent = new Agent('./agent.yaml', {
23
- tools,
24
- plugins: [
25
- loggerPlugin({ level: 'info', output: './logs/agent.log' }),
26
- rateLimiterPlugin({ maxRequests: 60, windowMs: 60000 }),
27
- ],
28
- });
29
-
30
- // === 4. 记忆钩子 / Memory Hooks ===
31
- agent.on('message', async (msg, response) => {
32
- // 存储对话用于语义搜索 / Store conversations for semantic search
33
- await brain.put(
34
- `conv-${msg.id}`,
35
- `Q: ${msg.content}\nA: ${response.content}`
36
- );
37
- });
38
-
39
- agent.on('beforeReply', async (ctx) => {
40
- // 搜索相关历史对话 / Search relevant past conversations
41
- const relevant = await brain.query(ctx.message, { limit: 3 });
42
- if (relevant.length > 0) {
43
- ctx.additionalContext = relevant.map((r: { content: string }) => r.content).join('\n');
44
- }
45
- });
46
-
47
- // === 5. 工作流 / Workflow: Customer Onboarding ===
48
- const onboarding = new WorkflowBuilder()
49
- .start('greet')
50
- .addAction('greet', async (_ctx) => {
51
- return '欢迎!请问您是新客户还是老客户?';
52
- }, { next: 'check-type' })
53
- .addCondition('check-type',
54
- (ctx) => ctx.variables.get('isNewCustomer'),
55
- 'new-flow', 'existing-flow')
56
- .addAction('new-flow', async (_ctx) => {
57
- return '让我帮您注册账号。请提供您的邮箱地址。';
58
- }, { next: 'done' })
59
- .addAction('existing-flow', async (_ctx) => {
60
- return '欢迎回来!有什么可以帮您?';
61
- }, { next: 'done' })
62
- .addAction('done', async () => 'Onboarding complete')
63
- .build();
64
-
65
- agent.registerWorkflow('onboarding', onboarding);
66
-
67
- // === 6. 启动 / Start ===
68
- await agent.start();
69
- console.log('🚀 Customer Service Agent is running!');
1
+ /**
2
+ * Customer Service Agent — Entry Point
3
+ * 客服 Agent 入口文件
4
+ *
5
+ * Demonstrates: Agent init, DeepBrain memory, skills, tools, workflows, plugins
6
+ */
7
+ import { Agent, getBuiltinTools, WorkflowBuilder } from 'opc-agent';
8
+ import { loggerPlugin, rateLimiterPlugin } from 'opc-agent';
9
+ import { Brain } from 'deepbrain';
10
+
11
+ // === 1. DeepBrain 记忆初始化 / Initialize Memory ===
12
+ const brain = new Brain({
13
+ database: './data/customer-brain.db',
14
+ embedding_provider: 'ollama',
15
+ });
16
+ await brain.connect();
17
+
18
+ // === 2. 内置工具 / Built-in Tools ===
19
+ const tools = getBuiltinTools('./workspace');
20
+
21
+ // === 3. 创建 Agent / Create Agent ===
22
+ const agent = new Agent('./agent.yaml', {
23
+ tools,
24
+ plugins: [
25
+ loggerPlugin({ level: 'info', output: './logs/agent.log' }),
26
+ rateLimiterPlugin({ maxRequests: 60, windowMs: 60000 }),
27
+ ],
28
+ });
29
+
30
+ // === 4. 记忆钩子 / Memory Hooks ===
31
+ agent.on('message', async (msg, response) => {
32
+ // 存储对话用于语义搜索 / Store conversations for semantic search
33
+ await brain.put(
34
+ `conv-${msg.id}`,
35
+ `Q: ${msg.content}\nA: ${response.content}`
36
+ );
37
+ });
38
+
39
+ agent.on('beforeReply', async (ctx) => {
40
+ // 搜索相关历史对话 / Search relevant past conversations
41
+ const relevant = await brain.query(ctx.message, { limit: 3 });
42
+ if (relevant.length > 0) {
43
+ ctx.additionalContext = relevant.map((r: { content: string }) => r.content).join('\n');
44
+ }
45
+ });
46
+
47
+ // === 5. 工作流 / Workflow: Customer Onboarding ===
48
+ const onboarding = new WorkflowBuilder()
49
+ .start('greet')
50
+ .addAction('greet', async (_ctx) => {
51
+ return '欢迎!请问您是新客户还是老客户?';
52
+ }, { next: 'check-type' })
53
+ .addCondition('check-type',
54
+ (ctx) => ctx.variables.get('isNewCustomer'),
55
+ 'new-flow', 'existing-flow')
56
+ .addAction('new-flow', async (_ctx) => {
57
+ return '让我帮您注册账号。请提供您的邮箱地址。';
58
+ }, { next: 'done' })
59
+ .addAction('existing-flow', async (_ctx) => {
60
+ return '欢迎回来!有什么可以帮您?';
61
+ }, { next: 'done' })
62
+ .addAction('done', async () => 'Onboarding complete')
63
+ .build();
64
+
65
+ agent.registerWorkflow('onboarding', onboarding);
66
+
67
+ // === 6. 启动 / Start ===
68
+ await agent.start();
69
+ console.log('🚀 Customer Service Agent is running!');
@@ -1,27 +1,27 @@
1
- /**
2
- * FAQ Skill — FAQ 查询技能
3
- * Looks up frequently asked questions by keyword matching.
4
- */
5
- import { BaseSkill } from 'opc-agent';
6
-
7
- export class FAQSkill extends BaseSkill {
8
- name = 'faq';
9
- description = 'Look up frequently asked questions';
10
- triggers = [/常见问题|FAQ|怎么退款|退货|配送|支付/i];
11
-
12
- async execute(input: string): Promise<string> {
13
- // 常见问题知识库 / FAQ Knowledge Base
14
- const faqs: Record<string, string> = {
15
- '退款': '退款将在3-5个工作日内到账。如超时未到账,请联系银行确认。',
16
- '退货': '请在收到商品7天内申请退货。商品需保持原包装,未使用。',
17
- '配送': '标准配送3-5天,加急配送1-2天。偏远地区可能延迟1-2天。',
18
- '支付': '支持支付宝、微信支付、银行卡(Visa/Mastercard/银联)。',
19
- };
20
-
21
- for (const [key, answer] of Object.entries(faqs)) {
22
- if (input.includes(key)) return answer;
23
- }
24
-
25
- return '请问您想了解什么?我们有以下常见问题:退款、退货、配送、支付';
26
- }
27
- }
1
+ /**
2
+ * FAQ Skill — FAQ 查询技能
3
+ * Looks up frequently asked questions by keyword matching.
4
+ */
5
+ import { BaseSkill } from 'opc-agent';
6
+
7
+ export class FAQSkill extends BaseSkill {
8
+ name = 'faq';
9
+ description = 'Look up frequently asked questions';
10
+ triggers = [/常见问题|FAQ|怎么退款|退货|配送|支付/i];
11
+
12
+ async execute(input: string): Promise<string> {
13
+ // 常见问题知识库 / FAQ Knowledge Base
14
+ const faqs: Record<string, string> = {
15
+ '退款': '退款将在3-5个工作日内到账。如超时未到账,请联系银行确认。',
16
+ '退货': '请在收到商品7天内申请退货。商品需保持原包装,未使用。',
17
+ '配送': '标准配送3-5天,加急配送1-2天。偏远地区可能延迟1-2天。',
18
+ '支付': '支持支付宝、微信支付、银行卡(Visa/Mastercard/银联)。',
19
+ };
20
+
21
+ for (const [key, answer] of Object.entries(faqs)) {
22
+ if (input.includes(key)) return answer;
23
+ }
24
+
25
+ return '请问您想了解什么?我们有以下常见问题:退款、退货、配送、支付';
26
+ }
27
+ }
@@ -1,22 +1,22 @@
1
- /**
2
- * Ticket Skill — 工单创建技能
3
- * Creates a support ticket for human follow-up.
4
- */
5
- import { BaseSkill } from 'opc-agent';
6
-
7
- export class TicketSkill extends BaseSkill {
8
- name = 'ticket';
9
- description = 'Create a support ticket for human follow-up';
10
- triggers = [/创建工单|提交问题|人工客服|投诉/i];
11
-
12
- async execute(input: string): Promise<string> {
13
- // 生成唯一工单号 / Generate unique ticket ID
14
- const ticketId = `TK-${Date.now().toString(36).toUpperCase()}`;
15
-
16
- // 实际项目中这里会写入数据库
17
- // In production, this would persist to a database
18
- console.log(`[Ticket Created] ${ticketId}: ${input}`);
19
-
20
- return `已创建工单 ${ticketId},客服团队将在2小时内联系您。\nTicket ${ticketId} created. Our team will contact you within 2 hours.`;
21
- }
22
- }
1
+ /**
2
+ * Ticket Skill — 工单创建技能
3
+ * Creates a support ticket for human follow-up.
4
+ */
5
+ import { BaseSkill } from 'opc-agent';
6
+
7
+ export class TicketSkill extends BaseSkill {
8
+ name = 'ticket';
9
+ description = 'Create a support ticket for human follow-up';
10
+ triggers = [/创建工单|提交问题|人工客服|投诉/i];
11
+
12
+ async execute(input: string): Promise<string> {
13
+ // 生成唯一工单号 / Generate unique ticket ID
14
+ const ticketId = `TK-${Date.now().toString(36).toUpperCase()}`;
15
+
16
+ // 实际项目中这里会写入数据库
17
+ // In production, this would persist to a database
18
+ console.log(`[Ticket Created] ${ticketId}: ${input}`);
19
+
20
+ return `已创建工单 ${ticketId},客服团队将在2小时内联系您。\nTicket ${ticketId} created. Our team will contact you within 2 hours.`;
21
+ }
22
+ }
@@ -1,14 +1,14 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "node",
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "declaration": true
12
- },
13
- "include": ["src/**/*"]
14
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "node",
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "declaration": true
12
+ },
13
+ "include": ["src/**/*"]
14
+ }