feat: 新增方案 C 的 Handoff 路由宿主,并让抽城市支持自然语言。
把图 JSON 编译成 CreateHandoffBuilderWith + WithHandoff;Agent 固定 Id 以免交接工具名错位;DeepSeek 关闭 thinking,避免多轮丢掉 reasoning_content 导致 400。
This commit is contained in:
@@ -3,7 +3,8 @@
|
||||
MAF1 是一个基于 **.NET 10** 和 **Microsoft Agents AI** 的多智能体演示仓库。同一条「读文件抽城市 → 查天气」链路拆成两个可执行项目:
|
||||
|
||||
1. **MAF1**:命令行工作流。用 Microsoft Agents AI Workflows 对比「条件写在节点里」和「条件写在边上」。
|
||||
2. **MAF1.Web**:可视化编排器。浏览器里拖节点、连线、配条件,然后一键运行。
|
||||
2. **MAF1.Route**:命令行路由。方案 C 的图编译成 `AgentWorkflowBuilder.CreateHandoffBuilderWith` + `WithHandoff`;专家仍是 Core 里的 Agent。
|
||||
3. **MAF1.Web**:可视化编排器。浏览器里拖节点、连线、配条件,然后一键运行。
|
||||
|
||||
内置 Agent 在 `MAF1.Core` 里;网页还可以把同一套能力以 **独立进程插件** 的形式画到画布上。LLM 的 endpoint / API Key / 模型由各宿主注入,**不会**画成节点端口,也不会写进流程图 JSON。
|
||||
|
||||
@@ -29,13 +30,13 @@ MAF1 是一个基于 **.NET 10** 和 **Microsoft Agents AI** 的多智能体演
|
||||
| 部分 | 说明 |
|
||||
|------|------|
|
||||
| 运行时 | .NET 10(`net10.0`) |
|
||||
| 控制台 | `MAF1`:普通控制台,Microsoft Agents AI Workflows |
|
||||
| 控制台 | `MAF1`:工作流;`MAF1.Route`:方案 C 路由 |
|
||||
| 网页 | `MAF1.Web`:ASP.NET Core Minimal API + `wwwroot` |
|
||||
| LLM | `Azure.AI.OpenAI` + `Microsoft.Agents.AI.OpenAI`(兼容 OpenAI / Azure OpenAI / DeepSeek 等) |
|
||||
| 前端 | `MAF1.Web/wwwroot` 下原生 HTML / CSS / JS,无 npm 依赖 |
|
||||
| 插件 | 独立控制台进程,协议见 `MAF1.Core/PluginContract`,由网页宿主扫描 |
|
||||
|
||||
解决方案文件:`MAF1.slnx`(`MAF1`、`MAF1.Web`、`MAF1.Core`、两个插件工程)。
|
||||
解决方案文件:`MAF1.slnx`(`MAF1`、`MAF1.Route`、`MAF1.Web`、`MAF1.Core`、两个插件工程)。
|
||||
|
||||
---
|
||||
|
||||
@@ -59,6 +60,10 @@ MAF1 是一个基于 **.NET 10** 和 **Microsoft Agents AI** 的多智能体演
|
||||
│ ├── wwwroot/ # 可视化界面
|
||||
│ ├── Data/
|
||||
│ └── appsettings.json
|
||||
├── MAF1.Route/ # 控制台路由(方案 C)
|
||||
│ ├── Graphs/ # 白名单图 JSON(有边 / 无边)
|
||||
│ ├── Data/
|
||||
│ └── appsettings.json
|
||||
├── MAF1.Core/ # 共享:Agent、Tool、LLM、插件协议
|
||||
└── plugins/
|
||||
├── file-city/
|
||||
@@ -167,6 +172,23 @@ dotnet run --project MAF1 -- edge Data/not-cities.txt
|
||||
|
||||
输入 `1` 或回车结束;输入 `2` 后再填城市名继续查天气;也可以直接输入 `成都`。等待秒数与网页相同,来自 `Workflow:DecisionTimeoutSeconds`。
|
||||
|
||||
### 5. 命令行路由(方案 C)
|
||||
|
||||
`MAF1.Route` 用 Microsoft Agents AI 的 **`WithHandoff`** 跑方案 C:图 JSON 是专家白名单,边是允许交接。主管是入口 Agent,框架给每条边注入 `handoff_to_*` 工具,控制权随对话转交。
|
||||
|
||||
- **节点** = 白名单。图上没有的类型不能调。
|
||||
- **有边** = 只能沿边 `WithHandoff`(`Graphs/city-weather.json`:必须先抽城市再查天气)。
|
||||
- **无边** = 主管可交接给名单内任一专家(`Graphs/nodes-only.json`:可以直接查「成都」天气)。
|
||||
|
||||
抽不到城市时,抽城市专家**不交接**,本轮结束(Handoff 不像工作流 CLI 那样弹确认框)。
|
||||
|
||||
```bash
|
||||
dotnet run --project MAF1.Route
|
||||
dotnet run --project MAF1.Route -- Graphs/city-weather.json
|
||||
dotnet run --project MAF1.Route -- Graphs/city-weather.json Data/not-cities.txt
|
||||
dotnet run --project MAF1.Route -- Graphs/nodes-only.json 请查询成都的天气
|
||||
```
|
||||
|
||||
启动配置:
|
||||
|
||||
| 项目 | Profile | 作用 |
|
||||
@@ -174,12 +196,14 @@ dotnet run --project MAF1 -- edge Data/not-cities.txt
|
||||
| `MAF1.Web` | `designer` | 网页编排器 |
|
||||
| `MAF1` | `node` | CLI,节点内判断 |
|
||||
| `MAF1` | `edge` | CLI,边上判断 |
|
||||
| `MAF1.Route` | `route` | CLI 路由,有边白名单 |
|
||||
| `MAF1.Route` | `nodes-only` | CLI 路由,无边自选顺序 |
|
||||
|
||||
---
|
||||
|
||||
## 配置说明
|
||||
|
||||
`MAF1/appsettings.json` 与 `MAF1.Web/appsettings.json` 会分别复制到各自输出目录。网页项目额外包含 `Plugins` / `Credentials`。主要段落:
|
||||
`MAF1/appsettings.json`、`MAF1.Route/appsettings.json` 与 `MAF1.Web/appsettings.json` 会分别复制到各自输出目录。网页项目额外包含 `Plugins` / `Credentials`。主要段落:
|
||||
|
||||
### Llm
|
||||
|
||||
@@ -413,7 +437,9 @@ AgentRuntime
|
||||
|
||||
`MAF1` → `CliHost` → `CityWeatherWorkflow`(node / edge)→ `WorkflowOrchestration`。缺城市时走 `RequestPort`,与网页同一套默认方案 + 超时。
|
||||
|
||||
`MAF1.Core` 被控制台、网页与插件共用,避免两套 Agent 逻辑分叉。
|
||||
`MAF1.Route` → `HandoffGraphBuilder`(`CreateHandoffBuilderWith` + `WithHandoff`)→ Core 里的 FileCity / Weather。图 JSON 决定白名单和允许交接;**原来的 workflow CLI 仍在 MAF1 里。**
|
||||
|
||||
`MAF1.Core` 被控制台、路由、网页与插件共用,避免两套 Agent 逻辑分叉。
|
||||
|
||||
---
|
||||
|
||||
@@ -454,7 +480,7 @@ AgentRuntime
|
||||
当前 URL 写死为 `127.0.0.1:5288`。关掉占用进程,或临时改 `MAF1.Web/Program.cs` / `MAF1.Web/Properties/launchSettings.json`。
|
||||
|
||||
**没有自动化测试 / Docker**
|
||||
仓库目前没有测试项目和容器文件。验证方式:UI 示例图 + CLI `node` / `edge`。
|
||||
仓库目前没有测试项目和容器文件。验证方式:UI 示例图 + CLI `node` / `edge` + `MAF1.Route`。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user