开源 Agent 框架选型:带管理配置端与标准化 Skill 支持
本文筛选了三款完全匹配的开源 Agent 框架,均为代码级可扩展、自带 Skill 管理后台、支持 SKILL.md/MCP 标准。以下是核心特性、二次开发要点和部署步骤。
一、首选:LangGraph + LangServe(LangChain 官方生态)
核心定位
LangChain 官方推出的「Agent 编排 + 服务化」框架,自带可二次开发的 Skill/Tool 管理后台(LangServe Dashboard),纯代码开发、无低代码封装,是 Python 生态的最佳选择。
关键特性
- Skill 管理能力:
- 原生支持
StructuredTool(对应SKILL.md标准),可通过代码/API 注册、禁用、版本管理; - 内置 MCP 协议适配,可直接加载
SKILL.md + scripts格式的 Skill;
- 原生支持
- 管理配置端:
- 自带 LangServe Dashboard(Web 管理后台),支持 Skill 列表、调用日志、参数配置;
- 后台基于 FastAPI + React 开发,前端/后端均可完全二次开发;
- 二次开发友好:
- 纯 Python 代码编写 Agent 逻辑,无低代码拖拽;
- 模块化设计(Skill 加载器、Agent 执行器、权限控制可拆分扩展);
- 支持自定义 Skill 元数据、调度规则、沙箱运行环境。
部署 & 二次开发步骤
1. 基础部署
# 安装核心依赖
pip install langgraph langserve langchain-openai fastapi uvicorn
# 启动带 Dashboard 的 LangServe 服务
langserve start --host 0.0.0.0 --port 8000 --dashboard
访问 http://localhost:8000/docs(API 管理)、http://localhost:8000/dashboard(可视化管理后台)。
2. 二次开发 Skill 管理模块
from fastapi import FastAPI, APIRouter, Depends
from langserve import add_routes
from langgraph.graph import StateGraph, END
from langchain_core.tools import StructuredTool
from pydantic import BaseModel
import yaml
from pathlib import Path
# 1. 自定义 Skill 加载器(解析 SKILL.md)
def () -> StructuredTool:
skill_path = Path(skill_dir)
(skill_path / , , encoding=) f:
yaml_head = f.read().split()[].strip()
skill_meta = yaml.safe_load(yaml_head)
():
subprocess
cmd = [, (skill_path / skill_meta[][])]
k, v kwargs.items():
cmd += [, (v)]
result = subprocess.run(cmd, capture_output=, text=)
result.stdout.strip()
param_fields = {p[]: ((p[]), ...) p skill_meta[]}
ParamModel = BaseModel(**param_fields)
StructuredTool.from_function(
func=skill_executor,
name=skill_meta[],
description=skill_meta[],
args_schema=ParamModel
)
app = FastAPI(title=)
skill_router = APIRouter(prefix=)
registered_skills = {}
():
skill = load_skill_from_dir(skill_dir)
registered_skills[skill.name] = skill
add_routes(app, skill, path=)
{: , : }
():
{: , : [{: k, : v.description} k, v registered_skills.items()]}
app.include_router(skill_router)
__name__ == :
uvicorn
uvicorn.run(app, host=, port=)

