「带可二次开发的管理配置端 + 非低代码 + 原生支持标准化 Skill」的开源 Agent 框架,筛选 3款完全匹配的框架(均为代码级可扩展、自带 Skill 管理后台、支持 SKILL.md/MCP 标准),附核心特性、二次开发要点和部署步骤,都是企业级/开发者友好的选型:
一、首选:LangGraph + LangServe(LangChain 官方生态,Python 栈,极致可扩展)
核心定位
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 管理模块
# 示例:扩展 Skill 管理 API(可直接集成到自有后台)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)defload_skill_from_dir(skill_dir:str)-> StructuredTool: skill_path = Path(skill_dir)# 解析 SKILL.md 的 YAML 头(skill_path /,, encoding=)as f: yaml_head = f.().()[].() skill_meta = yaml.(yaml_head)# 构建执行函数(调用 scripts 脚本)(**kwargs):import subprocess cmd =[,(skill_path / skill_meta[][])]for k, v in kwargs.(): cmd +=[f,(v)] result = subprocess.(cmd, capture_output=True, text=True)return result.stdout.()# 构建 StructuredTool param_fields ={:((p[]),...)for p in skill_meta[]} ParamModel = (**param_fields)return StructuredTool( func=skill_executor, name=skill_meta["name"], description=skill_meta["description"], args_schema=ParamModel )# . 扩展 Skill 管理 API(注册/删除/列表) app = (title="Agent Skill 管理平台") skill_router = (prefix="/admin/skills") registered_skills ={}_router.post()defregister_skill(skill_:str): skill = load_skill_from_dir(skill_dir) registered_skills[skill.name]= skill # 添加到 LangServe 路由 add_routes(app, skill, path=f)return{"":,:f}_router.get()deflist_skills():return{"":,:[{"name": k,: v.description}for k, v in registered_skills()]} app(skill_router)# . 启动服务(集成自定义管理 API)if __name__ =="__main__":import uvicorn uvicorn.(app, host=, port=)

