# 市民请集合 Web Agent Runtime

测试阶段先用浏览器运行成熟 Agent 编排，正式上线时再把同一套 runtime 接回 Electron/EXE。

## 架构

- Web UI：负责聊天、表格渲染、工具轨迹展示。
- Python LangGraph Runtime：负责多步规划、工具调用循环、结果汇总。
- Java MCP：负责 DeepSeek、数据库只读查询、smqjh 业务工具、配置和安全边界。

```mermaid
flowchart LR
  User["管理员 Web 对话"] --> Web["Web UI"]
  Web --> Runtime["Python LangGraph Runtime"]
  Runtime --> MCP["Java MCP Server"]
  MCP --> DeepSeek["DeepSeek"]
  MCP --> DB["MySQL 只读查询"]
  MCP --> Tools["smqjh 业务工具"]
```

## 本地启动

先启动 MCP：

```powershell
..\scripts\start-mcp.ps1
```

再启动 Web Agent：

```powershell
..\scripts\start-web-agent.ps1
```

`start-web-agent.ps1` 会自动创建 `.venv` 并安装 `requirements.txt` 中的 Python 依赖。

浏览器访问：

```text
http://127.0.0.1:5188
```

## 环境变量

| 变量 | 默认值 | 说明 |
| --- | --- | --- |
| `WEB_AGENT_HOST` | `0.0.0.0` | Web Runtime 监听地址 |
| `WEB_AGENT_PORT` | `5188` | Web Runtime 端口 |
| `SMQJH_MCP_URL` | `http://127.0.0.1:8765/mcp` | MCP 服务地址；给同事测试时可改为实际内网 IP |
| `SMQJH_MCP_TOKEN` | 空 | MCP token，当前为空即可 |
| `SMQJH_ENVIRONMENT_NAME` | `test-gateway` | 传给 DeepSeek 的环境名 |
| `SMQJH_BASE_URL` | `http://192.168.1.242:8080` | smqjh 测试网关 |

## 设计约束

- Runtime 不保存 DeepSeek Key、数据库账号或后台账号，敏感配置统一在 MCP 本机配置中管理。
- 业务事实查询必须通过 MCP 工具执行，不让管理员自己复制 SQL。
- 工具输出中的 `columns/rows` 会独立渲染为表格，并支持下载 CSV。
- 写入、发券、结算确认等风险动作继续走 MCP 审批或人工确认。
