Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions skills/douzhantai/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# 抖战台 · 百炼 Agent Skill

> 外滩大会 2026 · 百炼赛道参赛作品(Agent Skills 形态)
> 把抖音电商四大环节(选品 / 直播 / 投流素材 / 财务核算)收敛成「总指挥 + 4 专职 Agent」多智能体作战台。

## 这是什么
本 Skill 是「抖战台」作战内核的 **Agent Skills 形态**,符合百炼参赛专区「用阿里云百炼 Agent Skills 打造」的要求:
- 大脑 = 阿里云百炼 DashScope 大模型(qwen-plus / qwen-max,OpenAI 兼容协议)
- 形态 = 标准百炼 Skill 包(SKILL.md + scripts + references),Agent 自动激活
- 配套 = 抖战台 Web 版(零依赖可视化体验):https://26040e8952db42ae9ef6d7ca086789ed.bj4.agentos-app.net

## 目录结构
```
douzhantai/
├── SKILL.md # 主文件:定位 / 触发 / 4 Agent / 工具链 / 运行方式
├── README.md # 本文件
├── scripts/
│ └── run_campaign.py # 命令行运行器,调百炼 DashScope 跑完 4 步(零依赖)
└── references/
└── agents_prompt.md # 4 个专职 Agent 完整 systemPrompt
```

## 安装(两种)
**方式一 · 自动安装(推荐)**:把下面这段话粘进你的 AI Agent(Cursor / Qwen Code / Claude Desktop / OpenWork 等):
```
请帮我安装阿里云百炼的 AI Skills:
1. 检查 Node.js >=18(Skill 脚本用 Python,另需 Python3)
2. 把 douzhantai 目录放到你的 skills 路径下,或 npx skills add <本仓库>
3. 安装完成后告诉我「Douzhantai Skill installed」
```

**方式二 · 手动**:克隆本仓库,将 `douzhantai/` 目录置于 Agent 的 skills 目录。

## 运行
```bash
export DASHSCOPE_API_KEY=sk-xxxx # 阿里云百炼 API Key(新用户赠 1 亿免费 Token)
python scripts/run_campaign.py "推一款便携式迷你榨汁杯,客单价39-99,目标一二线年轻女性"
```
未配置 Key 时自动降级内置样例(便携榨汁杯全链路),零依赖可演示。

## 提交百炼赛道时填写(参考)
- **项目名称**:抖战台 · 抖音电商 AI 作战台
- **团队/作者**:(待填)
- **你做了什么**:把抖音电商选品/直播/素材/财务四大环节封装成 4 个专职 Agent + 总指挥,一句话驱动串联协同,输出完整作战方案
- **用到的能力**:阿里云百炼 DashScope(qwen-plus / qwen-max)大模型推理;Agent Skills 形态封装;可选接百炼 CLI(bailian-cli)扩展全模态
- **效果展示**:Web 版公网链接 + 1 分钟录屏 + run_campaign.py 输出
- **项目链接**:(本仓库地址,含 Skill 包 + Web 版源码)

## 安全
- API Key 仅来自环境变量,绝不进代码 / 仓库(已 .gitignore)
- 算术工具白名单校验,杜绝代码注入
- 不收集、不存储任何用户业务数据
55 changes: 55 additions & 0 deletions skills/douzhantai/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
name: douzhantai
description: 抖音电商多智能体作战台。当用户需要为抖音电商做选品拆解、直播间场景设计、千川短视频脚本生成、或直播/店铺财务核算时使用;一句话驱动「选品→直播→素材→财务」四环串联协同,输出完整作战方案。适用于电商卖家、运营、投手、创业团队、内容团队。本 Skill 的大脑为阿里云百炼 DashScope 大模型(qwen-plus / qwen-max),通过 OpenAI 兼容协议调用,符合「用阿里云百炼 Agent Skills 打造」的参赛要求。
---

# 抖战台 · 抖音电商多智能体作战 Skill

## 一句话定位
把抖音电商四大高频环节(选品 / 直播 / 投流素材 / 财务核算)收敛成一个「总指挥 + 4 个专职 Agent」的**多智能体作战台**。用户说一个作战目标,Skill 自动拆解、串联 4 个 Agent 依次执行,**后一个继承前一个的结论**,最终汇总成一份可落地的完整作战方案——而不是 4 个孤立回答。

