Install
openclaw skills install @thcjp/doubao-assistantopenclaw skills install @thcjp/doubao-assistant核心功能: 本技能提供中文交互、化工作流场景等能力。 核心功能: 本技能提供六大高级模块等能力。
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| 豆包助手(专业版)知识库与批量处理 | 不支持 | 支持 |
| 复杂工作流可视化编排 | 不支持 | 支持 |
| 条件分支与异常重试 | 不支持 | 支持 |
| 定时触发与事件驱动 | 不支持 | 支持 |
| 执行日志与审计追踪 | 不支持 | 支持 |
SSE 流式响应让用户逐字看到生成内容,大幅提升交互体验.
// 流式响应处理框架
async function chatStream(message, onChunk) {
const resp = await fetch('https://api.example.com/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'doubao-pro',
messages: [{ role: 'user', content: message }],
stream: true
})
});
// ...
const reader = resp.body.getReader();
const decoder = new TextDecoder();
let fullContent = '';
// ...
while (true) {
const { done, value } = await reader.read();
if (done) break;
// ...
const chunk = decoder.decode(value);
const lines = chunk.split('\n').filter(l => l.startsWith('data: '));
for (const line of lines) {
const data = line.slice(6);
if (data === '[DONE]') return fullContent;
const json = JSON.parse(data);
const content = json.choices[0]?.delta?.content || '';
if (content) {
fullContent += content;
onChunk(content); // 逐字回调
}
return fullContent;
}
流式响应注意事项:
通过 Function Calling 让模型调用外部工具,扩展 AI 的能力边界.
// 函数定义
const tools = [
{
type: 'function',
function: {
name: 'search_knowledge_base',
description: '在企业知识库中搜索相关文档',
parameters: {
type: 'object',
properties: {
query: { type: 'string', description: '搜索关键词' },
top_k: { type: 'integer', description: '返回结果数', default: 5 }
},
required: ['query']
}
},
{
type: 'function',
function: {
name: 'create_ticket',
description: '创建工单',
parameters: {
type: 'object',
properties: {
title: { type: 'string', description: '工单标题' },
priority: { type: 'string', enum: ['low', 'medium', 'high'] }
},
required: ['title']
}
];
// ...
// 函数调用处理流程
async function chatWithTools(message, history) {
const messages = [...history, { role: 'user', content: message }];
// ...
example.com/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model: 'doubao-pro', messages, tools })
});
// ...
const data = await resp.json();
const toolCalls = data.choices[0].message.tool_calls;
// ...
if (toolCalls) {
messages.push(data.choices[0].message);
for (const call of toolCalls) {
const args = JSON.parse(call.function.arguments);
const result = await executeTool(call.function.name, args);
messages.push({
role: 'tool',
tool_call_id: call.id,
content: JSON.stringify(result)
});
}
// 再次请求获取最终回复
const finalResp = await fetch('https://api.example.com/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model: 'doubao-pro', messages, tools })
});
return (await finalResp.json()).choices[0].message.content;
}
return data.choices[0].message.content;
}
函数设计原则:
将企业知识库与豆包对话结合,实现基于私有知识的精准问答.
用户提问
├─ 优秀步:将问题向量化,在知识库中检索相关文档片段
├─ 第二步:将检索结果作为上下文拼入提示词
├─ 第三步:调用豆包模型生成基于上下文的回答
└─ 第四步:返回回答并标注引用来源
// RAG 检索增强方案
async function ragChat(question, knowledgeBase) {
// 1. 检索相关知识片段
const relevantDocs = await knowledgeBase.search(question, { topK: 5 });
// ...
// 2. 构造增强提示词
const context = relevantDocs
.map((doc, i) => `[文档${i+1}] ${doc.content}`)
.join('\n\n');
// ...
const systemPrompt = `你是一个企业知识助手。请基于以下参考文档回答问题.
如果参考文档中没有相关信息,请说明"知识库中未找到相关内容".
// ...
参考文档:
${context}`;
// ...
// 3. 调用模型生成回答
const messages = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: question }
];
// ...
example.com/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model: 'doubao-pro', messages })
});
// ...
return {
answer: data.choices[0].message.content,
sources: relevantDocs.map(d => ({ title: d.title, score: d.score }))
};
}
| RAG 组件 | 推荐方案 | 说明 |
|---|---|---|
| 文档切分 | 按段落/固定长度 | 每块 200-500 字,保留上下文 |
| 向量化 | Embedding 模型 | 将文本转为向量表示 |
| 向量存储 | 向量数据库 | 支持 ANN 近似最近邻检索 |
| 检索策略 | 语义相似度 + 关键词混合 | 兼顾语义匹配与精确匹配 |
| 重排序 | Cross-encoder 重排 | 提升 Top-K 结果相关性 |
模块三:知识库检索增强_rag(专业版独有) 选项| 策略 | 适用场景 | 实现方式 |
|---|---|---|
| 串行队列 | 有序依赖任务 | 逐个执行,结果按序收集 |
| 并发池 | 独立批量任务 | 固定并发数 + 队列调度 |
| 分批处理 | 超大批量 | 按批次分组,批次间间隔 |
// 并发池实现
async function batchProcess(tasks, concurrency = 5) {
const results = new Array(tasks.length);
let index = 0;
// ...
async function worker() {
while (index < tasks.length) {
const current = index++;
try {
results[current] = await tasks[current]();
} catch (e) {
results[current] = { error: e.message };
}
// ...
await Promise.all(Array.from({ length: concurrency }, () => worker()));
return results;
}
| 模板名称 | 系统提示词要点 | 适用场景 |
|---|---|---|
| 知识助手 | 基于上下文回答、标注来源、不编造 | 企业知识库问答 |
| 客服代表 | 友好专业、不超过权限承诺、引导转人工 | 智能客服 |
| 内容摘要 | 提取要点、保留关键数据、结构化输出 | 文档总结 |
| 翻译专家 | 保留术语、适配文化、自然流畅 | 多语言翻译 |
| 数据分析 | 输出结论与建议、标注数据来源 | 报表解读 |
// 会话级用量统计
class SessionAnalytics {
constructor() {
this.sessions = new Map();
}
// ...
record(sessionId, { inputTokens, outputTokens, duration, toolCalls }) {
if (!this.sessions.has(sessionId)) {
this.sessions.set(sessionId, {
totalInput: 0,
totalOutput: 0,
totalDuration: 0,
totalToolCalls: 0,
messageCount: 0
});
}
const stats = this.sessions.get(sessionId);
stats.totalInput += inputTokens;
stats.totalOutput += outputTokens;
stats.totalDuration += duration;
stats.totalToolCalls += toolCalls || 0;
stats.messageCount++;
}
// ...
getReport(sessionId) {
sessions.get(sessionId);
if (!stats) return null;
return {
...stats,
avgInputPerMessage: Math.round(stats.totalInput / stats.messageCount),
avgOutputPerMessage: Math.round(stats.totalOutput / stats.messageCount),
avgDurationMs: Math.round(stats.totalDuration / stats.messageCount)
};
}
// ...
getTopSessions(metric = 'totalInput', limit = 10) {
return [...this.sessions.entries()]
.sort((a, b) => b[1][metric] - a[1][metric])
.slice(0, limit)
.map(([id, stats]) => ({ sessionId: id, ...stats }));
}
```- 验证返回数据的完整性和格式正确性
## 入门教程
1. 确认运行环境满足依赖说明中的要求
2. 在AI Agent对话中调用本技能,提供必要的输入参数
3. 检查输出结果,根据需要进行后续处理
> 详细的输入输出格式请参考下方章节说明。
## 操作步骤
**角色化集成方案模板**:
【开发者】我需要搭建一个企业知识库问答系统,文档约 5000 篇,请给出 RAG 方案.
【运维】我需要监控各会话的 Token 消耗,找出成本最高的会话.
【产品经理】我想做一个能查询订单和提交工单的智能客服,需要哪些工具函数?
Agent 会输出包含架构设计、代码模板、配置参数、监控指标的完整集成方案.
**使用步骤**:
1. 阅读依赖说明章节,确认运行环境已就绪
2. 根据任务需求,参考核心能力章节选择对应能力
3. 按照能力描述提供输入参数,执行操作
4. 查看输出结果,确认任务完成状态
## 输入定义
| 参数名 | 类型 | 必填 | 说明 |
|:------|------:|:------|:------|
| content | string | 否 | 处理的内容输入 |
| mode | string | 否 | 处理模式, 可选值: json/text/markdown |
| style | string | 否 | 输出风格, 参考 `references/style.md` |
## 结果格式
```json
{
"success": true,
"data": {
"result": "处理结果",
"status": "success",
"metadata": {
"template_used": "reviewer",
"word_count": 0,
"style": "专业"
}
},
"error": null
}
输出模板参考: assets/output.json
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent平台内置LLM提供 |
| 豆包会话凭据 | 凭据 | 必需 | 豆包平台获取 |
| Node.js / Python | 运行时 | 必需 | 官方网站下载 |
| 向量数据库 | 数据库 | 推荐 | 对应官方下载或云服务 |
| Embedding 模型 | 模型 | 推荐 | 开源模型或 API 服务 |
| Redis | 缓存 | 可选 | 官方下载(会话存储) |
DOUBAO_SESSIONID 注入doubao:
session_id: ${DOUBAO_SESSIONID}
base_url: https://api.example.com/v1
default_model: doubao-pro
timeout_ms: 60000
max_retries: 3
streaming:
enabled: true
chunk_timeout_ms: 30000 # 单 chunk 超时
rag:
enabled: true
vector_db:
type: chroma # chroma / pinecone / weaviate
collection: knowledge_base
chunk_size: 300 # 文档切分大小
chunk_overlap: 50 # 切分重叠
top_k: 5 # 检索返回数
rerank: true # 是否重排序
concurrency:
max_pool_size: 10
queue_timeout_ms: 30000
analytics:
session_tracking: true
cost_tracking: true
report_schedule: "0 8 * * *" # 每日8点生成报表
检查文档切分质量、向量模型选择、检索 top_k 设置。引入重排序(Cross-encoder)提升相关性。优化查询改写,将用户问题转换为更适合检索的形式.
向模型返回结构化错误信息,模型会基于错误调整回复。不要对用户直接暴露原始错误,转换为用户友好的提示.
记录已接收内容位置,断开后重新请求时通过对话历史续接。前端展示"连接中断,正在重连"提示.
使用向量数据库的 ANN 索引加速检索。文档按类别分区,查询时先过滤再检索。定期优化索引.
当对话轮数超过阈值(如 10 轮)时,将早期对话用模型生成摘要,用摘要替代原始历史.
使用检查点机制:每完成一批将结果持久化,失败时从最后检查点恢复。任务设计为幂等.
检查该会话的对话历史是否过长、是否频繁调用工具函数。设置单会话 Token 上限,超限提示用户开启新会话.
构建评测集(问题-标准答案),统计检索命中率、回答准确率、来源引用正确率。定期回归测试确保质量不退化.
| 错误场景(续) | 原因 | 处理方式 |
|---|---|---|
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 请求重试;确认Agent平台LLM服务正常 |
| 输入内容格式不正确 | 用户输入不符合skill预期格式 | 检查输入是否符合skill使用说明中的格式要求,参考示例章节 |
| 执行结果与预期不符 | 指令描述不够明确或上下文不足 | 提供更详细的指令描述,补充必要的上下文信息 |
| 命令执行失败 | 运行环境不满足要求或权限不足 | 确认运行环境符合依赖说明中的要求;检查命令权限设置 |
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 流式响应中断 | 网络连接不稳定或服务器超时 | 检查网络连接,设置合理的超时时间,确认服务器响应正常 | 重置网络连接,调整超时设置,检查服务器状态 |
| 函数调用失败 | 外部服务不可用或参数错误 | 检查外部服务状态,确认参数格式正确 | 重试调用,检查外部服务状态,修正参数格式 |
| 知识库检索结果不相关 | 知识库内容不匹配或检索策略不当 | 检查知识库内容,调整检索策略 | 更新知识库内容,优化检索策略 |
| 批量任务执行缓慢 | 并发数设置过低或任务本身复杂 | 增加并发数,优化任务逻辑 | 调整并发数,优化任务代码 |
| 会话分析数据缺失 | 缺少配置或日志记录错误 | 检查配置文件,确认日志记录正确 | 修正配置文件,检查日志记录 |
| 风险项 | 等级 | 防护措施 | 验证方法 |
|---|---|---|---|
| 数据泄露 | 高 | 实施数据加密,限制访问权限 | 定期进行安全审计,检查加密状态 |
| 恶意调用 | 中 | 限制API调用频率,监控异常行为 | 实施API速率限制,监控调用日志 |
| 知识库篡改 | 中 | 实施知识库访问控制,定期备份 | 检查访问控制设置,定期进行数据备份 |
| 系统漏洞 | 高 | 定期更新系统,使用安全配置 | 定期进行系统更新,检查安全配置 |
| 代码注入 | 高 | 实施输入验证,使用安全的API | 检查输入验证逻辑,使用安全的API |
| 场景 | 效率提升量化分析 | 差异化对比 |
|---|---|---|
| 企业知识库问答 | 检索速度提升 30%,准确率提升 20% | 相比传统问答系统,检索速度更快,准确率更高 |
| 智能客服 | 客服响应时间缩短 50%,工单处理效率提升 40% | 相比人工客服,响应更快,处理效率更高 |
| 批量内容处理 | 处理速度提升 25%,资源利用率提升 15% | 相比手动处理,处理速度更快,资源利用率更高 |
| 流式对话服务 | 用户体验提升 20%,系统负载降低 10% | 相比传统对话,用户体验更好,系统负载更低 |
| AI Agent 工具链 | 工作流程自动化率提升 30%,错误率降低 15% | 相比手动操作,自动化率更高,错误率更低 |
A1: 全功能豆包大模型集成平。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
针对豆包助手(专业版)使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |