feihong-code 8.0.0 → 8.0.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/workflows/ci.yml +193 -193
- package/CHANGELOG.md +140 -117
- package/README.md +656 -636
- package/agent-team/.env.example +13 -0
- package/agent-team/README.md +42 -0
- package/agent-team/agents/__init__.py +0 -0
- package/agent-team/agents/l1_acquisition.py +207 -0
- package/agent-team/agents/l2_content.py +237 -0
- package/agent-team/agents/l3_conversion.py +148 -0
- package/agent-team/agents/l4_analysis.py +118 -0
- package/agent-team/agents/l5_management.py +52 -0
- package/agent-team/agents/registry.py +60 -0
- package/agent-team/config.py +39 -0
- package/agent-team/core/__init__.py +0 -0
- package/agent-team/core/agent.py +73 -0
- package/agent-team/core/models.py +347 -0
- package/agent-team/core/scheduler.py +150 -0
- package/agent-team/core/task.py +121 -0
- package/agent-team/feihongzhi.db +0 -0
- package/agent-team/llm/__init__.py +12 -0
- package/agent-team/llm/base.py +22 -0
- package/agent-team/llm/doubao_llm.py +52 -0
- package/agent-team/llm/mock_llm.py +42 -0
- package/agent-team/main.py +235 -0
- package/agent-team/requirements.txt +2 -0
- package/agent-team/skill_packager.py +248 -0
- package/agent-team/skills/01_AI/350/216/267/345/256/242/347/272/277/347/264/242/351/233/267/350/276/276/SKILL.md +40 -0
- package/agent-team/skills/01_AI/350/216/267/345/256/242/347/272/277/347/264/242/351/233/267/350/276/276/run.py +111 -0
- package/agent-team/skills/02_AI/351/224/200/345/224/256/350/267/237/350/277/233/351/224/200/345/206/240/SKILL.md +38 -0
- package/agent-team/skills/02_AI/351/224/200/345/224/256/350/267/237/350/277/233/351/224/200/345/206/240/run.py +108 -0
- package/agent-team/skills/03_/350/257/204/350/256/272/345/214/272/345/225/206/346/234/272/350/257/206/345/210/253/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/03_/350/257/204/350/256/272/345/214/272/345/225/206/346/234/272/350/257/206/345/210/253/345/256/230/run.py +106 -0
- package/agent-team/skills/04_/345/256/242/346/210/267/350/201/212/345/244/251/346/210/220/344/272/244/345/210/206/346/236/220/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/04_/345/256/242/346/210/267/350/201/212/345/244/251/346/210/220/344/272/244/345/210/206/346/236/220/345/256/230/run.py +107 -0
- package/agent-team/skills/05_/345/220/214/350/241/214/347/210/206/346/254/276/351/233/267/350/276/276/SKILL.md +38 -0
- package/agent-team/skills/05_/345/220/214/350/241/214/347/210/206/346/254/276/351/233/267/350/276/276/run.py +99 -0
- package/agent-team/skills/06_/346/257/217/346/227/245/347/262/276/345/207/206/350/216/267/345/256/242/351/200/211/351/242/230/345/256/230/SKILL.md +39 -0
- package/agent-team/skills/06_/346/257/217/346/227/245/347/262/276/345/207/206/350/216/267/345/256/242/351/200/211/351/242/230/345/256/230/run.py +103 -0
- package/agent-team/skills/07_AI/345/244/226/350/264/270/345/274/200/345/217/221/345/256/242/346/210/267/345/221/230/345/267/245/SKILL.md +39 -0
- package/agent-team/skills/07_AI/345/244/226/350/264/270/345/274/200/345/217/221/345/256/242/346/210/267/345/221/230/345/267/245/run.py +103 -0
- package/agent-team/skills/08_/345/260/217/347/272/242/344/271/246/347/262/276/345/207/206/350/216/267/345/256/242/345/221/230/345/267/245/SKILL.md +40 -0
- package/agent-team/skills/08_/345/260/217/347/272/242/344/271/246/347/262/276/345/207/206/350/216/267/345/256/242/345/221/230/345/267/245/run.py +97 -0
- package/agent-team/skills/09_/347/247/201/345/237/237/345/256/242/346/210/267/345/210/206/345/261/202/350/267/237/350/277/233/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/09_/347/247/201/345/237/237/345/256/242/346/210/267/345/210/206/345/261/202/350/267/237/350/277/233/345/256/230/run.py +106 -0
- package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/run.py +108 -0
- package/agent-team/skills/11_/344/270/200/344/272/272/345/205/254/345/217/270AI/345/221/230/345/267/245/350/260/203/345/272/246/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/11_/344/270/200/344/272/272/345/205/254/345/217/270AI/345/221/230/345/267/245/350/260/203/345/272/246/345/256/230/run.py +111 -0
- package/agent-team/skills/12_/350/200/201/346/235/277/347/237/255/350/247/206/351/242/221/350/216/267/345/256/242/350/204/232/346/234/254/345/256/230/SKILL.md +39 -0
- package/agent-team/skills/12_/350/200/201/346/235/277/347/237/255/350/247/206/351/242/221/350/216/267/345/256/242/350/204/232/346/234/254/345/256/230/run.py +104 -0
- package/agent-team/skills/13_/345/215/232/344/270/273/350/264/246/345/217/267/346/267/261/345/272/246/346/213/206/350/247/243/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/13_/345/215/232/344/270/273/350/264/246/345/217/267/346/267/261/345/272/246/346/213/206/350/247/243/345/256/230/run.py +105 -0
- package/agent-team/skills/14_AI/347/237/255/350/247/206/351/242/221/350/207/252/345/212/250/345/211/252/350/276/221/345/270/210/SKILL.md +39 -0
- package/agent-team/skills/14_AI/347/237/255/350/247/206/351/242/221/350/207/252/345/212/250/345/211/252/350/276/221/345/270/210/run.py +108 -0
- package/agent-team/skills/15_/345/205/254/344/274/227/345/217/267/350/207/252/345/212/250/350/277/220/350/220/245/345/217/221/345/270/203/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/15_/345/205/254/344/274/227/345/217/267/350/207/252/345/212/250/350/277/220/350/220/245/345/217/221/345/270/203/345/256/230/run.py +105 -0
- package/agent-team/skills/16_/350/241/214/344/270/232/346/267/261/345/272/246/345/210/206/346/236/220/345/270/210/SKILL.md +38 -0
- package/agent-team/skills/16_/350/241/214/344/270/232/346/267/261/345/272/246/345/210/206/346/236/220/345/270/210/run.py +108 -0
- package/agent-team/skills/17_/346/212/225/350/265/204/347/240/224/347/251/266/345/222/250/350/257/242/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/17_/346/212/225/350/265/204/347/240/224/347/251/266/345/222/250/350/257/242/345/256/230/run.py +106 -0
- package/agent-team/tests/__init__.py +0 -0
- package/agent-team/tests/test_core.py +156 -0
- package/dist/agent/agent-session.js +103 -0
- package/dist/agent/agent-session.js.map +1 -0
- package/dist/agent/orchestrator.js +8 -0
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/steer.js +52 -0
- package/dist/agent/steer.js.map +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/node-guard.js +17 -0
- package/dist/cli/node-guard.js.map +1 -0
- package/dist/cli/run.js +2 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/enterprise/policy.js +40 -17
- package/dist/enterprise/policy.js.map +1 -1
- package/dist/tools/agents/agents-bridge.js +144 -0
- package/dist/tools/agents/agents-bridge.js.map +1 -0
- package/dist/tools/desktop/desktop-guard.js +81 -0
- package/dist/tools/desktop/desktop-guard.js.map +1 -0
- package/dist/tools/desktop/desktop.tool.js +201 -0
- package/dist/tools/desktop/desktop.tool.js.map +1 -0
- package/dist/tools/desktop/feihong-win.js +163 -0
- package/dist/tools/desktop/feihong-win.js.map +1 -0
- package/dist/tools/desktop/index.js +37 -0
- package/dist/tools/desktop/index.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/index.js +10 -2
- package/dist/tools/mcp/index.js.map +1 -1
- package/dist/tools/mcp/mcp-client.js +4 -0
- package/dist/tools/mcp/mcp-client.js.map +1 -1
- package/dist/tools/sandbox.js +28 -0
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/web/public/public/css/style.css +1756 -0
- package/dist/web/public/public/favicon.svg +11 -0
- package/dist/web/public/public/index.html +1246 -0
- package/dist/web/public/public/js/api.js +558 -0
- package/dist/web/public/public/js/app.js +2233 -0
- package/dist/web/public/public/js/mock-api.js +259 -0
- package/dist/web/public/public/js/monaco-editor.js +363 -0
- package/dist/web/public/public/js/ui.js +2217 -0
- package/dist/web/public/public/js/utils.js +214 -0
- package/dist/web/public/public/manifest.json +59 -0
- package/dist/web/public/public/robots.txt +14 -0
- package/dist/web/public/public/service-worker.js +149 -0
- package/docs/AI/345/221/230/345/267/245/345/206/233/345/233/242-/346/225/264/345/220/210/350/257/264/346/230/216.md +68 -0
- package/docs/API.md +1 -1
- package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +3 -3
- package/docs/P1.1-P3-P5/345/267/245/347/250/213/345/256/236/346/226/275/346/200/273/347/273/223.md +328 -0
- package/docs/P5-Pi/345/257/271/347/205/247/350/257/204/346/265/213/346/212/245/345/221/212-mock/346/250/241/345/274/217.json +125 -0
- package/docs/P5-Pi/345/257/271/347/205/247/350/257/204/346/265/213/346/212/245/345/221/212-/347/234/237/345/256/236/346/250/241/345/236/213.json +138 -0
- package/docs/P5-pi-compare-real-report.json +138 -0
- package/docs/P5-pi-compare-report.json +125 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code-MVP/351/233/206/346/210/220/344/272/244/344/273/230/347/211/251.md +355 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code/344/273/267/345/200/274/345/210/206/346/236/220-/345/274/200/345/217/221/346/226/207/346/241/243.md +291 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code/344/273/267/345/200/274/351/207/215/344/274/260-/345/217/257/350/247/206/345/214/226.html +84 -0
- package/docs/SWE-bench-300-agnes-2.5-flash-/346/234/200/347/273/210/346/212/245/345/221/212.json +2012 -0
- package/docs/SWE-bench-300-agnes-2.5-flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +74 -0
- package/docs/SWE-bench-Lite-DeepSeek-V4-Flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +102 -0
- package/docs/TECHNICAL-SPECIFICATION.md +66 -0
- package/docs/TECHNICAL-SPECIFICATION.pdf +0 -0
- package/docs/Windows/346/211/213/350/204/232-POC/346/274/224/347/244/272/350/204/232/346/234/254.md +131 -0
- package/docs/Windows/346/211/213/350/204/232/346/216/245/345/205/245/346/214/207/345/215/227.md +181 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.1.md +146 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 10_GEO商机诊断官
|
|
3
|
+
description: 基于地理与经营数据诊断潜在商机。属于L4层,优先级P3。触发场景:用户需要GEO商机诊断官、或涉及region、business_type相关任务时调用。输出:diagnosis。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 10_GEO商机诊断官(10)
|
|
7
|
+
|
|
8
|
+
基于地理与经营数据诊断潜在商机
|
|
9
|
+
|
|
10
|
+
- **所属层级**:L4(优先级 P3)
|
|
11
|
+
|
|
12
|
+
## 使用方式
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 方式一:命令行参数
|
|
16
|
+
python3 run.py --input '{"region": "示例输入"}'
|
|
17
|
+
|
|
18
|
+
# 方式二:标准输入
|
|
19
|
+
echo '{"region": "示例输入"}' | python3 run.py
|
|
20
|
+
|
|
21
|
+
# 接入真实大模型(可选)
|
|
22
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx python3 run.py --llm --input '{"region": "示例输入"}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 输入字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 说明 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| region | 目标区域 |
|
|
30
|
+
| business_type | 业态 |
|
|
31
|
+
|
|
32
|
+
## 输出字段
|
|
33
|
+
|
|
34
|
+
- **diagnosis**:商机诊断报告
|
|
35
|
+
|
|
36
|
+
## 安装为 Skill
|
|
37
|
+
|
|
38
|
+
将本目录(含 SKILL.md 与 run.py)复制到目标 Skill 根目录即可被智能体发现调用。
|
package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/run.py
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""GEO商机诊断官(10)独立运行器。
|
|
4
|
+
|
|
5
|
+
由 feihongzhi_agents 导出:自包含、仅标准库,可被其他智能体直接调用或安装为 Skill。
|
|
6
|
+
用法:
|
|
7
|
+
python3 run.py --input '{"field": "value"}'
|
|
8
|
+
echo '{"field": "value"}' | python3 run.py
|
|
9
|
+
可选接入真实大模型(设置环境变量后加 --llm):
|
|
10
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
|
|
11
|
+
python3 run.py --llm --input '...'
|
|
12
|
+
"""
|
|
13
|
+
import argparse
|
|
14
|
+
import json
|
|
15
|
+
import sys
|
|
16
|
+
import time
|
|
17
|
+
import urllib.request
|
|
18
|
+
import urllib.error
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
|
|
21
|
+
# ------------------------- 内嵌核心逻辑(自动生成) -------------------------
|
|
22
|
+
def _ts() -> str:
|
|
23
|
+
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def run_logic_10(data, llm=None):
|
|
27
|
+
"""GEO 商机诊断:基于地理与经营数据诊断潜在商机。"""
|
|
28
|
+
region = data.get("region", "泉州")
|
|
29
|
+
business = data.get("business_type", "企业服务")
|
|
30
|
+
diagnosis = {
|
|
31
|
+
"region": region,
|
|
32
|
+
"business_type": business,
|
|
33
|
+
"zones": [
|
|
34
|
+
{"zone": f"{region}·核心商圈", "score": 92, "reason": "人口密度高、企业密集"},
|
|
35
|
+
{"zone": f"{region}·产业园区", "score": 85, "reason": "目标客群集中"},
|
|
36
|
+
],
|
|
37
|
+
"priority": "建议优先覆盖核心商圈",
|
|
38
|
+
"diagnosed_at": _ts(),
|
|
39
|
+
}
|
|
40
|
+
ai_note = ""
|
|
41
|
+
if llm is not None and getattr(llm, "provider", "mock") != "mock":
|
|
42
|
+
try:
|
|
43
|
+
ai_note = llm.complete(
|
|
44
|
+
f"区域 {region}、业态 {business},给出获客优先级判断,不超过 60 字。",
|
|
45
|
+
system="你是 GEO 商业诊断专家。")
|
|
46
|
+
except Exception:
|
|
47
|
+
ai_note = ""
|
|
48
|
+
return {"diagnosis": diagnosis, "ai_note": ai_note}
|
|
49
|
+
|
|
50
|
+
# ------------------------- 极简 LLM 客户端(可选) -------------------------
|
|
51
|
+
class _MiniLLM:
|
|
52
|
+
provider = "doubao"
|
|
53
|
+
def __init__(self):
|
|
54
|
+
import os
|
|
55
|
+
self.key = os.environ.get("LLM_API_KEY", "")
|
|
56
|
+
self.model = os.environ.get("LLM_MODEL", "")
|
|
57
|
+
self.base = os.environ.get("LLM_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3").rstrip("/")
|
|
58
|
+
if not self.key or not self.model:
|
|
59
|
+
raise RuntimeError("缺少 LLM_API_KEY / LLM_MODEL 环境变量")
|
|
60
|
+
def complete(self, prompt, system=""):
|
|
61
|
+
msgs = []
|
|
62
|
+
if system:
|
|
63
|
+
msgs.append({"role": "system", "content": system})
|
|
64
|
+
msgs.append({"role": "user", "content": prompt})
|
|
65
|
+
payload = {"model": self.model, "messages": msgs, "temperature": 0.7, "max_tokens": 1024}
|
|
66
|
+
req = urllib.request.Request(
|
|
67
|
+
self.base + "/chat/completions",
|
|
68
|
+
data=json.dumps(payload).encode("utf-8"),
|
|
69
|
+
headers={"Content-Type": "application/json", "Authorization": "Bearer " + self.key},
|
|
70
|
+
method="POST")
|
|
71
|
+
try:
|
|
72
|
+
with urllib.request.urlopen(req, timeout=60) as resp:
|
|
73
|
+
body = json.loads(resp.read().decode("utf-8"))
|
|
74
|
+
except urllib.error.HTTPError as e:
|
|
75
|
+
raise RuntimeError("LLM 调用失败 HTTP %s: %s" % (e.code, e.read().decode("utf-8", errors="ignore")[:200]))
|
|
76
|
+
return body["choices"][0]["message"]["content"].strip()
|
|
77
|
+
|
|
78
|
+
def _load_input(args):
|
|
79
|
+
if args.input:
|
|
80
|
+
return json.loads(args.input)
|
|
81
|
+
if not sys.stdin.isatty():
|
|
82
|
+
raw = sys.stdin.read()
|
|
83
|
+
if raw.strip():
|
|
84
|
+
return json.loads(raw)
|
|
85
|
+
return {}
|
|
86
|
+
|
|
87
|
+
def main():
|
|
88
|
+
ap = argparse.ArgumentParser(description="GEO商机诊断官(10)")
|
|
89
|
+
ap.add_argument("--input", help="JSON 输入,如 '{\"topic\": \"AI获客\"}';或经 stdin 传入")
|
|
90
|
+
ap.add_argument("--llm", action="store_true", help="启用真实大模型(需 LLM_API_KEY/LLM_MODEL 环境变量)")
|
|
91
|
+
args = ap.parse_args()
|
|
92
|
+
data = _load_input(args)
|
|
93
|
+
llm = None
|
|
94
|
+
if args.llm:
|
|
95
|
+
try:
|
|
96
|
+
llm = _MiniLLM()
|
|
97
|
+
except Exception as e:
|
|
98
|
+
print(json.dumps({"ok": False, "error": "LLM 初始化失败: " + str(e)}, ensure_ascii=False))
|
|
99
|
+
sys.exit(1)
|
|
100
|
+
try:
|
|
101
|
+
out = run_logic_10(data, llm)
|
|
102
|
+
except Exception as e:
|
|
103
|
+
print(json.dumps({"ok": False, "error": str(e)}, ensure_ascii=False))
|
|
104
|
+
sys.exit(1)
|
|
105
|
+
print(json.dumps({"ok": True, "output": out}, ensure_ascii=False))
|
|
106
|
+
|
|
107
|
+
if __name__ == "__main__":
|
|
108
|
+
main()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 11_一人公司AI员工调度官
|
|
3
|
+
description: 编排、调度、监控全部 AI 员工,管理任务全生命周期。属于L5层,优先级基建。触发场景:用户需要一人公司AI员工调度官、或涉及tasks相关任务时调用。输出:schedule。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 11_一人公司AI员工调度官(11)
|
|
7
|
+
|
|
8
|
+
编排、调度、监控全部 AI 员工,管理任务全生命周期
|
|
9
|
+
|
|
10
|
+
- **所属层级**:L5(优先级 基建)
|
|
11
|
+
|
|
12
|
+
## 使用方式
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 方式一:命令行参数
|
|
16
|
+
python3 run.py --input '{"tasks": "["示例A","示例B"]"}'
|
|
17
|
+
|
|
18
|
+
# 方式二:标准输入
|
|
19
|
+
echo '{"tasks": "["示例A","示例B"]"}' | python3 run.py
|
|
20
|
+
|
|
21
|
+
# 接入真实大模型(可选)
|
|
22
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx python3 run.py --llm --input '{"tasks": "["示例A","示例B"]"}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 输入字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 说明 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| tasks | 待编排任务列表 |
|
|
30
|
+
|
|
31
|
+
## 输出字段
|
|
32
|
+
|
|
33
|
+
- **schedule**:执行顺序与策略
|
|
34
|
+
|
|
35
|
+
## 安装为 Skill
|
|
36
|
+
|
|
37
|
+
将本目录(含 SKILL.md 与 run.py)复制到目标 Skill 根目录即可被智能体发现调用。
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""一人公司AI员工调度官(11)独立运行器。
|
|
4
|
+
|
|
5
|
+
由 feihongzhi_agents 导出:自包含、仅标准库,可被其他智能体直接调用或安装为 Skill。
|
|
6
|
+
用法:
|
|
7
|
+
python3 run.py --input '{"field": "value"}'
|
|
8
|
+
echo '{"field": "value"}' | python3 run.py
|
|
9
|
+
可选接入真实大模型(设置环境变量后加 --llm):
|
|
10
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
|
|
11
|
+
python3 run.py --llm --input '...'
|
|
12
|
+
"""
|
|
13
|
+
import argparse
|
|
14
|
+
import json
|
|
15
|
+
import sys
|
|
16
|
+
import time
|
|
17
|
+
import urllib.request
|
|
18
|
+
import urllib.error
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
|
|
21
|
+
# ------------------------- 内嵌核心逻辑(自动生成) -------------------------
|
|
22
|
+
def _ts() -> str:
|
|
23
|
+
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def run_logic_11(data, llm=None):
|
|
27
|
+
"""调度计划:按优先级与依赖生成执行顺序。"""
|
|
28
|
+
tasks = data.get("tasks") or [
|
|
29
|
+
{"module_id": "01", "task_type": "lead_scan", "priority": "P0"},
|
|
30
|
+
{"module_id": "02", "task_type": "follow_up", "priority": "P0"},
|
|
31
|
+
{"module_id": "04", "task_type": "chat_analysis", "priority": "P0"},
|
|
32
|
+
{"module_id": "09", "task_type": "tiering", "priority": "P0"},
|
|
33
|
+
]
|
|
34
|
+
order = sorted(tasks, key=lambda t: {"P0": 0, "P1": 1, "P2": 2, "P3": 3}.get(t.get("priority", "P1"), 1))
|
|
35
|
+
schedule = {
|
|
36
|
+
"order": [t["module_id"] for t in order],
|
|
37
|
+
"dependency_rule": "前置任务 success 后触发后续任务",
|
|
38
|
+
"retry_policy": "失败自动重试,上限 3 次,超限转 blocked 并告警",
|
|
39
|
+
"human_gate": "涉及对外触达的任务在人工确认节点暂停",
|
|
40
|
+
"estimated_minutes": len(order) * 3,
|
|
41
|
+
"planned_at": _ts(),
|
|
42
|
+
}
|
|
43
|
+
ai_note = ""
|
|
44
|
+
if llm is not None and getattr(llm, "provider", "mock") != "mock":
|
|
45
|
+
try:
|
|
46
|
+
ai_note = llm.complete(
|
|
47
|
+
f"任务列表 {json.dumps(tasks, ensure_ascii=False)},指出编排上的一个风险,不超过 50 字。",
|
|
48
|
+
system="你是系统调度架构师。")
|
|
49
|
+
except Exception:
|
|
50
|
+
ai_note = ""
|
|
51
|
+
return {"schedule": schedule, "ai_note": ai_note}
|
|
52
|
+
|
|
53
|
+
# ------------------------- 极简 LLM 客户端(可选) -------------------------
|
|
54
|
+
class _MiniLLM:
|
|
55
|
+
provider = "doubao"
|
|
56
|
+
def __init__(self):
|
|
57
|
+
import os
|
|
58
|
+
self.key = os.environ.get("LLM_API_KEY", "")
|
|
59
|
+
self.model = os.environ.get("LLM_MODEL", "")
|
|
60
|
+
self.base = os.environ.get("LLM_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3").rstrip("/")
|
|
61
|
+
if not self.key or not self.model:
|
|
62
|
+
raise RuntimeError("缺少 LLM_API_KEY / LLM_MODEL 环境变量")
|
|
63
|
+
def complete(self, prompt, system=""):
|
|
64
|
+
msgs = []
|
|
65
|
+
if system:
|
|
66
|
+
msgs.append({"role": "system", "content": system})
|
|
67
|
+
msgs.append({"role": "user", "content": prompt})
|
|
68
|
+
payload = {"model": self.model, "messages": msgs, "temperature": 0.7, "max_tokens": 1024}
|
|
69
|
+
req = urllib.request.Request(
|
|
70
|
+
self.base + "/chat/completions",
|
|
71
|
+
data=json.dumps(payload).encode("utf-8"),
|
|
72
|
+
headers={"Content-Type": "application/json", "Authorization": "Bearer " + self.key},
|
|
73
|
+
method="POST")
|
|
74
|
+
try:
|
|
75
|
+
with urllib.request.urlopen(req, timeout=60) as resp:
|
|
76
|
+
body = json.loads(resp.read().decode("utf-8"))
|
|
77
|
+
except urllib.error.HTTPError as e:
|
|
78
|
+
raise RuntimeError("LLM 调用失败 HTTP %s: %s" % (e.code, e.read().decode("utf-8", errors="ignore")[:200]))
|
|
79
|
+
return body["choices"][0]["message"]["content"].strip()
|
|
80
|
+
|
|
81
|
+
def _load_input(args):
|
|
82
|
+
if args.input:
|
|
83
|
+
return json.loads(args.input)
|
|
84
|
+
if not sys.stdin.isatty():
|
|
85
|
+
raw = sys.stdin.read()
|
|
86
|
+
if raw.strip():
|
|
87
|
+
return json.loads(raw)
|
|
88
|
+
return {}
|
|
89
|
+
|
|
90
|
+
def main():
|
|
91
|
+
ap = argparse.ArgumentParser(description="一人公司AI员工调度官(11)")
|
|
92
|
+
ap.add_argument("--input", help="JSON 输入,如 '{\"topic\": \"AI获客\"}';或经 stdin 传入")
|
|
93
|
+
ap.add_argument("--llm", action="store_true", help="启用真实大模型(需 LLM_API_KEY/LLM_MODEL 环境变量)")
|
|
94
|
+
args = ap.parse_args()
|
|
95
|
+
data = _load_input(args)
|
|
96
|
+
llm = None
|
|
97
|
+
if args.llm:
|
|
98
|
+
try:
|
|
99
|
+
llm = _MiniLLM()
|
|
100
|
+
except Exception as e:
|
|
101
|
+
print(json.dumps({"ok": False, "error": "LLM 初始化失败: " + str(e)}, ensure_ascii=False))
|
|
102
|
+
sys.exit(1)
|
|
103
|
+
try:
|
|
104
|
+
out = run_logic_11(data, llm)
|
|
105
|
+
except Exception as e:
|
|
106
|
+
print(json.dumps({"ok": False, "error": str(e)}, ensure_ascii=False))
|
|
107
|
+
sys.exit(1)
|
|
108
|
+
print(json.dumps({"ok": True, "output": out}, ensure_ascii=False))
|
|
109
|
+
|
|
110
|
+
if __name__ == "__main__":
|
|
111
|
+
main()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 12_老板短视频获客脚本官
|
|
3
|
+
description: 生成获客向短视频脚本(口播 + 分镜)。属于L2层,优先级P1。触发场景:用户需要老板短视频获客脚本官、或涉及topic、selling_points、audience相关任务时调用。输出:script。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 12_老板短视频获客脚本官(12)
|
|
7
|
+
|
|
8
|
+
生成获客向短视频脚本(口播 + 分镜)
|
|
9
|
+
|
|
10
|
+
- **所属层级**:L2(优先级 P1)
|
|
11
|
+
|
|
12
|
+
## 使用方式
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 方式一:命令行参数
|
|
16
|
+
python3 run.py --input '{"topic": "示例输入"}'
|
|
17
|
+
|
|
18
|
+
# 方式二:标准输入
|
|
19
|
+
echo '{"topic": "示例输入"}' | python3 run.py
|
|
20
|
+
|
|
21
|
+
# 接入真实大模型(可选)
|
|
22
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx python3 run.py --llm --input '{"topic": "示例输入"}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 输入字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 说明 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| topic | 选题 |
|
|
30
|
+
| selling_points | 卖点列表 |
|
|
31
|
+
| audience | 目标客户 |
|
|
32
|
+
|
|
33
|
+
## 输出字段
|
|
34
|
+
|
|
35
|
+
- **script**:脚本(hook/body/cta/shots)
|
|
36
|
+
|
|
37
|
+
## 安装为 Skill
|
|
38
|
+
|
|
39
|
+
将本目录(含 SKILL.md 与 run.py)复制到目标 Skill 根目录即可被智能体发现调用。
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""老板短视频获客脚本官(12)独立运行器。
|
|
4
|
+
|
|
5
|
+
由 feihongzhi_agents 导出:自包含、仅标准库,可被其他智能体直接调用或安装为 Skill。
|
|
6
|
+
用法:
|
|
7
|
+
python3 run.py --input '{"field": "value"}'
|
|
8
|
+
echo '{"field": "value"}' | python3 run.py
|
|
9
|
+
可选接入真实大模型(设置环境变量后加 --llm):
|
|
10
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
|
|
11
|
+
python3 run.py --llm --input '...'
|
|
12
|
+
"""
|
|
13
|
+
import argparse
|
|
14
|
+
import json
|
|
15
|
+
import sys
|
|
16
|
+
import time
|
|
17
|
+
import urllib.request
|
|
18
|
+
import urllib.error
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
|
|
21
|
+
# ------------------------- 内嵌核心逻辑(自动生成) -------------------------
|
|
22
|
+
def run_logic_12(data, llm=None):
|
|
23
|
+
"""短视频获客脚本:生成口播 + 分镜脚本。"""
|
|
24
|
+
topic = data.get("topic", "AI 获客")
|
|
25
|
+
points = list(data.get("selling_points") or ["自动找客户", "降本增效"])
|
|
26
|
+
while len(points) < 2:
|
|
27
|
+
points.append("真实案例支撑")
|
|
28
|
+
audience = data.get("audience", "工厂老板")
|
|
29
|
+
script = {
|
|
30
|
+
"hook": f"{audience}注意:{topic},90% 的人都做反了。",
|
|
31
|
+
"body": f"三步讲清:①{points[0]};②{points[1]};③真实案例。",
|
|
32
|
+
"cta": "评论区扣「方案」,免费领《获客清单》。",
|
|
33
|
+
"duration_sec": 45,
|
|
34
|
+
"shots": ["近景口播 3s", "痛点场景 10s", "操作演示 20s", "案例收尾 10s", "CTA 2s"],
|
|
35
|
+
}
|
|
36
|
+
ai_note = ""
|
|
37
|
+
if llm is not None and getattr(llm, "provider", "mock") != "mock":
|
|
38
|
+
try:
|
|
39
|
+
ai_note = llm.complete(
|
|
40
|
+
f"选题 {topic}、卖点 {points},重写黄金 3 秒钩子,不超过 40 字。",
|
|
41
|
+
system="你是短视频编导。")
|
|
42
|
+
except Exception:
|
|
43
|
+
ai_note = ""
|
|
44
|
+
return {"script": script, "ai_note": ai_note}
|
|
45
|
+
|
|
46
|
+
# ------------------------- 极简 LLM 客户端(可选) -------------------------
|
|
47
|
+
class _MiniLLM:
|
|
48
|
+
provider = "doubao"
|
|
49
|
+
def __init__(self):
|
|
50
|
+
import os
|
|
51
|
+
self.key = os.environ.get("LLM_API_KEY", "")
|
|
52
|
+
self.model = os.environ.get("LLM_MODEL", "")
|
|
53
|
+
self.base = os.environ.get("LLM_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3").rstrip("/")
|
|
54
|
+
if not self.key or not self.model:
|
|
55
|
+
raise RuntimeError("缺少 LLM_API_KEY / LLM_MODEL 环境变量")
|
|
56
|
+
def complete(self, prompt, system=""):
|
|
57
|
+
msgs = []
|
|
58
|
+
if system:
|
|
59
|
+
msgs.append({"role": "system", "content": system})
|
|
60
|
+
msgs.append({"role": "user", "content": prompt})
|
|
61
|
+
payload = {"model": self.model, "messages": msgs, "temperature": 0.7, "max_tokens": 1024}
|
|
62
|
+
req = urllib.request.Request(
|
|
63
|
+
self.base + "/chat/completions",
|
|
64
|
+
data=json.dumps(payload).encode("utf-8"),
|
|
65
|
+
headers={"Content-Type": "application/json", "Authorization": "Bearer " + self.key},
|
|
66
|
+
method="POST")
|
|
67
|
+
try:
|
|
68
|
+
with urllib.request.urlopen(req, timeout=60) as resp:
|
|
69
|
+
body = json.loads(resp.read().decode("utf-8"))
|
|
70
|
+
except urllib.error.HTTPError as e:
|
|
71
|
+
raise RuntimeError("LLM 调用失败 HTTP %s: %s" % (e.code, e.read().decode("utf-8", errors="ignore")[:200]))
|
|
72
|
+
return body["choices"][0]["message"]["content"].strip()
|
|
73
|
+
|
|
74
|
+
def _load_input(args):
|
|
75
|
+
if args.input:
|
|
76
|
+
return json.loads(args.input)
|
|
77
|
+
if not sys.stdin.isatty():
|
|
78
|
+
raw = sys.stdin.read()
|
|
79
|
+
if raw.strip():
|
|
80
|
+
return json.loads(raw)
|
|
81
|
+
return {}
|
|
82
|
+
|
|
83
|
+
def main():
|
|
84
|
+
ap = argparse.ArgumentParser(description="老板短视频获客脚本官(12)")
|
|
85
|
+
ap.add_argument("--input", help="JSON 输入,如 '{\"topic\": \"AI获客\"}';或经 stdin 传入")
|
|
86
|
+
ap.add_argument("--llm", action="store_true", help="启用真实大模型(需 LLM_API_KEY/LLM_MODEL 环境变量)")
|
|
87
|
+
args = ap.parse_args()
|
|
88
|
+
data = _load_input(args)
|
|
89
|
+
llm = None
|
|
90
|
+
if args.llm:
|
|
91
|
+
try:
|
|
92
|
+
llm = _MiniLLM()
|
|
93
|
+
except Exception as e:
|
|
94
|
+
print(json.dumps({"ok": False, "error": "LLM 初始化失败: " + str(e)}, ensure_ascii=False))
|
|
95
|
+
sys.exit(1)
|
|
96
|
+
try:
|
|
97
|
+
out = run_logic_12(data, llm)
|
|
98
|
+
except Exception as e:
|
|
99
|
+
print(json.dumps({"ok": False, "error": str(e)}, ensure_ascii=False))
|
|
100
|
+
sys.exit(1)
|
|
101
|
+
print(json.dumps({"ok": True, "output": out}, ensure_ascii=False))
|
|
102
|
+
|
|
103
|
+
if __name__ == "__main__":
|
|
104
|
+
main()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 13_博主账号深度拆解官
|
|
3
|
+
description: 拆解对标账号的定位、选题、结构与转化路径。属于L2层,优先级P2。触发场景:用户需要博主账号深度拆解官、或涉及account相关任务时调用。输出:report。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 13_博主账号深度拆解官(13)
|
|
7
|
+
|
|
8
|
+
拆解对标账号的定位、选题、结构与转化路径
|
|
9
|
+
|
|
10
|
+
- **所属层级**:L2(优先级 P2)
|
|
11
|
+
|
|
12
|
+
## 使用方式
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 方式一:命令行参数
|
|
16
|
+
python3 run.py --input '{"account": "示例输入"}'
|
|
17
|
+
|
|
18
|
+
# 方式二:标准输入
|
|
19
|
+
echo '{"account": "示例输入"}' | python3 run.py
|
|
20
|
+
|
|
21
|
+
# 接入真实大模型(可选)
|
|
22
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx python3 run.py --llm --input '{"account": "示例输入"}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 输入字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 说明 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| account | 对标账号 |
|
|
30
|
+
|
|
31
|
+
## 输出字段
|
|
32
|
+
|
|
33
|
+
- **report**:拆解报告
|
|
34
|
+
|
|
35
|
+
## 安装为 Skill
|
|
36
|
+
|
|
37
|
+
将本目录(含 SKILL.md 与 run.py)复制到目标 Skill 根目录即可被智能体发现调用。
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""博主账号深度拆解官(13)独立运行器。
|
|
4
|
+
|
|
5
|
+
由 feihongzhi_agents 导出:自包含、仅标准库,可被其他智能体直接调用或安装为 Skill。
|
|
6
|
+
用法:
|
|
7
|
+
python3 run.py --input '{"field": "value"}'
|
|
8
|
+
echo '{"field": "value"}' | python3 run.py
|
|
9
|
+
可选接入真实大模型(设置环境变量后加 --llm):
|
|
10
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
|
|
11
|
+
python3 run.py --llm --input '...'
|
|
12
|
+
"""
|
|
13
|
+
import argparse
|
|
14
|
+
import json
|
|
15
|
+
import sys
|
|
16
|
+
import time
|
|
17
|
+
import urllib.request
|
|
18
|
+
import urllib.error
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
|
|
21
|
+
# ------------------------- 内嵌核心逻辑(自动生成) -------------------------
|
|
22
|
+
def _ts() -> str:
|
|
23
|
+
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def run_logic_13(data, llm=None):
|
|
27
|
+
"""博主账号拆解:拆解对标账号的定位、选题、结构、转化路径。"""
|
|
28
|
+
account = data.get("account", "对标账号A")
|
|
29
|
+
report = {
|
|
30
|
+
"account": account,
|
|
31
|
+
"positioning": "工厂老板 IP,讲透 AI 获客",
|
|
32
|
+
"topics": ["获客方法", "行业案例", "工具测评"],
|
|
33
|
+
"structure": "三段式:痛点 → 方法 → 案例",
|
|
34
|
+
"conversion": "评论区引流 → 私域 → 成交",
|
|
35
|
+
"takedown_at": _ts(),
|
|
36
|
+
}
|
|
37
|
+
ai_note = ""
|
|
38
|
+
if llm is not None and getattr(llm, "provider", "mock") != "mock":
|
|
39
|
+
try:
|
|
40
|
+
ai_note = llm.complete(
|
|
41
|
+
f"拆解账号 {account},给出 1 条可立即复用的打法,不超过 60 字。",
|
|
42
|
+
system="你是账号增长拆解专家。")
|
|
43
|
+
except Exception:
|
|
44
|
+
ai_note = ""
|
|
45
|
+
return {"report": report, "ai_note": ai_note}
|
|
46
|
+
|
|
47
|
+
# ------------------------- 极简 LLM 客户端(可选) -------------------------
|
|
48
|
+
class _MiniLLM:
|
|
49
|
+
provider = "doubao"
|
|
50
|
+
def __init__(self):
|
|
51
|
+
import os
|
|
52
|
+
self.key = os.environ.get("LLM_API_KEY", "")
|
|
53
|
+
self.model = os.environ.get("LLM_MODEL", "")
|
|
54
|
+
self.base = os.environ.get("LLM_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3").rstrip("/")
|
|
55
|
+
if not self.key or not self.model:
|
|
56
|
+
raise RuntimeError("缺少 LLM_API_KEY / LLM_MODEL 环境变量")
|
|
57
|
+
def complete(self, prompt, system=""):
|
|
58
|
+
msgs = []
|
|
59
|
+
if system:
|
|
60
|
+
msgs.append({"role": "system", "content": system})
|
|
61
|
+
msgs.append({"role": "user", "content": prompt})
|
|
62
|
+
payload = {"model": self.model, "messages": msgs, "temperature": 0.7, "max_tokens": 1024}
|
|
63
|
+
req = urllib.request.Request(
|
|
64
|
+
self.base + "/chat/completions",
|
|
65
|
+
data=json.dumps(payload).encode("utf-8"),
|
|
66
|
+
headers={"Content-Type": "application/json", "Authorization": "Bearer " + self.key},
|
|
67
|
+
method="POST")
|
|
68
|
+
try:
|
|
69
|
+
with urllib.request.urlopen(req, timeout=60) as resp:
|
|
70
|
+
body = json.loads(resp.read().decode("utf-8"))
|
|
71
|
+
except urllib.error.HTTPError as e:
|
|
72
|
+
raise RuntimeError("LLM 调用失败 HTTP %s: %s" % (e.code, e.read().decode("utf-8", errors="ignore")[:200]))
|
|
73
|
+
return body["choices"][0]["message"]["content"].strip()
|
|
74
|
+
|
|
75
|
+
def _load_input(args):
|
|
76
|
+
if args.input:
|
|
77
|
+
return json.loads(args.input)
|
|
78
|
+
if not sys.stdin.isatty():
|
|
79
|
+
raw = sys.stdin.read()
|
|
80
|
+
if raw.strip():
|
|
81
|
+
return json.loads(raw)
|
|
82
|
+
return {}
|
|
83
|
+
|
|
84
|
+
def main():
|
|
85
|
+
ap = argparse.ArgumentParser(description="博主账号深度拆解官(13)")
|
|
86
|
+
ap.add_argument("--input", help="JSON 输入,如 '{\"topic\": \"AI获客\"}';或经 stdin 传入")
|
|
87
|
+
ap.add_argument("--llm", action="store_true", help="启用真实大模型(需 LLM_API_KEY/LLM_MODEL 环境变量)")
|
|
88
|
+
args = ap.parse_args()
|
|
89
|
+
data = _load_input(args)
|
|
90
|
+
llm = None
|
|
91
|
+
if args.llm:
|
|
92
|
+
try:
|
|
93
|
+
llm = _MiniLLM()
|
|
94
|
+
except Exception as e:
|
|
95
|
+
print(json.dumps({"ok": False, "error": "LLM 初始化失败: " + str(e)}, ensure_ascii=False))
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
try:
|
|
98
|
+
out = run_logic_13(data, llm)
|
|
99
|
+
except Exception as e:
|
|
100
|
+
print(json.dumps({"ok": False, "error": str(e)}, ensure_ascii=False))
|
|
101
|
+
sys.exit(1)
|
|
102
|
+
print(json.dumps({"ok": True, "output": out}, ensure_ascii=False))
|
|
103
|
+
|
|
104
|
+
if __name__ == "__main__":
|
|
105
|
+
main()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 14_AI短视频自动剪辑师
|
|
3
|
+
description: 素材自动剪辑成片、批量出片。属于L2层,优先级P1。触发场景:用户需要AI短视频自动剪辑师、或涉及clips、script、template相关任务时调用。输出:video。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 14_AI短视频自动剪辑师(14)
|
|
7
|
+
|
|
8
|
+
素材自动剪辑成片、批量出片
|
|
9
|
+
|
|
10
|
+
- **所属层级**:L2(优先级 P1)
|
|
11
|
+
|
|
12
|
+
## 使用方式
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 方式一:命令行参数
|
|
16
|
+
python3 run.py --input '{"clips": "["示例A","示例B"]"}'
|
|
17
|
+
|
|
18
|
+
# 方式二:标准输入
|
|
19
|
+
echo '{"clips": "["示例A","示例B"]"}' | python3 run.py
|
|
20
|
+
|
|
21
|
+
# 接入真实大模型(可选)
|
|
22
|
+
LLM_API_KEY=xxx LLM_MODEL=xxx python3 run.py --llm --input '{"clips": "["示例A","示例B"]"}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 输入字段
|
|
26
|
+
|
|
27
|
+
| 字段 | 说明 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| clips | 素材列表 |
|
|
30
|
+
| script | 脚本 |
|
|
31
|
+
| template | 模板 |
|
|
32
|
+
|
|
33
|
+
## 输出字段
|
|
34
|
+
|
|
35
|
+
- **video**:成片元数据
|
|
36
|
+
|
|
37
|
+
## 安装为 Skill
|
|
38
|
+
|
|
39
|
+
将本目录(含 SKILL.md 与 run.py)复制到目标 Skill 根目录即可被智能体发现调用。
|