Skip to content

Commit 2a4f98e

Browse files
authored
Merge pull request #193 from byronpiao/feature/fix-yuanqi-0227
feature: fix yuanqi conversation separation
2 parents 9e56597 + 4e2652f commit 2a4f98e

File tree

10 files changed

+223
-48
lines changed

10 files changed

+223
-48
lines changed

httpfunctions/adp-js/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
"license": "ISC",
1313
"dependencies": {
1414
"@ag-ui/client": "^0.0.42",
15-
"@cloudbase/agent-adapter-adp": "^1.0.1-alpha.30",
16-
"@cloudbase/agent-adapter-wx": "^1.0.1-alpha.30",
15+
"@cloudbase/agent-adapter-adp": "1.0.1-alpha.30",
16+
"@cloudbase/agent-adapter-wx": "1.0.1-alpha.30",
1717
"@cloudbase/agent-server": "^0.0.20",
1818
"@dotenvx/dotenvx": "^1.51.1",
1919
"cors": "^2.8.5",

httpfunctions/adp-ts/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
"packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0",
2929
"dependencies": {
3030
"@ag-ui/client": "^0.0.42",
31-
"@cloudbase/agent-adapter-adp": "^1.0.1-alpha.30",
32-
"@cloudbase/agent-adapter-wx": "^1.0.1-alpha.30",
31+
"@cloudbase/agent-adapter-adp": "1.0.1-alpha.30",
32+
"@cloudbase/agent-adapter-wx": "1.0.1-alpha.30",
3333
"@cloudbase/agent-server": "^0.0.20",
3434
"@dotenvx/dotenvx": "^1.51.1",
3535
"cors": "^2.8.5",

httpfunctions/openclaw-js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"license": "ISC",
1717
"dependencies": {
1818
"@ag-ui/client": "^0.0.42",
19-
"@cloudbase/agent-adapter-llm": "^1.0.1-alpha.30",
19+
"@cloudbase/agent-adapter-llm": "1.0.1-alpha.30",
2020
"@cloudbase/agent-server": "^0.0.16",
2121
"@dotenvx/dotenvx": "^1.51.1",
2222
"cors": "^2.8.5",

httpfunctions/openclaw-ts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0",
2828
"dependencies": {
2929
"@ag-ui/client": "^0.0.42",
30-
"@cloudbase/agent-adapter-llm": "^1.0.1-alpha.30",
30+
"@cloudbase/agent-adapter-llm": "1.0.1-alpha.30",
3131
"@cloudbase/agent-server": "^0.0.16",
3232
"@dotenvx/dotenvx": "^1.51.1",
3333
"cors": "^2.8.5",

httpfunctions/yuanqi-js/README.md

Lines changed: 69 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
# 腾讯元器 JavaScript 模板
22

3-
基于腾讯元器的 JavaScript Agent 函数型模板。本模板提供了将腾讯元器智能体快速部署为 HTTP 云函数的完整解决方案,支持流式响应、用户认证、对话历史持久化、自定义参数等功能
3+
基于腾讯元器的 JavaScript Agent 函数型模板。本模板提供了将腾讯元器智能体快速部署为 HTTP 云函数的完整解决方案,支持流式响应、用户认证、对话历史持久化、自定义参数、微信消息接入等功能
44

55
## 📋 项目概述
66

7-
本模板使用 `@cloudbase/agent-adapter-yuanqi` 适配器,将腾讯元器智能体封装为符合 AG-UI 协议的 Agent 服务,并通过 `@cloudbase/agent-server` 提供标准的 HTTP API 接口。
7+
本模板使用 `@cloudbase/agent-adapter-yuanqi` 适配器,将腾讯元器智能体封装为符合 AG-UI 协议的 Agent 服务,并通过 `@cloudbase/agent-server` 提供标准的 HTTP API 接口。同时支持通过 `@cloudbase/agent-adapter-wx` 适配器接入微信消息。
88

99
### 核心特性
1010

1111
-**腾讯元器集成** - 快速接入腾讯元器智能体平台
1212
-**对话历史持久化** - 通过云开发数据库自动保存和加载对话历史
1313
-**自定义参数支持** - 支持传递自定义变量到工作流和知识库
1414
-**思考/推理支持** - 支持元器模型的推理内容展示
15+
-**微信消息接入** - 支持通过微信适配器接收和处理微信消息
1516

1617
### 调用链路
1718

1819
```
1920
客户端 → HTTP 云函数 → Yuanqi Agent → 腾讯元器服务 → 流式响应返回
2021
2122
云开发数据库(对话历史)
23+
24+
微信 → /wx-send-message → WeChatAgent → Yuanqi Agent → 腾讯元器服务
2225
```
2326

2427
## 使用方法
@@ -47,11 +50,15 @@ class MyAgent extends YuanqiAgent {
4750
}
4851

4952
// 重写父类方法,自定义获取历史对话的逻辑
50-
async getChatHistory(subscriber, latestUserMessage) {
53+
async getChatHistory(subscriber, input, latestUserMessage) {
5154
// 调用父类方法获取历史对话(从云开发数据库读取)
52-
const history = await super.getChatHistory(subscriber, latestUserMessage);
55+
const history = await super.getChatHistory(
56+
subscriber,
57+
input,
58+
latestUserMessage,
59+
);
5360
// 也可以忽略父类方法,自行处理历史对话的获取逻辑
54-
// const history = await myMethodToGetChatHistory(subscriber, latestUserMessage);
61+
// const history = await myMethodToGetChatHistory(subscriber, input, latestUserMessage);
5562
return history;
5663
}
5764

@@ -93,7 +100,7 @@ function createAgent({ request }) {
93100
94101
`@cloudbase/agent-adapter-yuanqi` 适配器会通过云开发数据库自动管理对话历史的保存与加载。开发者只需要传递当前用户的最新消息,适配器会自动:
95102
96-
1. 从云开发数据库加载历史对话(默认 10 ,可通过 `historyCount` 配置)
103+
1. 从云开发数据库加载历史对话(默认 10 ,可通过 `historyCount` 配置)
97104
2. 将历史对话与当前消息合并后发送给元器
98105
3. 自动保存用户消息和 AI 回复到数据库
99106
@@ -102,7 +109,7 @@ function createAgent({ request }) {
102109
如果需要自定义历史对话的获取逻辑,可以重写 `getChatHistory` 方法:
103110
104111
```javascript
105-
async getChatHistory(subscriber, latestUserMessage) {
112+
async getChatHistory(subscriber, input, latestUserMessage) {
106113
// 自定义获取历史对话的逻辑
107114
const history = await myCustomHistoryService.getHistory();
108115
return history;
@@ -174,6 +181,60 @@ createExpressRoutes({
174181
- `POST /chat/completions` - OpenAI 兼容的聊天接口
175182
- `GET /healthz` - 健康检查接口
176183
184+
### 微信消息路由
185+
186+
本模板还提供了微信消息处理路由,支持通过 `@cloudbase/agent-adapter-wx` 接入微信消息:
187+
188+
```javascript
189+
import {
190+
WeChatAgent,
191+
createWxMessageHandler,
192+
WeChatHistoryManager,
193+
} from "@cloudbase/agent-adapter-wx";
194+
195+
// 创建微信 Agent 适配器
196+
function createWxAgent({ request, options }) {
197+
const { agent: baseAgent } = createAgent({ request });
198+
const envId = process.env.TCB_ENV || process.env.ENV_ID;
199+
200+
return {
201+
agent: new WeChatAgent({
202+
agentId: options?.agentId || "agent-wx",
203+
agent: baseAgent,
204+
wechatConfig: {
205+
sendMode: "aitools",
206+
context: {
207+
extendedContext: {
208+
envId,
209+
accessToken: request.headers.authorization,
210+
},
211+
},
212+
},
213+
historyManager: new WeChatHistoryManager({
214+
envId,
215+
}),
216+
}),
217+
};
218+
}
219+
220+
// 注册微信消息路由
221+
app.post(
222+
"/wx-send-message",
223+
express.json(),
224+
createWxMessageHandler(createWxAgent),
225+
);
226+
app.post(
227+
"/v1/aibot/bots/:agentId/wx-send-message",
228+
express.json(),
229+
createWxMessageHandler(createWxAgent),
230+
);
231+
```
232+
233+
微信消息路由:
234+
235+
- `POST /wx-send-message` - 微信消息处理接口
236+
- `POST /v1/aibot/bots/:agentId/wx-send-message` - 带 agentId 参数的微信消息处理接口
237+
177238
## 🚀 快速开始
178239
179240
### 环境要求
@@ -386,6 +447,7 @@ docker run -p 9000:9000 \
386447
### SDK 和工具
387448

388449
- [@cloudbase/agent-adapter-yuanqi](https://www.npmjs.com/package/@cloudbase/agent-adapter-yuanqi) - 元器适配器
450+
- [@cloudbase/agent-adapter-wx](https://www.npmjs.com/package/@cloudbase/agent-adapter-wx) - 微信适配器
389451
- [@cloudbase/agent-server](https://www.npmjs.com/package/@cloudbase/agent-server) - Agent 服务器
390452

391453
---

httpfunctions/yuanqi-js/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
"license": "ISC",
1313
"dependencies": {
1414
"@ag-ui/client": "0.0.42",
15-
"@cloudbase/agent-adapter-wx": "^1.0.1-alpha.30",
16-
"@cloudbase/agent-adapter-yuanqi": "^1.0.1-alpha.30",
15+
"@cloudbase/agent-adapter-wx": "1.0.1-alpha.30",
16+
"@cloudbase/agent-adapter-yuanqi": "1.0.1-alpha.31",
1717
"@cloudbase/agent-server": "^0.0.20",
1818
"@dotenvx/dotenvx": "^1.51.1",
1919
"cors": "^2.8.5",

httpfunctions/yuanqi-js/src/index.js

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ import { YuanqiAgent } from "@cloudbase/agent-adapter-yuanqi";
44
import dotenvx from "@dotenvx/dotenvx";
55
// import cors from "cors";
66
import { DetectCloudbaseUserMiddleware } from "./utils.js";
7-
import { WeChatAgent, createWxMessageHandler, WeChatHistoryManager } from '@cloudbase/agent-adapter-wx';
7+
import {
8+
WeChatAgent,
9+
createWxMessageHandler,
10+
WeChatHistoryManager,
11+
} from "@cloudbase/agent-adapter-wx";
812

913
dotenvx.config();
1014

@@ -25,11 +29,15 @@ class MyAgent extends YuanqiAgent {
2529
}
2630

2731
// 重写父类方法,获取历史对话
28-
async getChatHistory(subscriber, latestUserMessage) {
32+
async getChatHistory(subscriber, input, latestUserMessage) {
2933
// 调用父类方法获取历史对话
30-
const history = await super.getChatHistory(subscriber, latestUserMessage);
34+
const history = await super.getChatHistory(
35+
subscriber,
36+
input,
37+
latestUserMessage,
38+
);
3139
// 也可以忽略父类方法,自行处理历史对话的获取逻辑
32-
// const history = await myMethodToGetChatHistory(subscriber, latestUserMessage);
40+
// const history = await myMethodToGetChatHistory(subscriber, input, latestUserMessage);
3341
// 可以在这里对历史对话进行处理
3442
return history;
3543
}
@@ -47,7 +55,8 @@ class MyAgent extends YuanqiAgent {
4755

4856
function createAgent({ request }) {
4957
// 元器 Token 体验活动 - 云开发身份认证
50-
const Authorization = request.headers.Authorization || request.headers.get("Authorization")
58+
const Authorization =
59+
request.headers.Authorization || request.headers.get("Authorization");
5160
const accessToken = Authorization?.split(" ")[1] || "";
5261
const headers = {};
5362
if (accessToken) {
@@ -94,21 +103,21 @@ function createWxAgent({ request, options }) {
94103

95104
return {
96105
agent: new WeChatAgent({
97-
agentId: options?.agentId || 'agent-wx',
106+
agentId: options?.agentId || "agent-wx",
98107
agent: baseAgent,
99108
wechatConfig: {
100-
sendMode: 'aitools',
109+
sendMode: "aitools",
101110
context: {
102111
extendedContext: {
103112
envId,
104113
accessToken: request.headers.authorization,
105-
}
106-
}
114+
},
115+
},
107116
},
108117
historyManager: new WeChatHistoryManager({
109118
envId,
110-
})
111-
})
119+
}),
120+
}),
112121
};
113122
}
114123

@@ -128,7 +137,15 @@ createExpressRoutes({
128137
});
129138

130139
// Register WeChat message route
131-
app.post('/wx-send-message', express.json(), createWxMessageHandler(createWxAgent));
132-
app.post('/v1/aibot/bots/:agentId/wx-send-message', express.json(), createWxMessageHandler(createWxAgent));
140+
app.post(
141+
"/wx-send-message",
142+
express.json(),
143+
createWxMessageHandler(createWxAgent),
144+
);
145+
app.post(
146+
"/v1/aibot/bots/:agentId/wx-send-message",
147+
express.json(),
148+
createWxMessageHandler(createWxAgent),
149+
);
133150

134151
app.listen(9000, () => console.log("Listening on 9000!"));

0 commit comments

Comments
 (0)