# agent.net **Repository Path**: 390620652/agent.net ## Basic Information - **Project Name**: agent.net - **Description**: 使用了maf的agent平台 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-19 - **Last Updated**: 2026-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AgentPlatform MVP 一个以最低基础设施成本实现的 .NET 10 全栈 AI Agent 单体应用。用户可以配置 OpenAI Responses 兼容模型、创建智能体,并在聊天中使用 Tool、Skill、MCP、知识库和附件。 ## 技术栈 - ASP.NET Core 10、Blazor Interactive Server、Fluent UI Blazor - ASP.NET Core Identity、EF Core、SQLite - Microsoft Agent Framework、Microsoft.Agents.AI.Mcp、Microsoft.Extensions.AI、OpenAI Responses - Microsoft.Extensions.DataIngestion、Microsoft.Extensions.VectorData、sqlite-vec - `BackgroundService` 持久执行 Agent Run 和知识库摄取 - ASP.NET Core Health Checks、结构化日志、运行事件 ## 已实现能力 - 用户注册、登录、角色和用户级数据隔离 - 模型接口配置,API Key 使用 Data Protection 加密保存 - Agent 创建、编辑、Tool 白名单、MCP 绑定和用户可编辑的目录式 Skill - Skill 可声明用户工作区文件与受限公网 Web 请求权限 - Skill 可声明隔离 Shell、进程启动和 .NET 程序集执行权限 - 高风险 Tool 在聊天中等待用户“允许一次”或“拒绝”,刷新和应用重启后仍可继续审批 - TXT、Markdown、文本型 PDF 知识库摄取与向量检索 - 聊天会话、附件、后台持续运行和运行记录 - 桌面端与移动端聊天布局 - `/health` 健康检查 ## MCP 用户可在 `/mcp` 管理自己的远程 MCP 服务器,并在 Agent 编辑页多选绑定。当前固定使用 `Microsoft.Agents.AI.Mcp 1.13.0-alpha.260703.1`,通过 `ListAgentToolsWithTaskSupportAsync()` 同时适配普通 Tool 与 MCP 长任务 Tool;该包仍为 alpha,升级前应重新验证 API 和协议兼容性。 首版只支持远程 HTTPS Streamable HTTP,不支持 Stdio。系统在实际 Socket 建连时校验 DNS 结果,拒绝 localhost、私网和保留地址,禁用代理与 HTTP 重定向;可选 Bearer Token 使用 Data Protection 按用户和 MCP 记录加密,并且只发送给配置的原始 HTTPS Origin。 所有 MCP Tool 默认包装为单次审批 Tool。模型发起调用后,用户必须在聊天页选择“允许一次”或“拒绝”;同名 MCP Tool,或 MCP 与本地 Tool 重名时,Run 会明确失败而不会猜测路由。每次 Run 独立创建 MCP Client,并在执行完成、失败或进入审批等待后释放连接。 ## 可观测性 应用默认创建 ASP.NET Core、出站 HTTP、.NET Runtime 和 Agent 的 traces/metrics。未配置 OTLP Endpoint 时不会注册导出器,并会在启动日志中明确提示。 推荐通过标准 OpenTelemetry 环境变量连接 OTLP Collector: ```powershell $env:OTEL_EXPORTER_OTLP_ENDPOINT = "http://localhost:4317" $env:OTEL_SERVICE_NAME = "AgentPlatform" dotnet run --project src/AgentPlatform.Web/AgentPlatform.Web.csproj --launch-profile http ``` Agent 遥测已显式关闭原始 prompt、回复内容、Tool 参数和 Tool 返回值采集。 ## 本地启动 需要 .NET 10 SDK。首次启动会自动创建 `Data/app.db`、执行迁移并创建 Data Protection 密钥。 ```powershell dotnet restore AgentPlatform.slnx dotnet run --project src/AgentPlatform.Web/AgentPlatform.Web.csproj --launch-profile http ``` 打开 `http://localhost:5028`,注册用户后在“模型配置”页面添加模型即可使用。 如需在开发环境预置管理员,可使用 User Secrets: ```powershell dotnet user-secrets set "Seed:Enabled" "true" --project src/AgentPlatform.Web/AgentPlatform.Web.csproj dotnet user-secrets set "Seed:AdminEmail" "admin@example.com" --project src/AgentPlatform.Web/AgentPlatform.Web.csproj dotnet user-secrets set "Seed:AdminPassword" "" --project src/AgentPlatform.Web/AgentPlatform.Web.csproj ``` 模型配置推荐在登录后的页面维护。用于开发验证的 `AIConfig.txt` 内容只应导入 User Secrets,不会由应用在运行时读取,也不会进入发布包。 ## 目录式 Skill 平台内置 Skill 位于 `src/AgentPlatform.Web/Skills/{skill-id}/`,用户 Skill 位于运行时 `Data/skills/{user-hash}/{skill-id}/`。每个目录包含: ```text skill.json SKILL.md ``` `skill.json` 保存名称、说明和权限: ```json { "id": "document-assistant", "name": "文档助手", "description": "整理用户工作区中的文档。", "allowWorkspaceFiles": true, "allowWebRequests": false, "allowShell": false, "allowProcessExecution": false, "allowAssemblyExecution": false } ``` 用户可以在 `/skills` 页面创建和修改自己的 Skill。Agent 选择 Skill 后,平台会读取 `SKILL.md`,并按 manifest 自动注入对应 Tool。工作区 Tool 只接受相对路径、拒绝 `..` 和符号链接;Web Tool 只允许 HTTP/HTTPS,并拒绝本机、私网和重定向。 Shell、进程和程序集 Tool 不在 ASP.NET Core 进程内执行,而是使用固定的 `mcr.microsoft.com/dotnet/sdk:10.0` Linux Docker 容器。容器以非 root 用户运行,根文件系统只读、默认无网络、丢弃全部 Linux capabilities,只挂载当前用户工作区,并限制为 1 CPU、256 MB 内存、64 个进程和 30 秒。模型调用这些 Tool 前必须在聊天页获得用户单次批准,待审批 Agent Session 和原始请求使用 Data Protection 按 Run 加密保存。容器不可用时 Tool 会返回明确错误,不会降级为宿主机执行。需要启用这些权限的部署必须预先安装并启动 Docker。 ## 验证 普通测试不调用真实模型: ```powershell dotnet build AgentPlatform.slnx --no-restore dotnet test AgentPlatform.slnx --no-build ``` 真实浏览器 E2E 需要先启动 Development 应用,再在另一个 `pwsh` 终端执行: ```powershell $env:RUN_REAL_E2E = "1" $env:E2E_BASE_URL = "http://localhost:5028" $env:E2E_ADMIN_PASSWORD = "" dotnet test tests/AgentPlatform.Tests/AgentPlatform.Tests.csproj --no-build --filter "Category=RealE2E" ``` 该流程覆盖登录、Agent、Tool、Skill、RAG、附件、运行事件、移动端布局和浏览器错误检查。 ## 发布 ```powershell dotnet publish src/AgentPlatform.Web/AgentPlatform.Web.csproj -c Release -o artifacts/publish ``` 运行时数据库、文件、向量库和 Data Protection 密钥位于 `Data/`,不进入发布包。部署时应将该目录挂载到持久存储并限制访问权限。 ## MVP 边界 当前采用单进程 Web + 进程内后台 Worker,适合单实例 MVP。多实例部署前需要把任务领取、文件存储和 Data Protection 密钥改为共享基础设施。高风险 Skill 和 MCP 只应授予可信用户;Docker 不是对抗内核漏洞的强隔离边界,面向不受信任的多租户环境应进一步采用 gVisor、Kata 或微型虚拟机。Copilot SDK 与 A2UI 暂不作为首版依赖。