opc-agent 4.0.44 → 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 (250) 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/cli.js +2 -2
  9. package/dist/core/runtime.js +18 -0
  10. package/dist/deploy/index.js +56 -56
  11. package/dist/providers/index.js +39 -13
  12. package/dist/studio/server.js +211 -20
  13. package/dist/studio-ui/index.html +279 -24
  14. package/dist/ui/components.js +105 -105
  15. package/examples/README.md +22 -22
  16. package/examples/basic-agent.ts +90 -90
  17. package/examples/brain-integration.ts +71 -71
  18. package/examples/multi-channel.ts +74 -74
  19. package/fix-sidebar.mjs +188 -188
  20. package/install.ps1 +154 -154
  21. package/install.sh +164 -164
  22. package/package.json +1 -1
  23. package/scripts/install.ps1 +31 -31
  24. package/scripts/install.sh +40 -40
  25. package/serve-studio.js +13 -13
  26. package/serve-test.js +25 -25
  27. package/src/channels/dingtalk.ts +46 -46
  28. package/src/channels/email.ts +351 -351
  29. package/src/channels/feishu.ts +349 -349
  30. package/src/channels/googlechat.ts +42 -42
  31. package/src/channels/imessage.ts +31 -31
  32. package/src/channels/irc.ts +82 -82
  33. package/src/channels/line.ts +32 -32
  34. package/src/channels/matrix.ts +33 -33
  35. package/src/channels/mattermost.ts +57 -57
  36. package/src/channels/msteams.ts +32 -32
  37. package/src/channels/nostr.ts +32 -32
  38. package/src/channels/qq.ts +33 -33
  39. package/src/channels/signal.ts +32 -32
  40. package/src/channels/sms.ts +33 -33
  41. package/src/channels/telegram.ts +616 -616
  42. package/src/channels/twitch.ts +65 -65
  43. package/src/channels/voice-call.ts +100 -100
  44. package/src/channels/websocket.ts +399 -399
  45. package/src/channels/wechat.ts +329 -329
  46. package/src/channels/whatsapp.ts +32 -32
  47. package/src/cli/chat.ts +99 -99
  48. package/src/cli/setup.ts +314 -314
  49. package/src/cli.ts +2 -2
  50. package/src/core/agent.ts +476 -476
  51. package/src/core/api-server.ts +277 -277
  52. package/src/core/audio.ts +98 -98
  53. package/src/core/collaboration.ts +275 -275
  54. package/src/core/context-discovery.ts +85 -85
  55. package/src/core/context-refs.ts +140 -140
  56. package/src/core/gateway.ts +106 -106
  57. package/src/core/heartbeat.ts +51 -51
  58. package/src/core/hooks.ts +105 -105
  59. package/src/core/ide-bridge.ts +133 -133
  60. package/src/core/node-network.ts +86 -86
  61. package/src/core/profiles.ts +122 -122
  62. package/src/core/runtime.ts +18 -0
  63. package/src/core/scheduler.ts +187 -187
  64. package/src/core/session-manager.ts +137 -137
  65. package/src/core/subagent.ts +98 -98
  66. package/src/core/vision.ts +180 -180
  67. package/src/core/workflow-graph.ts +365 -365
  68. package/src/daemon.ts +96 -96
  69. package/src/deploy/index.ts +255 -255
  70. package/src/doctor.ts +156 -156
  71. package/src/eval/index.ts +211 -211
  72. package/src/eval/suites/basic.json +16 -16
  73. package/src/eval/suites/memory.json +12 -12
  74. package/src/eval/suites/safety.json +14 -14
  75. package/src/hub/brain-seed.ts +54 -54
  76. package/src/hub/client.ts +60 -60
  77. package/src/mcp/servers/calculator-mcp.ts +65 -65
  78. package/src/mcp/servers/crypto-mcp.ts +73 -73
  79. package/src/mcp/servers/database-mcp.ts +72 -72
  80. package/src/mcp/servers/datetime-mcp.ts +69 -69
  81. package/src/mcp/servers/filesystem.ts +66 -66
  82. package/src/mcp/servers/github-mcp.ts +58 -58
  83. package/src/mcp/servers/index.ts +63 -63
  84. package/src/mcp/servers/json-mcp.ts +102 -102
  85. package/src/mcp/servers/memory-mcp.ts +56 -56
  86. package/src/mcp/servers/regex-mcp.ts +53 -53
  87. package/src/mcp/servers/web-mcp.ts +49 -49
  88. package/src/memory/context-compressor.ts +189 -189
  89. package/src/memory/seed-loader.ts +212 -212
  90. package/src/memory/user-profiler.ts +215 -215
  91. package/src/plugins/content-filter.ts +23 -23
  92. package/src/plugins/logger.ts +18 -18
  93. package/src/plugins/rate-limiter.ts +38 -38
  94. package/src/protocols/a2a/client.ts +132 -132
  95. package/src/protocols/a2a/index.ts +8 -8
  96. package/src/protocols/a2a/server.ts +333 -333
  97. package/src/protocols/a2a/types.ts +88 -88
  98. package/src/protocols/a2a/utils.ts +50 -50
  99. package/src/protocols/agui/client.ts +83 -83
  100. package/src/protocols/agui/index.ts +4 -4
  101. package/src/protocols/agui/server.ts +218 -218
  102. package/src/protocols/agui/types.ts +153 -153
  103. package/src/protocols/index.ts +2 -2
  104. package/src/protocols/mcp/agent-tools.ts +134 -134
  105. package/src/protocols/mcp/index.ts +8 -8
  106. package/src/protocols/mcp/server.ts +262 -262
  107. package/src/protocols/mcp/types.ts +69 -69
  108. package/src/providers/index.ts +632 -608
  109. package/src/publish/index.ts +376 -376
  110. package/src/scheduler/cron-engine.ts +191 -191
  111. package/src/scheduler/index.ts +2 -2
  112. package/src/schema/oad.ts +217 -217
  113. package/src/security/approval.ts +131 -131
  114. package/src/security/approvals.ts +143 -143
  115. package/src/security/elevated.ts +105 -105
  116. package/src/security/guardrails.ts +248 -248
  117. package/src/security/index.ts +9 -9
  118. package/src/security/keys.ts +87 -87
  119. package/src/security/secrets.ts +129 -129
  120. package/src/skills/builtin/index.ts +408 -408
  121. package/src/skills/marketplace.ts +113 -113
  122. package/src/skills/types.ts +42 -42
  123. package/src/studio/server.ts +209 -22
  124. package/src/studio/templates-data.ts +178 -178
  125. package/src/studio-ui/index.html +279 -24
  126. package/src/telemetry/index.ts +324 -324
  127. package/src/tools/builtin/browser.ts +299 -299
  128. package/src/tools/builtin/datetime.ts +41 -41
  129. package/src/tools/builtin/file.ts +107 -107
  130. package/src/tools/builtin/home-assistant.ts +116 -116
  131. package/src/tools/builtin/rl-tools.ts +243 -243
  132. package/src/tools/builtin/shell.ts +43 -43
  133. package/src/tools/builtin/vision.ts +64 -64
  134. package/src/tools/builtin/web-search.ts +126 -126
  135. package/src/tools/builtin/web.ts +35 -35
  136. package/src/tools/document-processor.ts +213 -213
  137. package/src/tools/image-generator.ts +150 -150
  138. package/src/tools/integrations/calendar.ts +73 -73
  139. package/src/tools/integrations/code-exec.ts +39 -39
  140. package/src/tools/integrations/csv-analyzer.ts +92 -92
  141. package/src/tools/integrations/database.ts +44 -44
  142. package/src/tools/integrations/email-send.ts +76 -76
  143. package/src/tools/integrations/git-tool.ts +42 -42
  144. package/src/tools/integrations/github-tool.ts +76 -76
  145. package/src/tools/integrations/image-gen.ts +56 -56
  146. package/src/tools/integrations/index.ts +92 -92
  147. package/src/tools/integrations/jira.ts +83 -83
  148. package/src/tools/integrations/notion.ts +71 -71
  149. package/src/tools/integrations/npm-tool.ts +48 -48
  150. package/src/tools/integrations/pdf-reader.ts +58 -58
  151. package/src/tools/integrations/slack.ts +65 -65
  152. package/src/tools/integrations/summarizer.ts +49 -49
  153. package/src/tools/integrations/translator.ts +48 -48
  154. package/src/tools/integrations/trello.ts +60 -60
  155. package/src/tools/integrations/vector-search.ts +42 -42
  156. package/src/tools/integrations/web-scraper.ts +47 -47
  157. package/src/tools/integrations/web-search.ts +58 -58
  158. package/src/tools/integrations/webhook.ts +38 -38
  159. package/src/tools/mcp-client.ts +131 -131
  160. package/src/tools/web-scraper.ts +179 -179
  161. package/src/tools/web-search.ts +180 -180
  162. package/src/ui/components.ts +127 -127
  163. package/srv-out.txt +1 -1
  164. package/templates/ecommerce-assistant/README.md +45 -45
  165. package/templates/ecommerce-assistant/oad.yaml +47 -47
  166. package/templates/tech-support/README.md +43 -43
  167. package/templates/tech-support/oad.yaml +45 -45
  168. package/test-agent/Dockerfile +9 -9
  169. package/test-agent/README.md +50 -50
  170. package/test-agent/agent.yaml +23 -23
  171. package/test-agent/docker-compose.yml +11 -11
  172. package/test-agent/oad.yaml +31 -31
  173. package/test-agent/package-lock.json +1492 -1492
  174. package/test-agent/package.json +17 -17
  175. package/test-agent/src/index.ts +24 -24
  176. package/test-agent/src/skills/echo.ts +15 -15
  177. package/test-agent/tsconfig.json +24 -24
  178. package/test-full.js +43 -43
  179. package/test-sidebar.js +22 -22
  180. package/test-studio3.js +75 -75
  181. package/test-studio4.js +41 -41
  182. package/tests/a2a-protocol.test.ts +285 -285
  183. package/tests/agui-protocol.test.ts +246 -246
  184. package/tests/api-server.test.ts +148 -148
  185. package/tests/approvals.test.ts +89 -89
  186. package/tests/audio.test.ts +40 -40
  187. package/tests/brain-seed-extended.test.ts +490 -490
  188. package/tests/brain-seed.test.ts +239 -239
  189. package/tests/browser.test.ts +179 -179
  190. package/tests/channels/discord.test.ts +79 -79
  191. package/tests/channels/email.test.ts +148 -148
  192. package/tests/channels/feishu.test.ts +123 -123
  193. package/tests/channels/telegram.test.ts +129 -129
  194. package/tests/channels/websocket.test.ts +53 -53
  195. package/tests/channels/wechat.test.ts +170 -170
  196. package/tests/channels-extra.test.ts +45 -45
  197. package/tests/chat-cli.test.ts +160 -160
  198. package/tests/cli.test.ts +46 -46
  199. package/tests/context-compressor.test.ts +172 -172
  200. package/tests/context-refs.test.ts +121 -121
  201. package/tests/cron-engine.test.ts +101 -101
  202. package/tests/daemon.test.ts +135 -135
  203. package/tests/deepbrain-wire.test.ts +234 -234
  204. package/tests/deploy-and-dag.test.ts +196 -196
  205. package/tests/doctor.test.ts +38 -38
  206. package/tests/document-processor.test.ts +69 -69
  207. package/tests/e2e-nocode.test.ts +442 -442
  208. package/tests/elevated.test.ts +69 -69
  209. package/tests/eval.test.ts +173 -173
  210. package/tests/gateway.test.ts +63 -63
  211. package/tests/guardrails.test.ts +177 -177
  212. package/tests/home-assistant.test.ts +40 -40
  213. package/tests/hooks.test.ts +79 -79
  214. package/tests/ide-bridge.test.ts +38 -38
  215. package/tests/image-generator.test.ts +84 -84
  216. package/tests/init-role.test.ts +124 -124
  217. package/tests/integrations.test.ts +249 -249
  218. package/tests/mcp-client.test.ts +92 -92
  219. package/tests/mcp-server.test.ts +178 -178
  220. package/tests/mcp-servers.test.ts +260 -260
  221. package/tests/node-network.test.ts +74 -74
  222. package/tests/plugin-a2a-enhanced.test.ts +230 -230
  223. package/tests/profiles.test.ts +61 -61
  224. package/tests/publish.test.ts +231 -231
  225. package/tests/rl-tools.test.ts +93 -93
  226. package/tests/sandbox-manager.test.ts +46 -46
  227. package/tests/scheduler.test.ts +200 -200
  228. package/tests/secrets.test.ts +107 -107
  229. package/tests/security-enhanced.test.ts +233 -233
  230. package/tests/settings-api.test.ts +148 -148
  231. package/tests/setup.test.ts +73 -73
  232. package/tests/subagent.test.ts +193 -193
  233. package/tests/telegram-discord.test.ts +60 -60
  234. package/tests/telemetry.test.ts +186 -186
  235. package/tests/user-profiler.test.ts +169 -169
  236. package/tests/v090-features.test.ts +254 -254
  237. package/tests/vision.test.ts +61 -61
  238. package/tests/voice-call.test.ts +47 -47
  239. package/tests/voice-enhanced.test.ts +169 -169
  240. package/tests/voice-interaction.test.ts +38 -38
  241. package/tests/web-search.test.ts +155 -155
  242. package/tests/workflow-graph.test.ts +279 -279
  243. package/tutorial/customer-service-agent/README.md +612 -612
  244. package/tutorial/customer-service-agent/SOUL.md +26 -26
  245. package/tutorial/customer-service-agent/agent.yaml +63 -63
  246. package/tutorial/customer-service-agent/package.json +19 -19
  247. package/tutorial/customer-service-agent/src/index.ts +69 -69
  248. package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
  249. package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
  250. 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
+ }