## 触发场景(满足任一即激活)
- 用户要做抖音电商选品分析 / 七步拆解法
- 用户要设计 9:16 直播间场景方案(色彩 / 道具 / 机位 / 话术节奏 / 灯光)
- 用户要写千川短视频脚本(钩子-痛点-演示-见证-促单)
- 用户要核算一场直播 / 店铺的毛利、ROI、净利、盈亏预警
- 用户说类似:「帮我推一款 XXX 商品,目标 XXX 人群,想快速起量」

## 能力(4 个专职 Agent)
1. 🔍 **选品拆解(selection)**:七步拆解法输出痛点 / 人群画像 / 差异化卖点 / 使用场景 / 价格带与利润 / 竞品破绽 / 内容钩子金句。
2. 🎬 **直播场景(live)**:9:16 直播间色彩方案、关键道具、机位构图、主播走位、话术节奏(开场-痛点-演示-逼单)、灯光建议。
3. 🎞️ **千川素材(material)**:产出 3 条 15-30s 千川短视频脚本(钩子→痛点→演示→见证→促单),标注画面+口播+时长。
4. 📊 **财务核算(finance)**:强制调用计算器实时算毛利率 / ROI / 净利 + 盈亏预警与优化建议。

## 工具链(本 Skill 调用的能力)
- `calculator`:实时计算财务指标(白名单算术,非口算,杜绝注入)
- `extract_table`:解析用户粘贴的流水 / 表格文本 → 结构化 JSON
- `feishu_fetch` / `trend_fetch`:竞品与趋势参考(可接飞书多维表格 / 公开热榜;无凭证自动降级示例)
- **(实时生成)阿里云百炼 DashScope 模型(qwen-plus / qwen-max)**:通过 OpenAI 兼容协议调用——本 Skill 的「大脑」即百炼大模型。详见 `references/agents_prompt.md`。

## 工作流(串联 + 上下文传递)
```
选品拆解 → 直播场景 → 千川素材 → 财务核算
```
每一步产出作为下一步的输入上下文,形成连贯方案。

## 运行方式
**方式一(推荐,最稳,可复现)**:本 Skill 附带 `scripts/run_campaign.py`,直接调用阿里云百炼 DashScope:
```bash
export DASHSCOPE_API_KEY=sk-xxxx # 阿里云百炼 API Key(新用户赠 1 亿免费 Token)
python scripts/run_campaign.py "推一款便携式迷你榨汁杯,客单价39-99,目标一二线年轻女性"
```
脚本依次调用百炼模型跑完 4 步,输出完整作战方案(Markdown)。

**方式二(在百炼 CLI / OpenWork 中)**:Agent 读取本 `SKILL.md` + `references/agents_prompt.md` 后,按 4 个 Agent 的 systemPrompt 驱动对话,逐步产出各环节;`bailian-cli` Skill 封装的 `bl` 命令可在此调用文生图 / 视频等全模态能力扩展素材。

## 演示降级
未配置 `DASHSCOPE_API_KEY` 时,`run_campaign.py` 自动回退内置真实样例(便携榨汁杯全链路),保证零依赖可演示、输出永不空白——与抖战台 Web 版的演示模式一致。

## 安全
- API Key 仅来自环境变量 `DASHSCOPE_API_KEY`,绝不明文写死、绝不进代码 / 仓库(已 `.gitignore`)。
- 输入经白名单校验(`safeEvalMath` 仅允许数字与 + - * / ( )),杜绝代码注入。
- 不收集、不存储任何用户业务数据;页面 / 脚本不含第三方跟踪。

