内容
# 服务端Now IT 帮助台 AI 代理 — Azure 解决方案加速器
**一键式 (`azd up`)** Azure 解决方案加速器,用于服务端Now 工单 AI 代理。终端用户通过 **CopilotKit / Next.js** 网页 UI 进行聊天。UI 调用 Python **AG-UI** 后端,后端调用 Foundry 托管的 **Orchestrator** 代理,该代理将每个请求路由到专业代理,专业代理(1)尝试从知识库解决请求,(2)如果无法解决,则**创建/分配/检查/更新** 服务端Now 工单。
构建于 **Azure AI Foundry**,使用 **Microsoft Agent Framework** 和预发布 **AG-UI / CopilotKit** 堆栈(`agent-framework-ag-ui==1.0.0rc8`,CopilotKit `1.55.2-next.1`),前端由 **Azure API Management** 提供(暴露服务端Now 表 API 作为 MCP 工具),并使用 **Azure Developer CLI (`azd`)** 部署完毕。
> 📐 [`ARCHITECTURE.md`](./ARCHITECTURE.md) 是组件、数据流和跨组件契约的真实来源。本 README 是**部署和运行**的新克隆指南。
>
> 🌐 更喜欢可浏览的版本?打开 **[项目主页](https://abkrazy.github.io/ITHelpdesk/)** — 本 README 和架构文档,带有左侧导航菜单。
---
## 它是什么
```mermaid
flowchart TD
User([终端用户]) -->|聊天| UI[Node/Next.js UI 应用服务<br/>前端<br/>CopilotKit]
UI <-->|AG-UI 协议,SSE<br/>AGUI_BACKEND_URL /agui| API[Python API 应用服务<br/>src/helpdesk/ui<br/>AG-UI 代理]
API <-->|调用 · 流式传输| ORCH[Orchestrator 代理<br/>Foundry 托管代理<br/>路由 + 人机协作网关]
subgraph Foundry[Azure AI Foundry 项目]
ORCH -->|交接| TRIAGE[Triage 代理<br/>Foundry 提示代理]
ORCH -->|交接| INC[Incident 代理<br/>Foundry 提示代理]
end
ORCH -. 服务端Now 写入提案 .-> HITL{{人类审批<br/>AG-UI 中断 · CopilotKit 卡片}}
HITL -. 批准恢复 · 拒绝取消 .-> INC
TRIAGE -->|Foundry IQ / Azure AI 搜索| SEARCH[(Azure AI 搜索<br/>索引:it-helpdesk-kb)]
SEARCH -. 从 .- STG[(Azure 存储<br/>容器:kbdocs)]
INC -->|APIM MCP 工具| APIM[API 管理 - 开发者层<br/>MCP 端点]
APIM -->|表 API + 基本身份验证| SNOW[(服务端Now 实例)]
APIM -. 读取凭证 .-> KV[(密钥保险箱)]
API -. 身份 .-> MI[用户分配的托管身份]
MI -. RBAC .-> SEARCH & STG & KV & Foundry
subgraph 计划[共享基本 B2 Linux 应用服务计划]
API
UI
end
subgraph 观测[观测]
AI[应用程序洞察 + 日志分析]
end
API & UI & Foundry & APIM -. 遥测 .-> AI
```
### 4 种能力(带有示例提示)
`assets/Sample-Prompts.txt` 中的三个提示练习能力 2-4;能力 1 是任何 KB 可回答的“如何……”问题。
| # | 能力 | 示例提示 | 会发生什么 |
|---|--------|-----------|------------|
| 1 | **故障排除和从知识库解决** | *"如何重置我的忘记的密码?"* | 故障排除从知识库回答步骤 + 引用。**不会创建工单。** |
| 2 | **创建和分配工单** | *"无法登录 Epic。创建一个新的工单。"* | 故障排除首先提供自信的 KB 故障排除步骤;如果用户确认未解决,工单代理创建工单并分配给 KB 分配组。 |
| 3 | **检查工单状态** | *"查找 incident INC0000057 的详细信息"* | 工单代理获取状态、紧急程度和分配组。 |
| 4 | **更新工单** | *"将 INC0010027 的紧急程度更新为低优先级"* | UI 显示人类审批卡;审批后,工单代理解析编号 → `sys_id` 并将紧急程度修补为 `3`(低优先级)。 |
---
## 先决条件(完整阅读 — 它可以防止 90% 的部署失败)
### 1. 工具 + 最低版本
| 工具 | 最低版本 | 检查 | 安装 |
|------|-----------------|-------|---------|
| **Azure 开发人员 CLI (`azd`)** | 1.9.0+ | `azd version` | <https://aka.ms/azd-install> |
| **Azure CLI (`az`)** | 2.60+ | `az version` | <https://aka.ms/azure-cli> |
| **Python** | 3.11+ | `python --version` | <https://www.python.org/downloads/> |
| **Node.js** | 22.x LTS | `node --version` | <https://nodejs.org/> |
| **npm** | 捆绑在 Node 22 中 | `npm --version` | <https://nodejs.org/> |
| **git** | 2.30+ | `git --version` | <https://git-scm.com/downloads> |
| **Bicep** | 捆绑在 `az`/`azd` 中 | `az bicep version` | `az bicep install` |
`azd` 现在构建和部署 **两个服务**:Python AG-UI API 和 Node/Next.js CopilotKit UI。保持 **Python 3.11+**、**Node 22.x** 和 **npm** 在 `PATH` 上,以便 Oryx/本地包验证可以构建两者。
### 2. Azure 订阅 + RBAC 角色,部署用户需要
`infra/main.bicep` 是 **订阅范围**:`azd up` **创建资源组**,所有资源,**和角色分配**,将托管身份(和可选地你)连接到密钥保险箱、存储、AI 搜索和 AI Foundry。
创建角色分配需要 `Microsoft.Authorization/roleAssignments/write`。因此,部署身份需要 **之一**:
- **所有者** 在目标订阅上(最简单 — 包括 RG 创建 + 角色分配),**或**
- **参与者** 加 **用户访问管理员** (或 **基于角色的访问控制管理员** )在订阅上。
> ⚠️ 普通 **参与者是不够的** — 它可以创建资源但会在 `keyvault.bicep`、`storage.bicep`、`search.bicep` 和 `foundry.bicep` 中因授权错误而失败。
**每个资源 `azd up` 创建** (单个资源组 `rg-<env>` )和它分配的角色:
| 资源 | Azure 类型 / SKU | 创建的角色分配(→ 托管身份,和可选地你) |
|----------|------------------|-------------------------------------------------------------------|
| 资源组 | `rg-<environmentName>` | — (创建需要订阅权限) |
| 托管身份 | `Microsoft.ManagedIdentity/userAssignedIdentities` | 分配给所有其他角色的incipal |
| 日志分析 + 应用洞察 | `Microsoft.OperationalInsights/workspaces` , `Microsoft.Insights/components` | — |
| 密钥保险箱 (+ 2 个秘密) | `Microsoft.KeyVault/vaults` (标准) | **密钥保险箱秘密用户** |
| 存储 (+ `kbdocs` 容器) | `Microsoft.Storage/storageAccounts` (标准,热) | **存储 blob 数据贡献者** |
| AI 搜索 | `Microsoft.Search/searchServices` (**基本**) | **搜索索引数据贡献者** + **搜索服务贡献者** |
| **Azure AI Foundry** (+ 项目 + 2 个模型部署) | `Microsoft.CognitiveServices/accounts` (种类 `AIServices` , S0) | **Azure AI 开发人员** + **认知服务 OpenAI 用户** (授予托管身份 **和** 可选地你) · **认知服务用户** (仅限托管身份) |
| **API 管理** | `Microsoft.ApiManagement/service` (**开发者** 层) | — (导入服务端Now OpenAPI 规范 + MCP 端点) |
| 应用服务计划 + Web 应用(API + UI) | `Microsoft.Web/serverfarms` (**基本 B2**)+ 2× `Microsoft.Web/sites` | Python `api` 暴露 `/agui`;Node `ui` 提供 CopilotKit 并调用 `AGUI_BACKEND_URL` |
*(角色 ID 在模块 Bicep 中固定 — 例如 `infra/modules/keyvault.bicep` , `storage.bicep` , `search.bicep` , `foundry.bicep` 。)*
### 3. Azure AI Foundry 模型部署配额
`infra/modules/foundry.bicep` (通过 `infra/main.bicep` 默认值)将 **三个模型** 部署到您选择的区域中的 Foundry 帐户:
| 模型 | 部署名称 | SKU / 类型 | 容量(TPM) | 默认在 |
|-------|-----------------|-----------|----------------|-----------|
| **`gpt-5.4`** (协调器 / 事件聊天) | `gpt-5.4` | `GlobalStandard` | **30** (30K 代币/分钟) | `main.bicep` `chatModelName`/`chatModelDeploymentName` |
| **`gpt-5.4-mini`** (故障排除聊天) | `gpt-5.4-mini` | `GlobalStandard` | **30** (30K 代币/分钟) | `main.bicep` `triageChatModelName`/`triageChatModelDeploymentName` |
| **`text-embedding-3-large`** (嵌入) | `text-embedding-3-large` | `Standard` | **30** (30K 代币/分钟) | `main.bicep` `embeddingModelName`/`embeddingModelDeploymentName` |
模型 **版本** 未固定;Foundry 使用当前默认值(`versionUpgradeOption: OnceNewDefaultVersionAvailable` )。
**您必须在所选区域为所有三个模型拥有配额,容量为这些容量。** 要检查/请求:
```bash
# 列出可用模型 + 您的区域配额
az cognitiveservices account list-models --name <foundry> --resource-group <rg> 2>/dev/null
# 或使用 Foundry / AI 门户配额刀片:
# https://ai.azure.com -> 管理中心 -> 配额
# 请求更多: Azure 门户 -> 配额 -> 认知服务 / Azure OpenAI
```
如果配额不足,降低 `capacity` (例如降至 10)或选择具有裕度的区域。
### 4. 资源提供程序注册
确保这些提供程序在订阅上 **已注册** (门户 → 订阅 → 资源提供程序,或以下命令)。 `azd`/ARM 自动注册大多数,但第一次订阅通常需要显式注册这三个:
```bash
az provider register --namespace Microsoft.CognitiveServices
az provider register --namespace Microsoft.ApiManagement
az provider register --namespace Microsoft.Search
# 还使用:Microsoft.Web,Microsoft.KeyVault,Microsoft.Storage,
# Microsoft.OperationalInsights,Microsoft.Insights,
# Microsoft.ManagedIdentity,Microsoft.Authorization
```
### 5. 区域可用性注意事项
> **⚠️ 单项最重要的选择。** 协调器作为 **Foundry 托管代理(预览版)** 交付,仅在 **有限的子集** 区域可用 — 比 Prompt 代理或基本模型更窄。 `infra/main.bicep` 因此将 `location` (通过 `@allowed` )限制为支持 **所有** 必需服务的区域。 `azd up` 只允许您从此列表中选择。
选择支持 **所有** 以下内容的区域:
- **Foundry 托管代理(预览版)** — 目前仅 **East US 2, North Central US, Sweden Central, West US, West US 3**。此约束是绑定约束。参见 [托管代理区域可用性](https://learn.microsoft.com/azure/foundry/agents/concepts/hosted-agents#region-availability)。
(普通 **East US 不支持** 托管代理,尽管它支持提示代理。)
- **`gpt-5.4` / `gpt-5.4-mini` (GlobalStandard) 和 **`text-embedding-3-large` (标准)** 在
Azure AI Foundry — 参见 [模型区域可用性](https://learn.microsoft.com/azure/ai-services/openai/concepts/models)。
注意:一些托管代理区域(例如 North Central US, West US) **不提供`text-embedding-3-large` 在 **标准** SKU — 验证后再选择。
- **Azure AI 搜索 `basic` SKU** — 托管代理区域的容量有时很紧张。如果 `azd up` 失败,则 **重新运行 `azd up`** (它是幂等的并且恢复)或从列表中选择另一个区域。
- **API 管理开发者层** — 在上述所有区域均可用。
**经过充分测试的选择(必需模型 + 托管代理 + 搜索):** **Sweden Central**,**West US 3**,**East US 2**。首先检查模型配额和搜索容量:
```bash
az cognitiveservices usage list --location swedencentral \
--query "[?contains(name.value,'gpt-5.4') || contains(name.value,'gpt-5.4-mini') || contains(name.value,'text-embedding-3-large')].{name:name.value,current:currentValue,limit:limit}" -o table
```
> **受管辖 / 策略锁定订阅。** 一些企业订阅强制实施 Azure Policy,强制存储 `publicNetworkAccess = Disabled`。 KB **接地路径不受影响** — `postprovision` 嵌入 `assets/kb/*` 并直接推送到 AI 搜索(其终结点保持公开)。唯一受影响的是可选的 **存档** 副本原始文档到 Blob 存储; `postprovision` 记录警告并继续,因此 `azd up` 仍会成功并且 Triage 代理完全接地。
如果有疑问,请在同一区域部署 AI Foundry 和 APIM 以避免跨区域延迟。
### 6. 服务端Now 先决条件
- **服务端Now 实例** — 使用您自己的。免费的 **个人开发者实例(PDI)** 效果很好;请在 <https://developer.servicenow.com> 获取一个。您将在 `azd up` 提示时提供其基本 URL(`https://<您的实例>.service-now.com`)。它 **不会** 存储在此存储库中。
- **具有 `itil` 角色的服务端Now 用户** (或等效) — 需要通过表 API **读取、创建和更新 `incident` 记录**。
- **表 API OpenAPI 规范** 已在
[`assets/ServiceNow-OpenAPI-spec.json`](./assets/ServiceNow-OpenAPI-spec.json) 中提供,并自动导入到 APIM — 您不需要提供它。
- `azd up` 将 **提示** 实例 URL,用户名和密码。凭证存储为 **密钥保险箱秘密** 并注入 APIM 作为基本身份验证命名值 — **它们永远不会在源代码、输出或应用设置中以明文显示**。
### 7. 成本说明(不免费)
黑客马拉thon 规模的部署成本不高但 **不免费**。粗略驱动因素:
- **API 管理 — 开发者层:** ~**$0.07/小时 (~$50/month)**。在提供时计费; **还需要 ~30–45 分钟创建**(参见故障排除)。
- **Azure AI Foundry 模型使用:** 按令牌付费 `gpt-5.4` , `gpt-5. **费用按令牌计算** — 演示几美分,流量扩展几美元。
- **应用服务基本 B2**,**AI 搜索基本版**,**存储**,**密钥保险箱**,**日志分析/应用洞察**:每天几美元合计。
**估计:** 一天长时间的黑客马拉松通常花费 **几美元到 $10**,主要取决于 APIM 的每小时费用。 **运行完毕时请执行 `azd down`(参见清理)**。
## 验证您的部署
在用户界面中运行每个示例提示并确认结果:
| 提示 | 正确结果 |
|--------|----------------|
| `如何重置我的忘记的密码?` | 知识库(KB)解决步骤 + 引用 **密码重置和登录帮助**。 **不会创建事件。** |
| `无法登录 Epic。创建新的事件。` | 知识库登录故障排除步骤 + 提供创建事件的选项,分配给 **身份和访问管理**(从 `unable-to-login.md` 中提取)。如果未解决,回复 `继续`;批准卡片以创建事件,或拒绝以取消。 |
| `查找事件 INC0000057 的详细信息` | 事件 **INC0000057** 的详细信息 — 状态、紧急程度、分配组。 |
| `将 INC0010027 的紧急程度更新为低` | 首先出现一个人工审批卡。批准它,然后确认 **INC0010027** 的紧急程度现在为 **低**(ServiceNow 代码 `3`)。拒绝则取消更新。 |
> 查找/更新提示引用示例事件编号(**INC0000057**,**INC0010027**),这些编号存在于参考 PDI 上。如果您连接了 **您自己的** ServiceNow 实例,请替换为实际存在的事件编号(创建流程适用于任何实例,并为您提供新的编号进行测试)。
---
## 本地/模拟开发(无需 Azure)
整个聊天流程在 `HELPDESK_MOCK=1` 的情况下离线运行:分诊搜索本地知识库(`assets/kb/*.md`),事件代理使用预先植入 **INC0000057** 和 **INC0010027** 的内存式 ServiceNow 模拟。
```bash
# 创建虚拟环境并安装运行时 + 开发 + UI + ServiceNow 额外功能
python -m venv .venv
.\.venv\Scripts\activate # PowerShell: .\.venv\Scripts\Activate.ps1
# macOS/Linux: source .venv/bin/activate
pip install -e ".[dev,ui,servicenow]"
# 运行完整的测试套件(离线)
$env:HELPDESK_MOCK = "1" # bash/zsh: export HELPDESK_MOCK=1
pytest
# 在模拟堆栈上本地运行 Python AG-UI API
python -m uvicorn helpdesk.ui.app:app --host 0.0.0.0 --port 8000
# 在另一个 shell 中,运行 CopilotKit 前端以对抗该后端
cd frontend
npm install
$env:AGUI_BACKEND_URL = "http://localhost:8000/agui" # bash/zsh: export AGUI_BACKEND_URL=http://localhost:8000/agui
npm run dev
# -> 打开 http://localhost:3000
```
参见 [`tests/README.md`](./tests/README.md) 以获取完整的模拟与实时测试指南。
---
## 故障排除
| 症状 | 可能原因 | 解决方法 |
|---------|--------------|-----|
| `azd up` 失败,角色分配错误(`AuthorizationFailed`,`RoleAssignmentUpdateNotPermitted`) | 部署用户缺乏角色分配权限 | 授予 **所有者** 或 **贡献者 + 用户访问管理员**,在订阅上(参见先决条件 §2)。 |
| 模型部署失败,配额/容量错误 | 区域中没有 `gpt-5.4`、`gpt-5.4-mini` 或 `text-embedding-3-large` 的配额 | 请求配额,降低 `capacity` 在 `main.bicep` 中,或选择另一个区域(先决条件 §3)。 |
| `azd up` 卡在 30–45 分钟 | **APIM 开发人员层配置缓慢(正常)** — 新的 APIM 实例需要 ~30–45 分钟激活 | 等待;它没有卡住。后续 `azd up` 运行速度会快得多。 |
| `MissingSubscriptionRegistration` / 提供者未注册 | 首次订阅 | `az provider register` 先决条件 §4 中的命名空间,然后重试。 |
| 模型/APIM "在该地区不可用" | 地区不提供该 SKU/模型 | 重新部署到支持的地区(先决条件 §5),例如东美 2 或瑞典中心。 |
| ServiceNow 调用返回 **401/403** | 错误的用户名/密码,或用户缺乏 `itil` 角色 | 重新运行并重新输入凭证:`azd env set SERVICENOW_USERNAME …` / `SERVICENOW_PASSWORD …`,确保 `itil` 角色,然后 `azd provision`。 |
| postprovision 失败, **`... search.windows.net 超时(连接超时)`** 或 **`... 无法从此计算机访问`** | postprovision 挂钩从 **您的计算机** 运行 AI Search 索引构建,但 Search(或 Storage)端点无法访问 — 通常是因为 **受管订阅的 Azure Policy 禁用公共网络访问** 数据平面资源。笔记本电脑无法连接。 | 参见 **[部署到受管/网络受限订阅](#部署到受管-网络受限订阅)** 以下内容。最快的解决方法是从 **Azure Cloud Shell**(或同一租户中的 Azure VM)运行 `azd up`,它作为受信任的 Azure 服务访问端点。或者,启用 Search + Storage 资源(或将您的客户端 IP 添加到其防火墙)的公共网络访问并重新运行 `azd provision`。构建现在快速失败(~30 秒),并带有此指导而不是挂起 5 分钟。 |
| postprovision 提示 **KB blob 上传跳过(AuthorizationFailure)** | 部署者的 **存储 Blob 数据贡献者** 角色分配在 postprovision 运行之前尚未完成传播(数据平面 RBAC 需要几分钟),**或** 存储端点被网络锁定(参见上面的受管订阅行)。 | **非致命** — KB blob 复制仅用于存档;分诊基础读取 `assets/kb` 本地并将其索引到 AI Search,因此它仍然有效。postprovision 带有回退重试;如果由于 RBAC 仍然跳过,请重新运行 `azd provision`,一旦角色传播完成。 |
| Foundry 代理设置失败, **`无法导入名称 'KnowledgeBase'`** (或其他 `Knowledge*`/`SearchIndex*` 模型) | 运行 postprovision 挂钩的本地 Python 具有漂移的 `azure-search-documents` — Foundry IQ 代理检索预览模型仅存在于 `11.7.0b2` | postprovision 挂钩现在构建一个隔离的 `.venv-provision/` 并安装 `scripts/requirements-postprovision.txt` 中的确切 pins,然后运行 — 因此部署者的全局 Python 版本不再重要。只需确保 `PATH` 上有 **Python 3.11+** 并重新运行 `azd provision`。 |
| 在您自己的实例中查找 `INC0000057` 返回 "未找到" | 示例事件仅存在于参考 PDI | 使用您实例中的真实事件编号,或通过创建流程首先创建一个。 |
| UI 加载但聊天错误 | postprovision 未完成(无索引/代理),或 Node UI 无法访问 Python API | 重新运行 `azd provision`(重新触发幂等 postprovision 挂钩),验证 `AGUI_BACKEND_URL=https://<api-host>/agui`,并检查 `azd env get-value SERVICE_API_URI`。 |
| 应用服务计划显示 **B1** (UI 感觉不足) | 环境是从 B2 克隆之前配置的。 `api` + `ui` 应用 **共享一个计划**,因此两者都在同一层 — 当前模板针对 **B2**。 | `az appservice plan update -g <rg> -n plan-<token> --sku B2`(即时,在原地)或重新运行 `azd provision`。在 `az appservice plan list -g <rg> -o table` 中确认。 |
### 部署到受管/网络受限订阅
postprovision 挂钩执行 Bicep 无法执行的数据平面连接:它构建 AI Search 索引,将 KB 文档上传到存储,并注册 Foundry 代理。**此操作从运行 `azd up` 的机器上执行,通过公共互联网,使用您的 `az login` 身份。** 因此,它需要到 AI Search、存储和 Foundry 端点的网络视线。
许多企业订阅应用 **Azure Policy 以禁用公共网络访问** PaaS 数据服务(这会覆盖模板请求的 `publicNetworkAccess: enabled`)。发生这种情况时,笔记本电脑无法访问 AI Search 端点 — 您将看到 **连接超时** (Search)和/或 **403 AuthorizationFailure** (存储),即使 `azd provision` 成功。
您有三个选项,最简单的方法是:
1. **从 Azure Cloud Shell** (`https://shell.azure.com`)或同一租户/区域的 Azure VM 运行 `azd up`。在 Azure 内部运行的代码被视为受信任的 Azure 服务,因此即使公共访问关闭,它也能访问端点。这是针对锁定租户的推荐路径,不需要 **任何基础设施更改**。(克隆存储库,`azd auth login`,`azd up`。)
2. **允许您的客户端** 访问资源:启用 AI Search 服务和存储帐户的公共网络访问(或将您的出口 IP 地址添加到其防火墙),然后重新运行 `azd provision`。需要更改这些网络设置的权限。
3. **添加私有网络** (VNet + 私有终结点)并在 VNet 内部运行设置 — 最安全但最繁重的选项;超出快速入门的范围。
**还必需(所有路径):** 部署者需要模板分配的数据平面角色 — **Search Index Data Contributor** + **Search Service Contributor** 和 **Storage Blob Data Contributor**。这些角色在 `azd provision` 期间创建,但 Azure 数据平面 RBAC 可能需要几分钟才能传播;postprovision 自动重试授权窗口。如果它仍然报告“尝试 N 次后授权失败”,请等待几分钟并重新运行 `azd provision`。
---
## 清理
删除 **所有** 已配置的资源(停止所有费用,包括 APIM):
```bash
azd down --purge
```
`--purge` 还会清除软删除的 Key Vault / Cognitive Services,以便可以立即重用名称。
---
## 仓库结构
```
azure.yaml # azd 清单:api + ui 服务 + 预部署/后部署钩子
ARCHITECTURE.md # 源代码 — 组件、数据流、合约
BUILD_PLAN.md # 所有权 + 构建顺序
pyproject.toml # Python 3.11+ 项目 + 每个组件的额外功能
README.md # 本指南
infra/ # Bicep IaC(订阅范围)
main.bicep # 资源组 + 模块连接 + 输出合约
main.parameters.json # azd env -> Bicep 参数绑定(包括模型默认值)
abbreviations.json # 资源名称缩写
modules/ # 监控、身份、密钥库、存储、搜索、
# Foundry(模型)、APIM(ServiceNow + MCP)、应用服务
src/
helpdesk/
orchestrator/ # Orchestrator 路由器(Foundry 主机代理)
agents/ # 分诊(KB)+ 事件(ServiceNow)代理、KB 解析、
# 搜索客户端、代理/索引设置
ui/ # FastAPI AG-UI API 后端(/agui)
shared/ # 配置(azd 输出合约)+ 凭证助手
servicenow/ # ServiceNow / APIM MCP 客户端 + 字段/枚举映射 [Switch]
frontend/ # Next.js + CopilotKit 客户 UI
scripts/ # azd 生命周期钩子:预部署(ServiceNow 输入)、
# 后部署(KB 上传、索引构建、代理创建)
tests/ # pytest 套件(模拟 + 实时)— 参见 tests/README.md
assets/ # KB 文档(kb/*.md)、ServiceNow OpenAPI 规范、示例提示
```
| 文件夹 | 用途 | 主要负责人 |
|--------|---------|---------------|
| `infra/` | 所有 Azure 资源(Bicep) | Tank |
| `src/helpdesk/orchestrator`、`src/helpdesk/agents`、`src/helpdesk/ui` | 代理 + 协调 + AG-UI API 后端 | Trinity |
| `frontend/` | CopilotKit / Next.js 客户 UI | Switch |
| `src/servicenow/` | ServiceNow / APIM MCP 集成 | Switch |
| `scripts/` | azd 生命周期钩子 | Tank + Trinity |
| `tests/`、`docs` | 测试覆盖 + 本 README | Dozer |
| `ARCHITECTURE.md`、`azure.yaml` 形状 | 架构和合约 | Morpheus |
---
## 许可证
MIT — 参见 `pyproject.toml`。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器