用C#实现AIAgent——LuBan Agent
想象一下:你只需说一句"帮我查一下D盘下面有哪些目录",AI 就能自动调用文件系统工具,列出所有目录。再说一句"帮我打开百度并搜索 LuBan Framework",AI 就会自动启动浏览器,完成搜索。
这不是科幻,这就是 LuBan Agent。
- 😫 想让 LLM 调用工具完成任务,但 MCP / Function Calling 的实现细节令人头疼?
- 😤 Skill 管理、工具注册、会话持久化各自需要单独实现,维护成本高?
- 😖 模型 Provider 切换困难——从 Provider A 换到 Provider B 需要重写大量代码?
- 😩 缺少中间件机制——日志、策略控制、权限拦截难以扩展?
LuBan Agent 为你提供完整的 AI Agent 基础设施,从 Agent 运行时、多模型路由、技能系统、工具系统、会话存储到中间件管道——开箱即用。
- 11 种 AI Provider 支持:OpenAI、Azure、DeepSeek、Kimi、GLM、通义千问、豆包、Claude、Gemini、Ollama,以及自定义 OpenAI 兼容 API
- 统一
provider:model格式:一键切换模型,无需修改代码 - 动态路由:LuBanChatClient 根据前缀自动分发到对应 Provider
| 工具组 | 能力 |
|---|---|
| 🌐 浏览器工具 | 导航、点击、输入、截图、获取内容(基于 Playwright) |
| 📁 文件系统工具 | 读取、写入、列出目录,支持安全路径限制 |
| 🔧 脚本执行工具 | 执行 Shell、Lua、Python 脚本 |
| 🗄️ 数据库工具 | 通过 sqlcmd 执行 SQL 语句 |
| 🔴 Redis 工具 | 通过 redis-cli 执行 Redis 命令 |
| 🌍 Web 工具 | 发送 HTTP 请求获取网页内容 |
| 🔍 语义检索工具 | 索引本地代码/文档,按语义搜索相关片段 |
内置三大核心技能,即插即用:
- 头脑风暴:实现功能前探索需求和设计
- 代码审查:审查代码、发现问题、提供改进建议
- 文档生成:生成代码注释、README、API 文档
支持自定义 Skill,轻松扩展你的专属能力。
- 路径访问规则:限制文件系统访问范围,防止越权操作
- 危险操作确认:写入、删除、执行脚本前自动要求用户确认
- 自定义规则:支持通配符匹配,灵活控制工具行为
- 对话历史自动保存到 SQLite 数据库
- 支持长对话压缩(SummarizingChatReducer),上下文永不丢失
- 会话统计、Token 计数一目了然
- 内置文件系统 MCP 客户端
- 支持外部 MCP 服务器热加载
- 标准 JSON-RPC 协议,无缝对接生态
# 安装与 Microsoft.Playwright 1.61.0 匹配的浏览器版本
npx playwright@1.61.0 install chromium
注意:浏览器版本必须与 Microsoft.Playwright 包版本匹配,当前项目使用的是 1.61.0。
# 克隆仓库
git clone https://github.com/yswenli/luban-framework.git
cd luban-framework/luban-agent
# 运行程序
dotnet run
> /provider -add
选择 Provider 类型:
1. OpenAI
2. Azure OpenAI
3. DeepSeek
4. Kimi (Moonshot)
5. 智谱 GLM
6. 通义千问
7. 豆包
8. Claude
9. Google Gemini
10. Ollama (本地)
11. 自定义 OpenAI 兼容 API
请选择 (1-11): 1
请输入 OpenAI API Key: ********
✓ Provider 'OpenAI' 已添加并保存
支持的模型: gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-4o...
安全提示:API Key 输入时会隐藏显示(密码输入模式)
> /model -switch
已配置的 Provider:
1. OpenAI
请选择 Provider 编号: 1
OpenAI 支持的模型:
1. gpt-4.1
2. gpt-4.1-mini
3. gpt-4.1-nano
4. gpt-4o
...
请选择模型编号: 4
✓ 已选择模型: openai:gpt-4o
> /agi
你: 帮我查一下D盘下面有哪些目录
⠋ 正在调用工具: ListDirectoryAsync
⠙ 正在思考...
⠹ 正在生成回答...
[调用工具]: list_directory
参数 path: D:\
[工具结果]: Program Files, Users, Windows, ...
🤖 D盘下有以下目录:
1. Program Files
2. Users
3. Windows
...
实时状态显示:在执行 AI 对话时,会显示动态旋转动画和实时状态:
- 正在思考...
- 正在调用工具: {工具名}
- 工具执行完成,正在生成回答...
- 生成回答完成
LuBan Agent 提供了简洁而强大的命令系统:
- Tab 自动完成 - 输入部分命令后按 Tab 自动补全
- 上/下箭头 - 浏览历史命令
- Esc 键 - 清除当前输入
- 命令前缀 - 所有命令以
/开头 - 数字快捷键 - 支持数字 1-10 快速选择命令
| 命令 | 简写 | 数字键 | 说明 |
|---|---|---|---|
/provider |
/p |
1 |
管理 AI Provider (-list/-add/-update/-delete/-switch) |
/model |
/m |
2 |
管理模型 (-list/-add/-update/-delete/-switch) |
/skill |
/sk |
3 |
查看和执行 Skill (-list/-add/-update/-delete/-switch) |
/rule |
/r |
4 |
查看和管理规则 (-list/-add/-update/-delete/-switch) |
/mcp |
/mp |
5 |
查看 MCP 客户端 (-list/-add/-update/-delete/-switch/-connect/-tools) |
/session |
/se |
6 |
管理对话会话 (-list/-new/-clear/-switch) |
/agi |
/a |
7 |
通用 Agent 对话 |
/browse |
/b |
8 |
针对网站操作特异化 Agent |
/stats |
/st |
9 |
会话与 Token 统计 (-days N) |
/exit |
- | 10 |
退出程序 |
| 简写 | 完整命令 | 适用场景 |
|---|---|---|
-l |
-list |
所有管理命令 |
-a |
-add |
所有管理命令 |
-u |
-update |
Provider/Model/Skill/Rule/MCP |
-d |
-delete |
Provider/Model/Skill/Rule/MCP |
-d |
-days |
Stats(统计天数) |
-s |
-switch |
所有管理命令 |
-n |
-new |
Session |
-c |
-clear |
Session |
-c |
-connect |
MCP |
-t |
-tools |
MCP |
示例:
/p -l=/provider -list/st -d 7=/stats -days 7/mp -c filesystem=/mcp -connect filesystem
你: 帮我列出 src 目录下所有 .cs 文件并统计代码行数
[调用工具]: list_directory
参数 path: src
[调用工具]: read_file
参数 path: src\Program.cs
...
🤖 src 目录下共有 15 个 .cs 文件,总计 3,456 行代码:
- Program.cs: 112 行
- Services\ConsoleAppService.cs: 344 行
...
你: 帮我打开百度并搜索 "LuBan Framework"
[调用工具]: NavigateAsync
参数 url: https://www.baidu.com
[调用工具]: TypeTextAsync
参数 selector: #kw, text: LuBan Framework
[调用工具]: ClickAsync
参数 selector: #su
🤖 已完成搜索,当前页面标题: LuBan Framework_百度搜索
> /skill code-review
请输入内容: public void Test() { var x = 1/0; }
执行 Skill: 代码审查
📋 代码分析:
发现潜在问题:
1. ⚠️ 第 1 行存在除以零的错误
2. 💡 建议添加异常处理机制
改进建议:
...
你: 帮我查询用户表中最近的10条记录
[调用工具]: run_sql
参数 sql: SELECT * FROM users ORDER BY created_at DESC LIMIT 10
[工具结果]: ...
🤖 查询结果如下:
...
LubanAgent/
├── Commands/ # 命令实现
│ ├── ProviderCommand.cs # Provider 管理
│ ├── ModelCommand.cs # 模型管理
│ ├── SkillCommand.cs # Skill 管理
│ ├── RuleCommand.cs # 规则管理
│ ├── MCPCommand.cs # MCP 客户端管理
│ ├── SessionCommand.cs # 会话管理
│ ├── AgiCommand.cs # 通用 Agent 对话
│ ├── BrowseCommand.cs # 浏览器 Agent
│ └── StatsCommand.cs # 统计信息
├── Services/ # 核心服务
│ ├── ConsoleAppService.cs # 命令分发与交互
│ └── SessionManager.cs # 会话持久化
├── Repositories/ # 数据访问层
│ ├── SessionRepository.cs # 会话存储
│ └── RagRepository.cs # RAG 数据存储
├── Retrieval/ # 语义检索
│ ├── ModelManager.cs # 嵌入模型管理
│ ├── OnnxEmbeddingGenerator.cs # ONNX 嵌入生成器
│ └── SqliteVectorStore.cs # SQLite 向量存储
├── Infrastructure/ # 基础设施
│ └── DatabaseInitializer.cs # 数据库初始化
├── Entities/ # 数据实体
├── Model/ # AI 模型文件
└── Program.cs # 程序入口
{
"LuBanAgent": {
"DefaultModel": "openai:gpt-4o",
"SystemPrompt": "你是一个智能助手。",
"MaxToolLoopIterations": 10,
"Session": {
"CompactTargetMessages": 50,
"CompactThreshold": 10
},
"Tools": {
"Browser": {
"Enabled": true,
"Headless": false,
"Timeout": 30000
},
"FileSystem": {
"Enabled": true,
"AllowedRoots": ["C:\\Work"]
},
"Script": {
"Enabled": true,
"Shell": "cmd",
"DefaultTimeout": 30000
},
"Database": {
"Enabled": true,
"ConnectionString": "Server=..."
},
"Redis": {
"Enabled": true
},
"Web": {
"Enabled": true
},
"Retrieval": {
"Enabled": true,
"ModelId": "bge-small-zh-v1.5",
"AutoDownload": true,
"MaxFileSizeKB": 5120,
"DefaultTopK": 5
}
}
}
}
用户配置(Provider、自定义 Skill、规则等)自动保存在本地,重启后自动加载。
对于危险操作(写入文件、执行脚本、删除数据等),系统会在执行前请求用户确认:
你: 帮我写一个文件到 C:\temp\test.txt
⚠️ 危险操作请求: WriteFileAsync
参数:
path: C:\temp\test.txt
content: 文件内容...
是否执行此操作?(y/N): y
✓ 已确认执行
[调用工具]: WriteFileAsync
[工具结果]: 已写入文件 C:\temp\test.txt
🤖 已成功写入文件...
需要确认的操作包括:
- 📝 文件系统: 写入文件、删除文件、创建/删除目录
- 🔧 脚本执行: 执行 Shell、Lua、Python 脚本
- 🗄️ 数据库: INSERT、UPDATE、DELETE 操作
- 🔴 Redis: SET、DELETE、FLUSHDB 操作
# 创建新会话
> /session -new 项目讨论
# 列出所有会话
> /session -list
# 切换会话
> /session -switch 项目讨论
# 清除所有会话(需确认)
> /session -clear
# 查看统计
> /stats -days 7
会话自动保存:
- 在
/agi对话中,对话历史自动保存到 SQLite 数据库 - 数据库位置:
%LocalAppData%\LuBan\AIAgent\ai_sessions.db - 用户消息和 AI 回复都会自动保存
- Token 数量自动统计
# 添加自定义 Skill
> /skill -add
请输入 Skill ID: my-translator
请输入 Skill 名称: 翻译助手
请输入 Skill 描述: 将文本翻译成英文
请输入分类: custom
请输入提示词模板(多行输入,单独一行 '.' 结束):
请将以下内容翻译成英文:
{input}
.
请输入示例(可选,逗号分隔): 你好,世界
✓ 自定义 Skill '翻译助手' (my-translator) 已添加
# 添加路径保护规则
> /rule -add
请输入规则 ID: protect-system
请输入规则名称: 保护系统目录
请输入 ActionTypePattern (默认 *): file-write
请输入 TargetPattern (默认 *): C:\Windows\*
请输入 Action (allow/deny): deny
请输入优先级 (默认 100): 100
✓ 自定义规则 '保护系统目录' (protect-system) 已添加
# 添加外部 MCP 服务器
> /mcp -add
请输入服务器名称: github
请输入描述: GitHub 集成
请输入启动命令 (如 npx): npx
请输入命令参数 (空格分隔,可选): -y @modelcontextprotocol/server-github
✓ 外部 MCP 服务器 'github' 已添加
使用 /mcp connect github 连接
# 连接 MCP 服务器
> /mcp -connect github
正在连接 github...
✓ 连接成功
# 查看可用工具
> /mcp -tools github
github 可用的工具:
- create_issue: 创建 GitHub Issue
- search_repositories: 搜索仓库
...
| 组件 | 说明 |
|---|---|
| Microsoft.Agents.AI.Foundry | Agent 运行时框架 |
| Microsoft.Extensions.AI | 统一聊天客户端抽象 |
| Microsoft.Playwright | 浏览器自动化引擎 |
| LuBan.DI | 依赖注入集成 |
| LuBan.Common | 基础接口与工具定义 |
| Microsoft.ML.OnnxRuntime | ONNX 模型推理(语义检索) |
| SQLite | 会话与向量数据存储 |
- 💬 模型路由使用
provider:model格式,新增 Provider 只需通过/provider -add添加 - 🛠️ 7 大内置工具组覆盖浏览器自动化、文件操作、脚本执行、数据库、Redis、Web 请求、语义检索
- ⚠️ ToolConfirmationService 对写入、删除、执行等危险操作自动要求用户确认
- 🔒 FileSystemToolOptions.AllowedRoots 限制文件访问范围,防止 Agent 越权操作
- 💾 会话历史自动持久化,支持长对话压缩(SummarizingChatReducer),上下文永不丢失
- 🎨 自定义 Skill/Rule/MCP 持久化,配置保存到本地文件,重启后自动加载
- 🛡️ 规则拦截在工具执行前自动检查,支持 deny/allow/modify
- 🔌 MCP 工具集成,外部 MCP 服务器工具自动暴露给 Agent
- 📦 通过
ExternalPlugins配置可热加载外部工具插件程序集 - 🔗 结合 LuBan.AIFlow 可对接 RagFlow / Dify / Coze 等 AI 平台
- LuBan.Framework - LuBan 框架核心
- LuBan.DI - 依赖注入容器
- LuBan.AIFlow - AI 工作流引擎
- LuBan.Web.Core - Web 核心组件
MIT License
yswenli
- 📧 Email: yswenli@outlook.com
- 🐙 GitHub: @yswenli
⭐ 如果这个项目对你有帮助,请给它一个 Star!⭐
Made with ❤️ by yswenli

浙公网安备 33010602011771号