## 与抖战台 Web 版的关系
本 Skill 是抖战台作战内核的 **Agent Skills 形态**:Web 版(https://26040e8952db42ae9ef6d7ca086789ed.bj4.agentos-app.net)提供零依赖可视化体验,本 Skill 提供命令行 / Agent 可调用形态,二者共享同一套 4-Agent 编排逻辑与工具协议。提交百炼赛道时,二者共同证明作品「用阿里云百炼 Agent Skills 打造」。
44 changes: 44 additions & 0 deletions skills/douzhantai/references/agents_prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# 抖战台 · 4 个专职 Agent 完整 Prompt 参考

本文件供装入百炼 CLI / OpenWork 的 Agent 加载,驱动「抖音电商多智能体作战」工作流。
每个 Agent 在 `SKILL.md` 的串联顺序中执行,**后一个 Agent 必须继承前一个的输出上下文**。

## 工具调用协议
模型在回复中可插入 `<<tool:name|参数>>`,运行时执行后回传结果再续写。本 Skill 脚本形态已内置工具模拟(见 `scripts/run_campaign.py`)。

---

## 🔍 选品拆解(selection)
```
你是资深抖音电商选品拆解专家,擅长「七步拆解法」。给定品类/商品与背景,输出:
①真实痛点 ②核心人群画像 ③差异化卖点 ④使用场景 ⑤价格带与利润空间 ⑥竞品破绽 ⑦内容钩子(金句)。
用结构化中文,可含表格。
可用工具:需要竞品参考时插入 <<tool:feishu_fetch|竞品关键词>> 或实时趋势 <<tool:trend_fetch|品类>>,
系统返回数据后补充「竞品破绽」。可参考全局知识库历史洞察。
```

## 🎬 直播场景(live)
```
你是直播间场景导演,擅长把商品转成可落地的 9:16 直播间方案。必须基于【上游作战上下文】里的
选品结论(卖点 / 人群 / 钩子)来设计。输出:场景色彩方案、关键道具/元素、摄像机位与构图、
主播走位、话术节奏(开场-痛点-演示-逼单)、灯光建议。结构清晰可直接执行。
```

## 🎞️ 千川素材(material)
```
你是千川素材导演。必须基于【上游作战上下文】里的选品结论(卖点/钩子/人群)与直播场景来写脚本。
给定投放目标,产出 3 条 15-30s 短视频脚本,结构:钩子(前3秒)→痛点→产品演示→信任见证→促单。
每条标注画面+口播+时长。口播口语化、有冲突感。
可用工具:需要竞品脚本或实时趋势参考时插入 <<tool:feishu_fetch|竞品脚本关键词>> 或 <<tool:trend_fetch|品类>>。
可参考全局知识库历史洞察。
```

## 📊 财务核算(finance)
```
你是抖音电商财务核算师。给定一场直播/店铺的经营数据,计算:实收GMV、毛利、毛利率、投放ROI、
净利、净利率,并给出盈亏预警与优化建议。
★ 若用户粘贴了表格/流水文本,先用 <<tool:extract_table|文本>> 解析为结构化数据,
再用 <<tool:calculator|算术表达式>> 实时计算(不要口算):
毛利率插入 <<tool:calculator|(108000-45000-11000)/108000*100>>
系统返回结果后写进结论。用表格呈现。
```
214 changes: 214 additions & 0 deletions skills/douzhantai/scripts/run_campaign.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
抖战台 · 抖音电商多智能体作战 Skill —— 命令行运行器

调用阿里云百炼 DashScope 大模型(qwen-plus / qwen-max,OpenAI 兼容协议),
串联执行 4 个专职 Agent:选品拆解 → 直播场景 → 千川素材 → 财务核算,
后一个 Agent 继承前一个的结论,最终汇总成完整作战方案。

零第三方依赖(仅用 Python 标准库 urllib),有 Key 真实跑、无 Key 降级示例。
符合「用阿里云百炼 Agent Skills 打造」的参赛要求。

用法:
export DASHSCOPE_API_KEY=sk-xxxx
python run_campaign.py "推一款便携式迷你榨汁杯,客单价39-99,目标一二线年轻女性"
"""

import os
import sys
import json
import urllib.request
import urllib.error

DASHSCOPE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
DEFAULT_MODEL = os.environ.get("DASHSCOPE_MODEL", "qwen-plus")

# ---------- 工具链(与 Web 版 agents.js 同源,白名单校验杜绝注入) ----------

def safe_eval_math(expr):
"""仅允许数字与 + - * / ( ) . 与空白,杜绝代码注入。"""
if not isinstance(expr, str):
return None
if not __import__("re").match(r"^[\d+\-*/().\s]+$", expr):
return None
try:
v = eval('"' + '"' + expr + '"') if False else __import__("math")
# 用受限函数式求值
val = eval(compile(expr, "<math>", "eval", {"__builtins__": {}}, {}), {"abs": abs, "round": round})
if not isinstance(val, (int, float)) or val != val: # NaN 检查
return None
return round(val * 1000) / 1000
except Exception:
return None


def tool_feishu_fetch(keyword=""):
return (
"【飞书多维表格·示例竞品数据】\n"
"竞品A | 客单价 ¥69 | 月销 3.2万 | 主推场景:办公室替代奶茶 | 钩子:下午三点别点奶茶\n"
"竞品B | 客单价 ¥99 | 月销 1.1万 | 主推场景:大餐刮油 | 钩子:大餐不怕一杯刮油"
)


def tool_trend_fetch(category=""):
return (
"【实时趋势参考·示例】\n"
"1. 办公室健康饮品升温\n"
"2. 健身代餐搜索 +38%\n"
"3. 便携小家电复购率高"
)


def tool_extract_table(text):
try:
lines = [l for l in text.strip().split("\n") if "|" in l]
if not lines:
return "未解析到表格行(请用 | 分隔列,如 GMV|120000)"
rows = [l.strip().strip("|").split("|") for l in lines]
rows = [[c.strip() for c in r] for r in rows]
header, data = rows[0], rows[1:]
return json.dumps([dict(zip(header, r)) for r in data], ensure_ascii=False, indent=2)
except Exception as e:
return "表格解析失败:" + str(e)


# ---------- 4 个专职 Agent 定义(systemPrompt 提炼自 Web 版 agents.js) ----------

AGENTS = [
{
"id": "selection", "name": "选品拆解", "icon": "🔍",
"system": (
"你是资深抖音电商选品拆解专家,擅长「七步拆解法」。给定品类/商品与背景,输出:"
"①真实痛点 ②核心人群画像 ③差异化卖点 ④使用场景 ⑤价格带与利润空间 ⑥竞品破绽 ⑦内容钩子(金句)。"
"用结构化中文,可含表格。可用工具 feishu_fetch 读竞品、trend_fetch 读趋势,系统会返回数据,据此补充竞品破绽。"
),
"tools": ["feishu_fetch", "trend_fetch"],
},
{
"id": "live", "name": "直播场景", "icon": "🎬",
"system": (
"你是直播间场景导演,擅长把商品转成可落地的 9:16 直播间方案。必须基于【上游作战上下文】里的选品结论"
"(卖点/人群/钩子)设计。输出:场景色彩方案、关键道具/元素、摄像机位与构图、主播走位、话术节奏"
"(开场-痛点-演示-逼单)、灯光建议。结构清晰可直接执行。"
),
"tools": [],
},
{
"id": "material", "name": "千川素材", "icon": "🎞️",
"system": (
"你是千川素材导演。必须基于【上游作战上下文】里的选品结论与直播场景写脚本。给定投放目标,"
"产出 3 条 15-30s 短视频脚本,结构:钩子(前3秒)→痛点→产品演示→信任见证→促单。每条标注画面+口播+时长。"
"口播口语化、有冲突感。可用 feishu_fetch / trend_fetch 取参考。"
),
"tools": ["feishu_fetch", "trend_fetch"],
},
{
"id": "finance", "name": "财务核算", "icon": "📊",
"system": (
"你是抖音电商财务核算师。给定一场直播/店铺经营数据,计算:实收GMV、毛利、毛利率、投放ROI、净利、净利率,"
"并给盈亏预警与优化建议。若用户粘贴了表格,先用 extract_table 解析再用 calculator 实时计算(不要口算)。"
"用表格呈现。"
),
"tools": ["calculator", "extract_table"],
},
]

PIPELINE = ["selection", "live", "material", "finance"]


# ---------- 百炼 DashScope 调用 ----------

def call_llm(system, user, model=DEFAULT_MODEL):
key = os.environ.get("DASHSCOPE_API_KEY")
if not key:
return None # 触发降级
payload = {
"model": model,
"messages": [
{"role": "system", "content": system},
{"role": "user", "content": user},
],
"temperature": 0.8,
"max_tokens": 1400,
}
req = urllib.request.Request(
DASHSCOPE_URL,
data=json.dumps(payload).encode("utf-8"),
headers={"Authorization": "Bearer " + key, "Content-Type": "application/json"},
)
try:
with urllib.request.urlopen(req, timeout=90) as resp:
data = json.load(resp)
return data["choices"][0]["message"]["content"]
except Exception as e:
return "[百炼调用失败: %s]" % e


def inject_tools(agent, user_text):
"""模拟工具链:在 user 文本中附带工具示例返回,让 LLM 基于数据产出。"""
if "feishu_fetch" in agent["tools"]:
user_text += "\n\n【工具返回 feishu_fetch】\n" + tool_feishu_fetch()
if "trend_fetch" in agent["tools"]:
user_text += "\n\n【工具返回 trend_fetch】\n" + tool_trend_fetch()
if "extract_table" in agent["tools"]:
sample = "GMV|120000\n退款|12000\n货品成本|45000\n投流花费|30000\n佣金快递|11000"
user_text += "\n\n【用户流水·工具返回 extract_table】\n" + tool_extract_table(sample)
if "calculator" in agent["tools"]:
user_text += "\n\n【请务必用 calculator 实时计算,示例:毛利率=(108000-45000-11000)/108000*100,ROI=108000/30000】"
return user_text


# ---------- 降级示例(无 Key 时) ----------

DEMO = {
"selection": "🔍 选品拆解 · 便携榨汁杯:痛点=大榨汁机占地方难洗;人群=一二线白领/健身/宝妈;卖点=300ml一杯量+USB-C+可拆洗;价格带引流39/主推69/套装99;钩子金句='大杯榨汁机吃灰三年,这个小东西我天天带出门'",
"live": "🎬 直播场景 · 明亮厨房风:主色奶白+浅木,点缀橙黄果汁;中岛台+一字排开鲜果+透明玻璃杯;主机位正面+特写机位;话术 开场-痛点-演示-逼单;5600K 柔光",
"material": "🎞️ 千川脚本 ×3:①吃灰对比(扔大榨汁机) ②通勤实测(地铁现榨) ③宝妈场景(变果汁娃爱喝);均 钩子→痛点→演示→见证→促单",
"finance": "📊 财务:实收GMV¥108,000,毛利率≈48.1%,ROI=3.6(健康),净利¥22,000(18.3%);预警 ROI达标可加投、退款率10%偏高查品控",
}


# ---------- 主流程 ----------

def run(goal):
print("=" * 64)
print("⚔️ 抖战台 · 多智能体作战开始")
print("🎯 作战目标:%s" % goal)
print("=" * 64)

key = os.environ.get("DASHSCOPE_API_KEY")
mode = "实时模式(阿里云百炼 DashScope)" if key else "演示降级(内置样例,未配置 DASHSCOPE_API_KEY)"
print("🧠 模式:%s\n" % mode)

ctx = ""
results = []
for i, aid in enumerate(PIPELINE):
agent = next(a for a in AGENTS if a["id"] == aid)
print("— 步骤 %d · %s %s —" % (i + 1, agent["icon"], agent["name"]))

if key:
user = "请处理以下抖音电商需求:\n%s\n" % goal
if ctx:
user += "\n【上游作战上下文(前序智能体结论,请继承并深化)】\n%s\n" % ctx
user = inject_tools(agent, user)
out = call_llm(agent["system"], user)
if out is None or out.startswith("[百炼调用失败"):
out = DEMO[aid] # 单步失败兜底降级
else:
out = DEMO[aid]

print(out)
print()
ctx += "\n[%s 结论] %s\n" % (agent["name"], out)
results.append((agent, out))

print("=" * 64)
print("🚀 总攻建议:场景痛点型素材切入打认知,直播间明亮厨房风建信任,千川先小预算测点击率再放量;"
"财务以 ROI>3 为健康线,重点监控退款率。整条链路由 4 个专职智能体串联协同完成。")
print("=" * 64)


if __name__ == "__main__":
goal = sys.argv[1] if len(sys.argv) > 1 else "推一款便携式迷你榨汁杯,客单价39-99,目标一二线年轻女性"
run(goal)