3 Commits
v2.0 ... v4.0

Author SHA1 Message Date
f6e8d40459 feat: v4.0 Command Handoff - Agent间可互相交接任务
核心改动:
- 每个 Agent 成为独立图节点(weather/math/knowledge/mcp/general)
- Agent 间通过 Command(goto=目标节点) 实现任务交接
- Supervisor 返回普通dict,由 conditional_edges 路由
- 并行模式使用独立 parallel_worker 节点(SubTaskState),避免并发冲突
- 新增 handoff_from/handoff_context/handoff_history 状态字段
- handoff 判断:Agent先回答,再由LLM判断是否需要交接给其他Agent
- 保留 Send API 并行 + Aggregator 聚合能力

测试通过:单Agent、直接回复、多Agent并行、Handoff链路追踪
2026-04-24 10:38:33 +08:00
2c55213d39 feat: v3.0 多Agent交互 - Supervisor + Worker + Aggregator
架构级重构:
- Supervisor节点:分析任务、分解子任务、智能调度Agent
- Worker节点:各专业Agent(subgraph)独立执行子任务
- Aggregator节点:并行结果自动聚合
- Send API并行:多Agent同时处理不同子任务
- Agent注册表:AgentRegistry管理5个Agent
  - weather_agent: 天气专家
  - math_agent: 数学专家
  - knowledge_agent: 知识专家
  - mcp_agent: MCP工具调用
  - general_agent: 通用助手(兜底)
- 共享State:messages/subtasks/results/final_answer
- Supervisor输出JSON格式任务计划(parallel/single/direct)
2026-04-24 00:50:26 +08:00
28da16829f feat: 支持 OpenClaw skill 格式 (SKILL.md + scripts/)
- scan_skills() 支持两种格式: .yaml 文件 和 目录/SKILL.md
- 解析 SKILL.md 的 YAML frontmatter 提取 name/description
- 自动扫描 scripts/ 子目录的 .py 脚本
- skill_exec 支持 asyncio 子进程执行脚本
- 新增示例 OpenClaw 技能: skills/time-tool/
2026-04-23 23:53:45 +08:00
5 changed files with 834 additions and 332 deletions

View File

@@ -1,8 +1,31 @@
# 黄庄三号四能力 Agent
基于 LangGraph 的多能力 AI Agent集成 FC / MCP / 思考模式 / Skill 四种核心能力。
基于 LangGraph 的多能力 AI Agent集成 FC / MCP / 思考模式 / Skill 四种核心能力**v3.0 支持多Agent交互**
**v2.0 配置驱动版** — 新增工具/技能/MCP服务器无需改源码丢文件或改配置即可。
## 核心架构Supervisor + Worker + Aggregator
```
用户输入 → Supervisor(分析/分解/调度)
┌──────────┼──────────┬──────────┐
▼ ▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│天气 │ │数学 │ │知识 │ │MCP │ ← 各Worker Agent
│专家 │ │专家 │ │专家 │ │Agent │
└──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘
│ │ │ │
└─────────┴─────────┴─────────┘
Aggregator(聚合)
最终回复
```
**关键能力:**
- **并行执行**多个Agent同时处理不同子任务Send API
- **串行执行**单Agent直接处理简单任务
- **结果聚合**多Agent结果自动合并为连贯回复
- **智能调度**Supervisor自动分析任务、选择Agent
## 四项能力
@@ -69,6 +92,10 @@ TOOLS = [get_stock_price] # 必须!供自动扫描
## 新增技能
支持两种格式:
### 格式1: .yaml 文件(简洁定义)
`skills/` 目录下创建 .yaml 文件:
```yaml
@@ -82,11 +109,41 @@ tools:
- get_stock_price
```
然后在 `config.yaml``skill_keywords` 中添加路由关键词:
### 格式2: OpenClaw 格式(目录 + SKILL.md + scripts/
`skills/` 目录下创建目录,放入 `SKILL.md``scripts/`
```
skills/
└── my-skill/
├── SKILL.md ← OpenClaw 标准格式
└── scripts/
└── do_something.py
```
SKILL.md 格式:
```markdown
---
name: my-skill
description: "我的自定义技能"
---
# 我的自定义技能
技能的详细说明和使用方法...
```
Agent 会自动扫描 SKILL.md 的 frontmatter 和 scripts/ 目录,执行脚本并将输出传给 LLM。
### 路由关键词
无论哪种格式,都需要在 `config.yaml``skill_keywords` 中添加路由:
```yaml
skill_keywords:
stock_analyst: ["股价", "股票", "行情"]
my-skill: ["关键词1", "关键词2"]
```
## 新增 MCP 服务器

1049
agent.py

File diff suppressed because it is too large Load Diff

View File

@@ -33,3 +33,4 @@ skill_keywords:
weather_analyst: ["天气", "出行", "穿什么"]
math_tutor: ["计算", "算", "数学", "等于多少"]
knowledge_explorer: ["是什么", "解释", "了解"]
time-tool: ["时间工具", "日期", "星期几"]

19
skills/time-tool/SKILL.md Normal file
View File

@@ -0,0 +1,19 @@
---
name: time-tool
description: "时间工具 - 获取当前时间和日期信息"
---
# 时间工具
获取当前时间、日期信息,以及进行简单的日期计算。
## 使用方法
```bash
python3 scripts/time_info.py [时区]
```
## 功能
- 获取当前时间(支持指定时区)
- 获取当前日期和星期
- 输出格式化的时间信息

View File

@@ -0,0 +1,34 @@
#!/usr/bin/env python3
"""时间信息脚本 - OpenClaw skill 示例"""
import sys
from datetime import datetime
try:
import pytz
HAS_PYTZ = True
except ImportError:
HAS_PYTZ = False
def main():
tz_name = sys.argv[1] if len(sys.argv) > 1 else "Asia/Shanghai"
if HAS_PYTZ:
try:
tz = pytz.timezone(tz_name)
now = datetime.now(tz)
except Exception:
now = datetime.now()
tz_name = "本地时间"
else:
now = datetime.now()
tz_name = "本地时间"
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
print(f"时区: {tz_name}")
print(f"日期: {now.strftime('%Y年%m月%d')}")
print(f"星期: {weekdays[now.weekday()]}")
print(f"时间: {now.strftime('%H:%M:%S')}")
if __name__ == "__main__":
main()