opc-agent 4.1.0 → 4.1.2
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/.github/ISSUE_TEMPLATE/bug_report.md +20 -20
- package/.github/ISSUE_TEMPLATE/feature_request.md +14 -14
- package/.github/PULL_REQUEST_TEMPLATE.md +13 -13
- package/CHANGELOG.md +48 -48
- package/CONTRIBUTING.md +36 -36
- package/README.zh-CN.md +497 -497
- package/USABILITY-ISSUES.md +73 -0
- package/dist/channels/web.js +8 -2
- package/dist/channels/wechat.js +6 -6
- package/dist/cli.js +200 -85
- package/dist/core/runtime.js +37 -15
- package/dist/deploy/index.js +56 -56
- package/dist/doctor.d.ts +1 -0
- package/dist/doctor.js +105 -10
- package/dist/memory/deepbrain.d.ts +1 -1
- package/dist/memory/deepbrain.js +95 -4
- package/dist/scheduler/cron-engine.js +3 -36
- package/dist/studio/server.js +30 -1
- package/dist/studio-ui/index.html +230 -10
- package/dist/ui/components.js +105 -105
- package/examples/README.md +22 -22
- package/examples/basic-agent.ts +90 -90
- package/examples/brain-integration.ts +71 -71
- package/examples/multi-channel.ts +74 -74
- package/fix-sidebar.mjs +188 -188
- package/install.ps1 +154 -154
- package/install.sh +164 -164
- package/package.json +1 -1
- package/scripts/install.ps1 +31 -31
- package/scripts/install.sh +40 -40
- package/serve-studio.js +13 -13
- package/serve-test.js +25 -25
- package/src/channels/dingtalk.ts +46 -46
- package/src/channels/email.ts +351 -351
- package/src/channels/feishu.ts +349 -349
- package/src/channels/googlechat.ts +42 -42
- package/src/channels/imessage.ts +31 -31
- package/src/channels/irc.ts +82 -82
- package/src/channels/line.ts +32 -32
- package/src/channels/matrix.ts +33 -33
- package/src/channels/mattermost.ts +57 -57
- package/src/channels/msteams.ts +32 -32
- package/src/channels/nostr.ts +32 -32
- package/src/channels/qq.ts +33 -33
- package/src/channels/signal.ts +32 -32
- package/src/channels/sms.ts +33 -33
- package/src/channels/telegram.ts +616 -616
- package/src/channels/twitch.ts +65 -65
- package/src/channels/voice-call.ts +100 -100
- package/src/channels/web.ts +8 -2
- package/src/channels/websocket.ts +399 -399
- package/src/channels/wechat.ts +329 -329
- package/src/channels/whatsapp.ts +32 -32
- package/src/cli/chat.ts +99 -99
- package/src/cli/setup.ts +314 -314
- package/src/cli.ts +195 -92
- package/src/core/agent.ts +476 -476
- package/src/core/api-server.ts +277 -277
- package/src/core/audio.ts +98 -98
- package/src/core/collaboration.ts +275 -275
- package/src/core/context-discovery.ts +85 -85
- package/src/core/context-refs.ts +140 -140
- package/src/core/gateway.ts +106 -106
- package/src/core/heartbeat.ts +51 -51
- package/src/core/hooks.ts +105 -105
- package/src/core/ide-bridge.ts +133 -133
- package/src/core/node-network.ts +86 -86
- package/src/core/profiles.ts +122 -122
- package/src/core/runtime.ts +25 -0
- package/src/core/scheduler.ts +187 -187
- package/src/core/session-manager.ts +137 -137
- package/src/core/subagent.ts +98 -98
- package/src/core/vision.ts +180 -180
- package/src/core/workflow-graph.ts +365 -365
- package/src/daemon.ts +96 -96
- package/src/deploy/index.ts +255 -255
- package/src/doctor.ts +98 -11
- package/src/eval/index.ts +211 -211
- package/src/eval/suites/basic.json +16 -16
- package/src/eval/suites/memory.json +12 -12
- package/src/eval/suites/safety.json +14 -14
- package/src/hub/brain-seed.ts +54 -54
- package/src/hub/client.ts +60 -60
- package/src/mcp/servers/calculator-mcp.ts +65 -65
- package/src/mcp/servers/crypto-mcp.ts +73 -73
- package/src/mcp/servers/database-mcp.ts +72 -72
- package/src/mcp/servers/datetime-mcp.ts +69 -69
- package/src/mcp/servers/filesystem.ts +66 -66
- package/src/mcp/servers/github-mcp.ts +58 -58
- package/src/mcp/servers/index.ts +63 -63
- package/src/mcp/servers/json-mcp.ts +102 -102
- package/src/mcp/servers/memory-mcp.ts +56 -56
- package/src/mcp/servers/regex-mcp.ts +53 -53
- package/src/mcp/servers/web-mcp.ts +49 -49
- package/src/memory/context-compressor.ts +189 -189
- package/src/memory/deepbrain.ts +99 -5
- package/src/memory/seed-loader.ts +212 -212
- package/src/memory/user-profiler.ts +215 -215
- package/src/plugins/content-filter.ts +23 -23
- package/src/plugins/logger.ts +18 -18
- package/src/plugins/rate-limiter.ts +38 -38
- package/src/protocols/a2a/client.ts +132 -132
- package/src/protocols/a2a/index.ts +8 -8
- package/src/protocols/a2a/server.ts +333 -333
- package/src/protocols/a2a/types.ts +88 -88
- package/src/protocols/a2a/utils.ts +50 -50
- package/src/protocols/agui/client.ts +83 -83
- package/src/protocols/agui/index.ts +4 -4
- package/src/protocols/agui/server.ts +218 -218
- package/src/protocols/agui/types.ts +153 -153
- package/src/protocols/index.ts +2 -2
- package/src/protocols/mcp/agent-tools.ts +134 -134
- package/src/protocols/mcp/index.ts +8 -8
- package/src/protocols/mcp/server.ts +262 -262
- package/src/protocols/mcp/types.ts +69 -69
- package/src/providers/index.ts +632 -632
- package/src/publish/index.ts +376 -376
- package/src/scheduler/cron-engine.ts +191 -191
- package/src/scheduler/index.ts +2 -2
- package/src/schema/oad.ts +217 -217
- package/src/security/approval.ts +131 -131
- package/src/security/approvals.ts +143 -143
- package/src/security/elevated.ts +105 -105
- package/src/security/guardrails.ts +248 -248
- package/src/security/index.ts +9 -9
- package/src/security/keys.ts +87 -87
- package/src/security/secrets.ts +129 -129
- package/src/skills/builtin/index.ts +408 -408
- package/src/skills/marketplace.ts +113 -113
- package/src/skills/types.ts +42 -42
- package/src/studio/server.ts +31 -1
- package/src/studio/templates-data.ts +178 -178
- package/src/studio-ui/index.html +230 -10
- package/src/telemetry/index.ts +324 -324
- package/src/tools/builtin/browser.ts +299 -299
- package/src/tools/builtin/datetime.ts +41 -41
- package/src/tools/builtin/file.ts +107 -107
- package/src/tools/builtin/home-assistant.ts +116 -116
- package/src/tools/builtin/rl-tools.ts +243 -243
- package/src/tools/builtin/shell.ts +43 -43
- package/src/tools/builtin/vision.ts +64 -64
- package/src/tools/builtin/web-search.ts +126 -126
- package/src/tools/builtin/web.ts +35 -35
- package/src/tools/document-processor.ts +213 -213
- package/src/tools/image-generator.ts +150 -150
- package/src/tools/integrations/calendar.ts +73 -73
- package/src/tools/integrations/code-exec.ts +39 -39
- package/src/tools/integrations/csv-analyzer.ts +92 -92
- package/src/tools/integrations/database.ts +44 -44
- package/src/tools/integrations/email-send.ts +76 -76
- package/src/tools/integrations/git-tool.ts +42 -42
- package/src/tools/integrations/github-tool.ts +76 -76
- package/src/tools/integrations/image-gen.ts +56 -56
- package/src/tools/integrations/index.ts +92 -92
- package/src/tools/integrations/jira.ts +83 -83
- package/src/tools/integrations/notion.ts +71 -71
- package/src/tools/integrations/npm-tool.ts +48 -48
- package/src/tools/integrations/pdf-reader.ts +58 -58
- package/src/tools/integrations/slack.ts +65 -65
- package/src/tools/integrations/summarizer.ts +49 -49
- package/src/tools/integrations/translator.ts +48 -48
- package/src/tools/integrations/trello.ts +60 -60
- package/src/tools/integrations/vector-search.ts +42 -42
- package/src/tools/integrations/web-scraper.ts +47 -47
- package/src/tools/integrations/web-search.ts +58 -58
- package/src/tools/integrations/webhook.ts +38 -38
- package/src/tools/mcp-client.ts +131 -131
- package/src/tools/web-scraper.ts +179 -179
- package/src/tools/web-search.ts +180 -180
- package/src/ui/components.ts +127 -127
- package/srv-out.txt +1 -1
- package/templates/ecommerce-assistant/README.md +45 -45
- package/templates/ecommerce-assistant/oad.yaml +47 -47
- package/templates/tech-support/README.md +43 -43
- package/templates/tech-support/oad.yaml +45 -45
- package/test-agent/Dockerfile +9 -9
- package/test-agent/README.md +50 -50
- package/test-agent/agent.yaml +23 -23
- package/test-agent/docker-compose.yml +11 -11
- package/test-agent/oad.yaml +31 -31
- package/test-agent/package-lock.json +1492 -1492
- package/test-agent/package.json +17 -17
- package/test-agent/src/index.ts +24 -24
- package/test-agent/src/skills/echo.ts +15 -15
- package/test-agent/tsconfig.json +24 -24
- package/test-full.js +43 -43
- package/test-sidebar.js +22 -22
- package/test-studio3.js +75 -75
- package/test-studio4.js +41 -41
- package/tests/a2a-protocol.test.ts +285 -285
- package/tests/agui-protocol.test.ts +246 -246
- package/tests/api-server.test.ts +148 -148
- package/tests/approvals.test.ts +89 -89
- package/tests/audio.test.ts +40 -40
- package/tests/brain-seed-extended.test.ts +490 -490
- package/tests/brain-seed.test.ts +239 -239
- package/tests/browser.test.ts +179 -179
- package/tests/channels/discord.test.ts +79 -79
- package/tests/channels/email.test.ts +148 -148
- package/tests/channels/feishu.test.ts +123 -123
- package/tests/channels/telegram.test.ts +129 -129
- package/tests/channels/websocket.test.ts +53 -53
- package/tests/channels/wechat.test.ts +170 -170
- package/tests/channels-extra.test.ts +45 -45
- package/tests/chat-cli.test.ts +160 -160
- package/tests/cli.test.ts +46 -46
- package/tests/context-compressor.test.ts +172 -172
- package/tests/context-refs.test.ts +121 -121
- package/tests/cron-engine.test.ts +101 -101
- package/tests/daemon.test.ts +135 -135
- package/tests/deepbrain-wire.test.ts +234 -234
- package/tests/deploy-and-dag.test.ts +196 -196
- package/tests/doctor.test.ts +38 -38
- package/tests/document-processor.test.ts +69 -69
- package/tests/e2e-nocode.test.ts +442 -442
- package/tests/elevated.test.ts +69 -69
- package/tests/eval.test.ts +173 -173
- package/tests/gateway.test.ts +63 -63
- package/tests/guardrails.test.ts +177 -177
- package/tests/home-assistant.test.ts +40 -40
- package/tests/hooks.test.ts +79 -79
- package/tests/ide-bridge.test.ts +38 -38
- package/tests/image-generator.test.ts +84 -84
- package/tests/init-role.test.ts +124 -124
- package/tests/integrations.test.ts +249 -249
- package/tests/mcp-client.test.ts +92 -92
- package/tests/mcp-server.test.ts +178 -178
- package/tests/mcp-servers.test.ts +260 -260
- package/tests/node-network.test.ts +74 -74
- package/tests/plugin-a2a-enhanced.test.ts +230 -230
- package/tests/profiles.test.ts +61 -61
- package/tests/publish.test.ts +231 -231
- package/tests/rl-tools.test.ts +93 -93
- package/tests/sandbox-manager.test.ts +46 -46
- package/tests/scheduler.test.ts +200 -200
- package/tests/secrets.test.ts +107 -107
- package/tests/security-enhanced.test.ts +233 -233
- package/tests/settings-api.test.ts +148 -148
- package/tests/setup.test.ts +73 -73
- package/tests/subagent.test.ts +193 -193
- package/tests/telegram-discord.test.ts +60 -60
- package/tests/telemetry.test.ts +186 -186
- package/tests/user-profiler.test.ts +169 -169
- package/tests/v090-features.test.ts +254 -254
- package/tests/vision.test.ts +61 -61
- package/tests/voice-call.test.ts +47 -47
- package/tests/voice-enhanced.test.ts +169 -169
- package/tests/voice-interaction.test.ts +38 -38
- package/tests/web-search.test.ts +155 -155
- package/tests/workflow-graph.test.ts +279 -279
- package/tutorial/customer-service-agent/README.md +612 -612
- package/tutorial/customer-service-agent/SOUL.md +26 -26
- package/tutorial/customer-service-agent/agent.yaml +63 -63
- package/tutorial/customer-service-agent/package.json +19 -19
- package/tutorial/customer-service-agent/src/index.ts +69 -69
- package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
- package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
- 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
|
+
}
|