本文将演示如何基于
在你的云函数或服务端代码中,新建一个 Agent 实现,例如
const { AgentRuntime, AgentDriver } = require("@vectorx/agent-runtime");
/**
* @typedef {import('@vectorx/agent-runtime').IAgent} IAgent
*
* @class
* @implements {IAgent}
*/
class MyAgent extends AgentRuntime {
async sendMessage(message) {
try {
// 创建 qwen-doc-turbo 模型
const model = this.createModel("qwen-doc-turbo");
// 组装消息数组
const messages = [];
// 1. 处理文件:根据 fileSource 区分处理
if (Array.isArray(message?.files) && message.files.length > 0) {
message.files.forEach((file) => {
if (file.fileSource === "openai") {
// OpenAI 上传的文件:使用 file-id,通过 system role 传入
const fileId = file.id;
if (fileId) {
messages.push({
role: "system",
content: `fileid://${fileId}`,
});
}
} else if (file.fileSource === "standard" || !file.fileSource) {
// 标准上传的文件:使用 URL,通过 user content 中的 doc_url 传入
// 注意:标准上传的文件会在 user message 的 content 中处理
}
});
}
// 2. 添加 user 消息
const userContent = [];
// 2.1 添加标准上传的文件(doc_url)
if (Array.isArray(message?.files) && message.files.length > 0) {
message.files.forEach((file) => {
if ((file.fileSource === "standard" || !file.fileSource) && file.url) {
userContent.push({
type: "doc_url",
doc_url: [file.url],
});
}
});
}
// 2.2 添加用户文本提示
const userPrompt = message?.msg || "请分析这个文档";
if (userPrompt.trim()) {
userContent.push({
type: "text",
text: userPrompt.trim(),
});
}
messages.push({
role: "user",
content: userContent,
});
// 3. 调用模型
const modelResponse = await model.streamText({
messages,
parameters: {
temperature: 0.3,
max_tokens: 2000,
},
enable_thinking: true,
});
// 4. 流式返回结果
for await (const chunk of modelResponse) {
this.sseSender.send({ data: chunk });
}
this.sseSender.end();
} catch (error) {
console.error("qwen-doc-turbo stream error:", error);
this.sseSender.end();
}
}
}
exports.main = function (event, context) {
return AgentDriver.run(event, context, new MyAgent(context));
};
上述示例展示的是基于运行时基类封装多轮对话的常见模式,实际接入小红书开放平台智能体时,可以根据平台对话协议进一步裁剪字段和上下文结构。
更多 Agent 能力(如多轮对话、知识库、工具调用等)的集成示例,会在“开发指南”文档中进一步展开。