HKUDS系列文章:
- HKUDS(港大实验室)介绍(一):LightRAG、AutoAgent、AI-Researcher、MiniRAG、Auto-Deep-Research
- HKUDS开源项目(二):DeepTutor、Paper2Slides、ViMax、FastCode
- HKUDS开源NanoBot
- HKUDS开源RAGAnything
- CLI复兴:CLI-Anything
- HKUDS开源项目(三):Vibe-Trading、AI-Trader
- HKUDS开源项目(四):OpenSpace、AgentSpace
OpenSpace
一个AI Agent自进化引擎,其核心使命是让AI Agent从"单次执行"变为"持续学习"。解决当前Agent的三大痛点:Token浪费、重复失败、技能退化。一个Agent学习,所有Agent升级。
三大核心痛点
- Token浪费:每次任务从头推理,无法复用成功模式
- 重复失败:无法分享解决方案,重复犯错
- 技能退化:工具API变化导致技能失效,无自修复机制
三大核心能力
| 能力 | 描述 | 效果 |
|---|---|---|
| Self-Evolution | 技能自动修复、改进、学习 | 失败→改进,成功→优化 |
| Collective Intelligence | 一个Agent学习→所有Agent升级 | 网络效应 |
| Token Efficiency | 复用成功方案,减少推理开销 | 46%Token节省,4.2×收入提升 |
原理
系统架构
#mermaid-svg-puIEMG5uVxTL0Wez{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-puIEMG5uVxTL0Wez .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-puIEMG5uVxTL0Wez .error-icon{fill:#552222;}#mermaid-svg-puIEMG5uVxTL0Wez .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-puIEMG5uVxTL0Wez .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-puIEMG5uVxTL0Wez .marker{fill:#333333;stroke:#333333;}#mermaid-svg-puIEMG5uVxTL0Wez .marker.cross{stroke:#333333;}#mermaid-svg-puIEMG5uVxTL0Wez svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-puIEMG5uVxTL0Wez p{margin:0;}#mermaid-svg-puIEMG5uVxTL0Wez .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-puIEMG5uVxTL0Wez .cluster-label text{fill:#333;}#mermaid-svg-puIEMG5uVxTL0Wez .cluster-label span{color:#333;}#mermaid-svg-puIEMG5uVxTL0Wez .cluster-label span p{background-color:transparent;}#mermaid-svg-puIEMG5uVxTL0Wez .label text,#mermaid-svg-puIEMG5uVxTL0Wez span{fill:#333;color:#333;}#mermaid-svg-puIEMG5uVxTL0Wez .node rect,#mermaid-svg-puIEMG5uVxTL0Wez .node circle,#mermaid-svg-puIEMG5uVxTL0Wez .node ellipse,#mermaid-svg-puIEMG5uVxTL0Wez .node polygon,#mermaid-svg-puIEMG5uVxTL0Wez .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-puIEMG5uVxTL0Wez .rough-node .label text,#mermaid-svg-puIEMG5uVxTL0Wez .node .label text,#mermaid-svg-puIEMG5uVxTL0Wez .image-shape .label,#mermaid-svg-puIEMG5uVxTL0Wez .icon-shape .label{text-anchor:middle;}#mermaid-svg-puIEMG5uVxTL0Wez .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-puIEMG5uVxTL0Wez .rough-node .label,#mermaid-svg-puIEMG5uVxTL0Wez .node .label,#mermaid-svg-puIEMG5uVxTL0Wez .image-shape .label,#mermaid-svg-puIEMG5uVxTL0Wez .icon-shape .label{text-align:center;}#mermaid-svg-puIEMG5uVxTL0Wez .node.clickable{cursor:pointer;}#mermaid-svg-puIEMG5uVxTL0Wez .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-puIEMG5uVxTL0Wez .arrowheadPath{fill:#333333;}#mermaid-svg-puIEMG5uVxTL0Wez .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-puIEMG5uVxTL0Wez .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-puIEMG5uVxTL0Wez .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-puIEMG5uVxTL0Wez .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-puIEMG5uVxTL0Wez .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-puIEMG5uVxTL0Wez .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-puIEMG5uVxTL0Wez .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-puIEMG5uVxTL0Wez .cluster text{fill:#333;}#mermaid-svg-puIEMG5uVxTL0Wez .cluster span{color:#333;}#mermaid-svg-puIEMG5uVxTL0Wez div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-puIEMG5uVxTL0Wez .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-puIEMG5uVxTL0Wez rect.text{fill:none;stroke-width:0;}#mermaid-svg-puIEMG5uVxTL0Wez .icon-shape,#mermaid-svg-puIEMG5uVxTL0Wez .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-puIEMG5uVxTL0Wez .icon-shape p,#mermaid-svg-puIEMG5uVxTL0Wez .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-puIEMG5uVxTL0Wez .icon-shape .label rect,#mermaid-svg-puIEMG5uVxTL0Wez .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-puIEMG5uVxTL0Wez .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-puIEMG5uVxTL0Wez .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-puIEMG5uVxTL0Wez :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-puIEMG5uVxTL0Wez .title>*{fill:none!important;stroke:none!important;font-size:18px!important;font-weight:bold!important;}#mermaid-svg-puIEMG5uVxTL0Wez .title span{fill:none!important;stroke:none!important;font-size:18px!important;font-weight:bold!important;}#mermaid-svg-puIEMG5uVxTL0Wez .container>*{fill:#f8f9fa!important;stroke:#495057!important;stroke-width:2px!important;rx:8px!important;}#mermaid-svg-puIEMG5uVxTL0Wez .container span{fill:#f8f9fa!important;stroke:#495057!important;stroke-width:2px!important;rx:8px!important;}#mermaid-svg-puIEMG5uVxTL0Wez .node>*{fill:#ffffff!important;stroke:#6c757d!important;stroke-width:1px!important;rx:4px!important;}#mermaid-svg-puIEMG5uVxTL0Wez .node span{fill:#ffffff!important;stroke:#6c757d!important;stroke-width:1px!important;rx:4px!important;}#mermaid-svg-puIEMG5uVxTL0Wez .inner>*{fill:#e9ecef!important;stroke:#adb5bd!important;stroke-width:1px!important;rx:4px!important;}#mermaid-svg-puIEMG5uVxTL0Wez .inner span{fill:#e9ecef!important;stroke:#adb5bd!important;stroke-width:1px!important;rx:4px!important;} 外部系统
Tools
APIs
Data Sources
Model Services
MCP Servers
Grounding Client
Backends: Shell │ GUI │ MCP │ Web │ System
Quality: Tool Tracking │ Self-Evolution │ Anomaly Detection
Security: Policies │ Sandboxing │ E2B
Skill Engine
(Registry
Analyzer
Evolver
Store)
Grounding Agent
(Execution)
Cloud Community
(Registry)
OpenSpace (tool_layer.py)
Configuration
LLM Client
Recording
Execution Count
MCP Server
(4 Tools)
CLI / API
(Interactive Mode)
Dashboard
(React UI)
层级解读
| 层级 | 模块 | 职责 |
|---|---|---|
| 接入层 | MCP Server、CLI、Dashboard | 提供多渠道访问 |
| 编排层 | Open Space(tool_layer.py) |
统一配置、LLM客户端、执行管理 |
| 智能层 | Skill Engine、Grounding Agent | 技能发现、选择、进化、执行 |
| 后端层 | Grounding Client | 多后端统一接口 |
| 外部层 | Tools、APIs、MCP Servers | 外部能力接入 |
Skill Engine的技能生命周期管理
#mermaid-svg-hPCtFRAafIwXtBXL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hPCtFRAafIwXtBXL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hPCtFRAafIwXtBXL .error-icon{fill:#552222;}#mermaid-svg-hPCtFRAafIwXtBXL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hPCtFRAafIwXtBXL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hPCtFRAafIwXtBXL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hPCtFRAafIwXtBXL .marker.cross{stroke:#333333;}#mermaid-svg-hPCtFRAafIwXtBXL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hPCtFRAafIwXtBXL p{margin:0;}#mermaid-svg-hPCtFRAafIwXtBXL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hPCtFRAafIwXtBXL .cluster-label text{fill:#333;}#mermaid-svg-hPCtFRAafIwXtBXL .cluster-label span{color:#333;}#mermaid-svg-hPCtFRAafIwXtBXL .cluster-label span p{background-color:transparent;}#mermaid-svg-hPCtFRAafIwXtBXL .label text,#mermaid-svg-hPCtFRAafIwXtBXL span{fill:#333;color:#333;}#mermaid-svg-hPCtFRAafIwXtBXL .node rect,#mermaid-svg-hPCtFRAafIwXtBXL .node circle,#mermaid-svg-hPCtFRAafIwXtBXL .node ellipse,#mermaid-svg-hPCtFRAafIwXtBXL .node polygon,#mermaid-svg-hPCtFRAafIwXtBXL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hPCtFRAafIwXtBXL .rough-node .label text,#mermaid-svg-hPCtFRAafIwXtBXL .node .label text,#mermaid-svg-hPCtFRAafIwXtBXL .image-shape .label,#mermaid-svg-hPCtFRAafIwXtBXL .icon-shape .label{text-anchor:middle;}#mermaid-svg-hPCtFRAafIwXtBXL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hPCtFRAafIwXtBXL .rough-node .label,#mermaid-svg-hPCtFRAafIwXtBXL .node .label,#mermaid-svg-hPCtFRAafIwXtBXL .image-shape .label,#mermaid-svg-hPCtFRAafIwXtBXL .icon-shape .label{text-align:center;}#mermaid-svg-hPCtFRAafIwXtBXL .node.clickable{cursor:pointer;}#mermaid-svg-hPCtFRAafIwXtBXL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hPCtFRAafIwXtBXL .arrowheadPath{fill:#333333;}#mermaid-svg-hPCtFRAafIwXtBXL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hPCtFRAafIwXtBXL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hPCtFRAafIwXtBXL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hPCtFRAafIwXtBXL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hPCtFRAafIwXtBXL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hPCtFRAafIwXtBXL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hPCtFRAafIwXtBXL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hPCtFRAafIwXtBXL .cluster text{fill:#333;}#mermaid-svg-hPCtFRAafIwXtBXL .cluster span{color:#333;}#mermaid-svg-hPCtFRAafIwXtBXL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hPCtFRAafIwXtBXL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hPCtFRAafIwXtBXL rect.text{fill:none;stroke-width:0;}#mermaid-svg-hPCtFRAafIwXtBXL .icon-shape,#mermaid-svg-hPCtFRAafIwXtBXL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hPCtFRAafIwXtBXL .icon-shape p,#mermaid-svg-hPCtFRAafIwXtBXL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hPCtFRAafIwXtBXL .icon-shape .label rect,#mermaid-svg-hPCtFRAafIwXtBXL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hPCtFRAafIwXtBXL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hPCtFRAafIwXtBXL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hPCtFRAafIwXtBXL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-hPCtFRAafIwXtBXL .subNode>*{fill:#f8f9fa!important;stroke:#6c757d!important;stroke-width:1px!important;color:#000!important;}#mermaid-svg-hPCtFRAafIwXtBXL .subNode span{fill:#f8f9fa!important;stroke:#6c757d!important;stroke-width:1px!important;color:#000!important;}#mermaid-svg-hPCtFRAafIwXtBXL .subNode tspan{fill:#000!important;}#mermaid-svg-hPCtFRAafIwXtBXL .storeNode>*{fill:#e3f2fd!important;stroke:#1976d2!important;stroke-width:2px!important;color:#000!important;}#mermaid-svg-hPCtFRAafIwXtBXL .storeNode span{fill:#e3f2fd!important;stroke:#1976d2!important;stroke-width:2px!important;color:#000!important;}#mermaid-svg-hPCtFRAafIwXtBXL .storeNode tspan{fill:#000!important;} DISCOVER
ScanDirs
ParseFM
GenID
MATCH
BM25+Emb
LLM Filter
Ranker
APPLY
Inject
Execute
Record
MONITOR
Track
Metrics
Quality
ANALYZE
PostExec
ToolDeg
MetricMon
EVOLVE
FIX
DERIVED
CAPTURED
STORE
SQLite
Version
Lineage
三种进化模式
| 模式 | 描述 | 触发条件 | 输出 |
|---|---|---|---|
| FIX | 修复破损技能 | 工具成功率下降、错误率上升 | 同技能新版本 |
| DERIVED | 创建增强版本 | 高应用率、中等有效率 | 新技能目录 |
| CAPTURED | 捕获新模式 | 成功执行无匹配技能 | 全新技能 |
三种触发源
- Post-Execution Analysis,每次任务执行后→ExecutionAnalyzer分析→生成EvolutionSuggestion
- Tool Degradation,ToolQualityManager检测工具成功率下降→批量进化依赖技能
- Metric Monitor,定期扫描技能健康指标(应用率、完成率、回退率)→进化低效技能
技能选择流程(Hybrid Ranking)
#mermaid-svg-rW3YX3Kic0yDthB4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rW3YX3Kic0yDthB4 .error-icon{fill:#552222;}#mermaid-svg-rW3YX3Kic0yDthB4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rW3YX3Kic0yDthB4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rW3YX3Kic0yDthB4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rW3YX3Kic0yDthB4 .marker.cross{stroke:#333333;}#mermaid-svg-rW3YX3Kic0yDthB4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rW3YX3Kic0yDthB4 p{margin:0;}#mermaid-svg-rW3YX3Kic0yDthB4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 .cluster-label text{fill:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 .cluster-label span{color:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 .cluster-label span p{background-color:transparent;}#mermaid-svg-rW3YX3Kic0yDthB4 .label text,#mermaid-svg-rW3YX3Kic0yDthB4 span{fill:#333;color:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 .node rect,#mermaid-svg-rW3YX3Kic0yDthB4 .node circle,#mermaid-svg-rW3YX3Kic0yDthB4 .node ellipse,#mermaid-svg-rW3YX3Kic0yDthB4 .node polygon,#mermaid-svg-rW3YX3Kic0yDthB4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rW3YX3Kic0yDthB4 .rough-node .label text,#mermaid-svg-rW3YX3Kic0yDthB4 .node .label text,#mermaid-svg-rW3YX3Kic0yDthB4 .image-shape .label,#mermaid-svg-rW3YX3Kic0yDthB4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-rW3YX3Kic0yDthB4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rW3YX3Kic0yDthB4 .rough-node .label,#mermaid-svg-rW3YX3Kic0yDthB4 .node .label,#mermaid-svg-rW3YX3Kic0yDthB4 .image-shape .label,#mermaid-svg-rW3YX3Kic0yDthB4 .icon-shape .label{text-align:center;}#mermaid-svg-rW3YX3Kic0yDthB4 .node.clickable{cursor:pointer;}#mermaid-svg-rW3YX3Kic0yDthB4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rW3YX3Kic0yDthB4 .arrowheadPath{fill:#333333;}#mermaid-svg-rW3YX3Kic0yDthB4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rW3YX3Kic0yDthB4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rW3YX3Kic0yDthB4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rW3YX3Kic0yDthB4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rW3YX3Kic0yDthB4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rW3YX3Kic0yDthB4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rW3YX3Kic0yDthB4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rW3YX3Kic0yDthB4 .cluster text{fill:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 .cluster span{color:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rW3YX3Kic0yDthB4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rW3YX3Kic0yDthB4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-rW3YX3Kic0yDthB4 .icon-shape,#mermaid-svg-rW3YX3Kic0yDthB4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rW3YX3Kic0yDthB4 .icon-shape p,#mermaid-svg-rW3YX3Kic0yDthB4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rW3YX3Kic0yDthB4 .icon-shape .label rect,#mermaid-svg-rW3YX3Kic0yDthB4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rW3YX3Kic0yDthB4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rW3YX3Kic0yDthB4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rW3YX3Kic0yDthB4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-rW3YX3Kic0yDthB4 .nodeStyle>*{fill:#ffffff!important;stroke:#6c757d!important;stroke-width:1px!important;rx:4px!important;}#mermaid-svg-rW3YX3Kic0yDthB4 .nodeStyle span{fill:#ffffff!important;stroke:#6c757d!important;stroke-width:1px!important;rx:4px!important;} 用户任务
BM25 Prefilter
(Threshold)
关键词匹配,筛选候选集
Embedding Similarity
← 语义相似度排序
LLM Filter
(Selection)
最终选择(理解任务需求)
Context Injection
构建注入内容
Agent系统提示词
Grounding Agent执行流程
#mermaid-svg-bX3PQH6bCqxS0Q9j{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bX3PQH6bCqxS0Q9j .error-icon{fill:#552222;}#mermaid-svg-bX3PQH6bCqxS0Q9j .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bX3PQH6bCqxS0Q9j .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .marker.cross{stroke:#333333;}#mermaid-svg-bX3PQH6bCqxS0Q9j svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bX3PQH6bCqxS0Q9j p{margin:0;}#mermaid-svg-bX3PQH6bCqxS0Q9j .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .cluster-label text{fill:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .cluster-label span{color:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .cluster-label span p{background-color:transparent;}#mermaid-svg-bX3PQH6bCqxS0Q9j .label text,#mermaid-svg-bX3PQH6bCqxS0Q9j span{fill:#333;color:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .node rect,#mermaid-svg-bX3PQH6bCqxS0Q9j .node circle,#mermaid-svg-bX3PQH6bCqxS0Q9j .node ellipse,#mermaid-svg-bX3PQH6bCqxS0Q9j .node polygon,#mermaid-svg-bX3PQH6bCqxS0Q9j .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .rough-node .label text,#mermaid-svg-bX3PQH6bCqxS0Q9j .node .label text,#mermaid-svg-bX3PQH6bCqxS0Q9j .image-shape .label,#mermaid-svg-bX3PQH6bCqxS0Q9j .icon-shape .label{text-anchor:middle;}#mermaid-svg-bX3PQH6bCqxS0Q9j .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .rough-node .label,#mermaid-svg-bX3PQH6bCqxS0Q9j .node .label,#mermaid-svg-bX3PQH6bCqxS0Q9j .image-shape .label,#mermaid-svg-bX3PQH6bCqxS0Q9j .icon-shape .label{text-align:center;}#mermaid-svg-bX3PQH6bCqxS0Q9j .node.clickable{cursor:pointer;}#mermaid-svg-bX3PQH6bCqxS0Q9j .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .arrowheadPath{fill:#333333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bX3PQH6bCqxS0Q9j .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bX3PQH6bCqxS0Q9j .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bX3PQH6bCqxS0Q9j .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bX3PQH6bCqxS0Q9j .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .cluster text{fill:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j .cluster span{color:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bX3PQH6bCqxS0Q9j .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bX3PQH6bCqxS0Q9j rect.text{fill:none;stroke-width:0;}#mermaid-svg-bX3PQH6bCqxS0Q9j .icon-shape,#mermaid-svg-bX3PQH6bCqxS0Q9j .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bX3PQH6bCqxS0Q9j .icon-shape p,#mermaid-svg-bX3PQH6bCqxS0Q9j .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bX3PQH6bCqxS0Q9j .icon-shape .label rect,#mermaid-svg-bX3PQH6bCqxS0Q9j .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bX3PQH6bCqxS0Q9j .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bX3PQH6bCqxS0Q9j .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bX3PQH6bCqxS0Q9j :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-bX3PQH6bCqxS0Q9j .nodeStyle>*{fill:#ffffff!important;stroke:#333!important;stroke-width:1px!important;rx:4px!important;}#mermaid-svg-bX3PQH6bCqxS0Q9j .nodeStyle span{fill:#ffffff!important;stroke:#333!important;stroke-width:1px!important;rx:4px!important;}#mermaid-svg-bX3PQH6bCqxS0Q9j .loopBox>*{fill:#f8f9fa!important;stroke:#adb5bd!important;stroke-width:2px!important;rx:8px!important;}#mermaid-svg-bX3PQH6bCqxS0Q9j .loopBox span{fill:#f8f9fa!important;stroke:#adb5bd!important;stroke-width:2px!important;rx:8px!important;}#mermaid-svg-bX3PQH6bCqxS0Q9j .innerRow>*{fill:none!important;stroke:none!important;}#mermaid-svg-bX3PQH6bCqxS0Q9j .innerRow span{fill:none!important;stroke:none!important;} Iteration Loop
Loop until complete
LLM Call
Parse Response
Execute Tools
Observe Result
Max Iterations: 20
Visual Analysis: 截图分析
Tool Retrieval: 动态工具搜索
Instruction + Skill Context
System Prompt Construction
← 角色 + 技能 + 工具描述
Post-Execution Processing
← Recording保存 + Analyzer分析
设计模式
- Strategy Pattern(技能选择策略)
py
class SkillRanker:
def rank(candidates, query, method="hybrid"):
if method == "bm25":
return bm25_rank(candidates, query)
elif method == "embedding":
return embedding_rank(candidates, query)
elif method == "hybrid":
# BM25预筛选 + Embedding排序 + LLM最终选择
prefiltered = bm25_prefilter(candidates, query)
scored = embedding_score(prefiltered, query)
return llm_filter(scored[:10], query)
- Observer Pattern(质量监控)
py
class ToolQualityManager:
def observe(tool_call, result):
# 记录成功率、延迟、错误模式
self._track(tool_call.tool_name, result.success)
# 检测退化 → 触发进化
if self._detect_degradation(tool_call.tool_name):
self._trigger_evolution(tool_call.tool_name)
- Pipeline Pattern(进化流程)
py
class SkillEvolver:
async def evolve(context):
# 1. LLM生成进化方案(Agent Loop探索代码库)
suggestion = await self._agent_loop(context)
# 2. 应用Patch(Diff-based)
result = await self._apply_patch(suggestion)
# 3. 验证(安全检查)
if not self._validate(result):
result = await self._retry(suggestion)
# 4. 存储版本
self._store(result)
算法
关键算法详解
- 技能ID持久化
py
def _read_or_create_skill_id(name, skill_dir):
"""技能ID持久化:首次生成,后续读取
格式:
- Imported: {name}__imp_{uuid8}
- Evolved: {name}__v{gen}_{uuid8}
"""
id_file = skill_dir / ".skill_id"
if id_file.exists():
return id_file.read_text().strip()
# 首次生成
new_id = f"{name}__imp_{uuid.uuid4().hex[:8]}"
id_file.write_text(new_id + "\n")
return new_id
- 上下文注入
py
def build_context_injection(skills):
"""构建技能注入内容
格式:
## Active Skills
- {skill_name}: {description}
{skill_content}
"""
sections = ["## Active Skills\n"]
for skill in skills:
sections.append(f"- {skill.name}: {skill.description}\n")
sections.append(f"\n{skill.content}\n")
return "\n".join(sections)
其他
配置层级:
- 默认配置(
openspace/config/*.yaml) - 用户配置(
--config-path) - 环境变量(
OPENSPACE_*) - 运行时参数(API调用)
优先级:运行时 > 环境变量 > 用户配置 > 默认配置
| 配置项 | 描述 | 默认值 |
|---|---|---|
llm_model |
主LLM模型 | openrouter、anthropic、claude-sonnet-4.5 |
grounding_max_iterations |
最大迭代轮次 | 20 |
evolution_max_concurrent |
并行进化数 | 3 |
backend_scope |
后端范围 | shell、gui、mcp、web、system |
MCP Server提供的工具集
| 工具 | 描述 | 参数 |
|---|---|---|
execute_task |
执行任务(含技能匹配) | query, model, skill_dirs |
fix_skill |
修复技能 | skill_id, issue_description |
upload_skill |
上传技能到云端 | skill_dir |
download_skill |
从云端下载技能 | skill_id |
三种启动模式
| 模式 | 启动方式 | 适用场景 |
|---|---|---|
| stdio | openspace-mcp |
本地Agent集成 |
| SSE | openspace-mcp --transport sse |
远程HTTP连接 |
| streamable HTTP | openspace-mcp --transport streamable-http |
流式HTTP |
适用场景分析
最佳适用场景
| 场景 | 描述 | 效果 |
|---|---|---|
| 专业任务执行 | 50+ GDPVal任务(文档、合规、工程) | 4.2×收入提升 |
| 长期运行Agent | 需要持续学习改进的系统 | Token节省46% |
| 多Agent协作 | 共享技能进化成果 | 网络效应 |
| 工具密集型任务 | 频繁调用外部API/工具 | 自动修复 |
不适用场景
- 一次性简单任务:技能进化价值有限
- 无工具调用的纯推理:无法积累执行经验
- 高度定制化任务:技能复用率低
实战
以官网为例,有V1、V2之别

AgentSpace
官网,港大开源(GitHub,929 Star,126 Fork)人类与Agent的协助工作区:把数字员工身份、任务、调度、知识、权限、审批、运行环境和审计记录放进同一个组织系统。通俗讲,就是为人类和Agent搭建一间共享的数字办公室。
核心能力:
- 共享:每个Agent都可拥有明确的角色、负责人、技能、知识和运行环境;团队成员可分配、借用或转移Agent,管理者则能查看它归谁负责、能访问什么、当前是否可用。这样,优秀的Agent就不再只是个人工具,而能在授权范围内成为团队共享资源
- 协作:面对复杂任务,协调Agent先拆解工作,再交给不同的专业Agent。如研究Agent收集资料,财务Agent核算预算,写作Agent整理报告;涉及敏感文件或高风险操作时,再交由人类审批。任务、附件、运行结果和审批记录都会留在工作区,方便后续检查与复盘
- 调度:核心组件AgentRouter负责连接Claude Code等不同运行环境,并统一处理它们的会话、输出和诊断信息。任务可选择更合适的执行工具,但Agent的身份、知识和权限不必每次重建
- 权限治理:文档访问、运行环境、工具调用和外部授权可受到限制,部分敏感操作能够进入人工审批。项目还提供任务看板、知识库、搜索、预算与成本统计、远程执行节点等功能,并支持托管或自行部署
原理
架构图
#mermaid-svg-nLaKxnAX05byIEFN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nLaKxnAX05byIEFN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nLaKxnAX05byIEFN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nLaKxnAX05byIEFN .error-icon{fill:#552222;}#mermaid-svg-nLaKxnAX05byIEFN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nLaKxnAX05byIEFN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nLaKxnAX05byIEFN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nLaKxnAX05byIEFN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nLaKxnAX05byIEFN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nLaKxnAX05byIEFN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nLaKxnAX05byIEFN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nLaKxnAX05byIEFN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nLaKxnAX05byIEFN .marker.cross{stroke:#333333;}#mermaid-svg-nLaKxnAX05byIEFN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nLaKxnAX05byIEFN p{margin:0;}#mermaid-svg-nLaKxnAX05byIEFN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nLaKxnAX05byIEFN .cluster-label text{fill:#333;}#mermaid-svg-nLaKxnAX05byIEFN .cluster-label span{color:#333;}#mermaid-svg-nLaKxnAX05byIEFN .cluster-label span p{background-color:transparent;}#mermaid-svg-nLaKxnAX05byIEFN .label text,#mermaid-svg-nLaKxnAX05byIEFN span{fill:#333;color:#333;}#mermaid-svg-nLaKxnAX05byIEFN .node rect,#mermaid-svg-nLaKxnAX05byIEFN .node circle,#mermaid-svg-nLaKxnAX05byIEFN .node ellipse,#mermaid-svg-nLaKxnAX05byIEFN .node polygon,#mermaid-svg-nLaKxnAX05byIEFN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nLaKxnAX05byIEFN .rough-node .label text,#mermaid-svg-nLaKxnAX05byIEFN .node .label text,#mermaid-svg-nLaKxnAX05byIEFN .image-shape .label,#mermaid-svg-nLaKxnAX05byIEFN .icon-shape .label{text-anchor:middle;}#mermaid-svg-nLaKxnAX05byIEFN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nLaKxnAX05byIEFN .rough-node .label,#mermaid-svg-nLaKxnAX05byIEFN .node .label,#mermaid-svg-nLaKxnAX05byIEFN .image-shape .label,#mermaid-svg-nLaKxnAX05byIEFN .icon-shape .label{text-align:center;}#mermaid-svg-nLaKxnAX05byIEFN .node.clickable{cursor:pointer;}#mermaid-svg-nLaKxnAX05byIEFN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nLaKxnAX05byIEFN .arrowheadPath{fill:#333333;}#mermaid-svg-nLaKxnAX05byIEFN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nLaKxnAX05byIEFN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nLaKxnAX05byIEFN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nLaKxnAX05byIEFN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nLaKxnAX05byIEFN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nLaKxnAX05byIEFN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nLaKxnAX05byIEFN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nLaKxnAX05byIEFN .cluster text{fill:#333;}#mermaid-svg-nLaKxnAX05byIEFN .cluster span{color:#333;}#mermaid-svg-nLaKxnAX05byIEFN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nLaKxnAX05byIEFN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nLaKxnAX05byIEFN rect.text{fill:none;stroke-width:0;}#mermaid-svg-nLaKxnAX05byIEFN .icon-shape,#mermaid-svg-nLaKxnAX05byIEFN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nLaKxnAX05byIEFN .icon-shape p,#mermaid-svg-nLaKxnAX05byIEFN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nLaKxnAX05byIEFN .icon-shape .label rect,#mermaid-svg-nLaKxnAX05byIEFN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nLaKxnAX05byIEFN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nLaKxnAX05byIEFN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nLaKxnAX05byIEFN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Human members
Next.js workspace
agent-space CLI
@agent-space/services
@agent-space/db / PostgreSQL
@agent-space/domain
tasks / approvals / notifications
agent-space-daemon
provider-runtime
AgentRouter
legacy provider runtime
Claude Code
Codex CLI
Antigravity CLI
OpenCode
OpenClaw
Hermes Agent
Gemini CLI
NanoBot
runtime-output / diagnostics / sessions
documents / knowledge / attachments / Google Workspace
实战
对比
同样都是HKUDS开源项目,都是**Space,有什么区别吗?
OpenSpace和AgentSpace是两个定位完全不同、解决不同层面问题的独立项目。HKUDS开源它们,是为应对AI Agent从个人能力到团队协作演进过程中的两个核心挑战。
| 对比维度 | OpenSpace(自进化引擎) | AgentSpace(协同工作平台) |
|---|---|---|
| 核心定位 | AI Agent的经验管理系统,专注于让单个Agent通过实践自我进化,越用越聪明 | AI Agent的组织协作平台,专注于将多个Agent作为团队成员进行管理、分工与协作 |
| 解决的核心问题 | 失忆症与重复踩坑:Agent每次任务从零开始,不积累经验,浪费token且易重复犯错 | 协作与治理真空:现有Agent框架多是单人场景,缺乏多人协作、权限分配、审批流程和审计追溯的能力 |
| 核心工作方式 | 提炼技能:通过自进化引擎,自动从成功或失败的任务中捕获(CAPTURED)、修复(FIX)或衍生(DERIVED)出可复用的技能(Skill) | 建立组织架构:围绕角色、所有者、审批流和跨团队转移机制设计,本质上是在给企业内的数字员工建立一套HR系统 |
| 主要目标用户 | 使用Claude Code、Cursor、OpenClaw等AI编程工具的开发者,希望降低token成本、提升AI效率 | 需要多人、多部门协同使用AI Agent的团队或企业,对权限管理、任务审批和审计有明确需求 |
| 项目状态与热度 | 已发布、热度极高。2026年3月开源,短时间内获得数千Star,有详细的文档、基准测试和集成指南 | 早期概念阶段,26年6月22日第一次提交,尚在开发初期 |
对应AI Agent应用成熟度不同阶段的需求:
- OpenSpace:解决个体能力问题,在AI Agent被广泛使用的初期,首要任务是让单个Agent变得高效、省钱。OpenSpace帮助每个Agent积累经验,避免金鱼记忆
- AgentSpace:解决群体协作问题,当Agent开始进入企业工作流,就需要明确的组织纪律。AgentSpace负责管理多个数字员工的权限、职责和任务流转,确保它们有序协作,不出乱子