系统概述

本系统是一套可嵌入任意 .NET 业务项目的对话式数据查询 AI Agent。用户用自然语言提问,系统自动:

1. 从已学习的 API Index 中匹配最合适的接口;

2. 将自然语言参数(如「上海」「上个月」「大于1000」)绑定为 API 查询参数;

3. 只读 GET 方式调用业务系统现有 API;

4. 表格 + ECharts 图表展示结果。

1.1 系统架构

下图展示各组件之间的关系与数据流向。

图 1-1 系统架构总览

组件

端口(默认)

作用

API Scanner

CLI / 3100

扫描前端源码,生成 API Index

API Index Server

3100

提供 Index 的 REST 查询/重建

AI Agent 服务

5100

自然语言理解、API 匹配与调用

Chat UI

8080(开发)/ 随 Agent 静态托管

对话界面 Web Component

业务系统 API

5200(示例)

您现有的 .NET Web API

1.2 核心约束

  • 不修改业务代码逻辑
  • 不依赖 Swagger / OpenAPI / XML 注释
  • 不直连数据库写操作,仅通过现有 GET API 只读查询
  • 复用原系统 Cookie / JWT 鉴权

2. 环境要求

软件

版本

用途

Node.js

≥ 18

Scanner、Chat UI 开发服务器

.NET SDK

8.0

AI Agent 服务、业务 API

npm

随 Node 安装

依赖管理

浏览器

Chrome / Edge 最新版

使用 Chat UI

内网离线环境说明:

  • 所有前端 JS(含 ECharts)已本地化,运行时不需要访问公网 CDN
  • 仅首次 npm install 需要联网下载依赖(可提前在有网环境执行后拷贝 node_modules)。

3. 目录结构说明

LLM/

├── scanner/                 # Node.js 扫描器 + Index Server

│   ├── src/scanners/        # Vue2/Vue3/jQuery/MVC 扫描插件

│   ├── src/server/          # Index REST 服务

│   ├── data/                # 生成的 API Index JSON

│   └── package.json

├── agent/                   # .NET 8 AI Agent

│   └── src/

│       ├── AiAgent.Api/     # Web API + 静态文件托管

│       ├── AiAgent.Core/    # 领域模型

│       └── AiAgent.Infrastructure/

├── chat-ui/                 # Web Component 聊天组件

│   ├── vendor/echarts.min.js  # 本地 ECharts(无 CDN)

│   ├── ai-chat-agent.js

│   ├── demo.html

│   └── package.json

├── samples/DemoApp/         # 示例业务 API

├── docs/

│   ├── 操作手册.md          # 本文档

│   └── images/              # 手册配图

└── package.json             # 根目录 npm run dev

4.  扫描业务项目并生成 API Index

将 AI Agent 接入真实项目前,必须先扫描该项目的前后端代码,生成 API Index。

4.1 确认项目包含可扫描内容

Scanner 支持以下文件类型:

框架

扫描文件

提取内容

Vue2

.vue

axios.get/post、el-table-column 列名、页面标题

Vue3

.vue

Composition API 中的 fetch/axios、列名

jQuery

.js .html .cshtml

$.ajax、$.get、fetch、<th> 列名

MVC

.cshtml .cs

Html.BeginForm、@Url.Action、Controller Action

4.2 执行扫描命令

powershell

cd d:\项目源码\2026\软件产品\LLM\scanner

# 基本扫描(不使用 LLM,适合内网)

node src/cli.js scan ^

  --project my-sales-system ^

  --root "D:\您的项目\前端源码根目录" ^

  --no-llm ^

  -o ./data

# 指定框架(可选)

node src/cli.js scan --project my-app --root "D:\path" --framework vue3 --no-llm

扫描成功后,终端将显示找到的 API 数量及输出文件路径,如下图所示。

图 6-1 Scanner 扫描完成输出示例

参数说明:

参数

必填

说明

--project

项目唯一标识,后续 Chat UI 的 project 属性与之对应

--root

待扫描项目根目录(含 .vue / .cshtml / Controllers 等)

-o / --output

Index 输出目录,默认 ./data

--no-llm

跳过 LLM 语义推断,使用启发式规则(内网推荐)

--framework

强制框架:vue2 vue3 jquery mvc

4.3 使用 LLM 增强语义(有 OpenAI 兼容 API 时)

powershell

# 复制并编辑环境变量

copy .env.example .env

# 设置 OPENAI_API_KEY、OPENAI_BASE_URL 等

node src/cli.js scan --project my-app --root "D:\path" -o ./data

LLM 将为每个 API 补充 apiPurpose、paramMeanings、confidence 等字段,提高自然语言匹配准确率。

4.4 通过 Index Server 远程重建

powershell

# 先启动 npm run serve

curl -X POST http://localhost:3100/api-index/rebuild ^

  -H "Content-Type: application/json" ^

  -d "{\"project\":\"my-app\",\"root\":\"D:\\\\path\\\\to\\\\project\",\"useLlm\":false}"

4.5 检查生成的 Index

打开 scanner/data/my-sales-system.json,确认关键字段:

json

{

  "project": "my-sales-system",

  "apis": [

    {

      "url": "/api/orders",

      "method": "GET",

      "pageTitle": "销售订单查询",

      "apiPurpose": "按地区、日期查询订单",

      "agentUsable": true,

      "confidence": 0.85,

      "columns": ["订单号", "地区", "金额"]

    }

  ]

}

仅 agentUsable: true 且 method: GET 的 API 会参与自然语言匹配。

5. 配置 AI Agent 服务

编辑 agent/src/AiAgent.Api/appsettings.json:

json

{

  "Agent": {

    "ApiIndexServerUrl": "http://localhost:3100",

    "TargetApiBaseUrl": "http://localhost:5200",

    "DefaultProject": "demo",

    "IndexDataPath": "../../../scanner/data",

    "MaxRows": 1000,

    "TimeoutSeconds": 5,

    "Llm": {

      "Provider": "openai",

      "ApiKey": "",

      "BaseUrl": "https://api.openai.com/v1",

      "Model": "gpt-4o-mini"

    }

  }

}

配置项详解

配置项

说明

接入真实项目时

TargetApiBaseUrl

业务 API 根地址

改为 https://your-app.company.com

DefaultProject

默认 API Index 项目名

改为扫描时的 --project 值

IndexDataPath

本地 Index JSON 目录(相对 Agent 运行目录)

确保包含 {project}.json

ApiIndexServerUrl

Index Server 地址

使用 Index Server 时填写

Llm.ApiKey

LLM Key(参数归一化增强)

内网可留空,使用启发式规则

接入真实项目示例:

json

{

  "Agent": {

    "TargetApiBaseUrl": "https://erp.mycompany.local",

    "DefaultProject": "erp-sales",

    "IndexDataPath": "../../../scanner/data"

  }

}

修改配置后需重启 Agent 服务

6 使用对话查询界面

6.1 打开聊天窗口

访问 http://localhost:8080/demo.html,点击右下角蓝色 💬 按钮打开助手面板。

图 8-1 聊天助手初始界面

6.2 输入自然语言查询

在底部输入框输入问题,点击 发送 或按 Enter

示例问题:

用户输入

系统行为

查一下上海的订单

匹配订单列表 API,绑定 region=上海

上海上个月金额超过1000的订单

绑定地区 + 日期范围 + 最小金额

各地区订单汇总

匹配汇总统计 API

6.3 查看查询结果

成功时界面显示:

1. 摘要:匹配的 API 及用途说明 

2. 表格:数据明细(最多显示 20 行) 

3. 图表:自动选择柱状图/折线图/饼图

图 8-2 自然语言查询成功(表格 + 图表)

6.4 通过 API 直接调用(供集成测试)

powershell

$body = '{"query":"查一下上海的订单","project":"demo"}'

Invoke-RestMethod -Uri "http://localhost:5100/api/chat/query" `

  -Method POST -Body $body -ContentType "application/json"

返回 JSON 包含 success、table、chart、matchedApi 等字段。

7. 嵌入到现有项目

将 AI Agent 嵌入业务项目分三步:

扫描目标项目 → 生成 API Index

部署/配置 Agent 服务 → TargetApiBaseUrl 指向业务系统

在业务页面引入 Chat UI 静态资源

需要复制的文件(均在 chat-ui/ 或 wwwroot/):

vendor/echarts.min.js    # 约 1MB,图表库

ai-chat-agent.js         # Web Component 主文件

iframe.html              # iframe 方式(可选)

7.1 嵌入 Vue2 / Vue3 项目

步骤 1:复制静态资源

将以下文件复制到 Vue 项目的 public/ai-agent/ 目录:

public/ai-agent/vendor/echarts.min.js

public/ai-agent/ai-chat-agent.js

步骤 2:在 public/index.html 中引入

html

<!DOCTYPE html>

<html>

<head>

  <!-- 其他 head 内容 -->

  <script src="/ai-agent/vendor/echarts.min.js"></script>

  <script src="/ai-agent/ai-chat-agent.js"></script>

</head>

<body>

  <div id="app"></div>

  <!-- 全局挂载 AI 助手 -->

  <ai-chat-agent

    api-base="https://ai-agent.mycompany.local"

    project="erp-sales"

    title="数据助手">

  </ai-chat-agent>

</body>

</html>

步骤 3:配置 api-base

部署方式

api-base 取值

Agent 独立域名

https://ai-agent.mycompany.local

与业务 API 同域反向代理 /ai-agent

https://erp.mycompany.local/ai-agent

开发时 Vite 代理(见下方)

留空或不设置

Vue CLI / Vite 开发代理示例(`vue.config.js`):

javascript

module.exports = {

  devServer: {

    proxy: {

      '/api/chat': {

        target: 'http://localhost:5100',

        changeOrigin: true

      }

    }

  }

}

此时 api-base 留空,组件自动请求同源 /api/chat/query。

图 9-1 Vue 项目嵌入效果示意

步骤 4:扫描该 Vue 项目

powershell

node scanner/src/cli.js scan --project erp-sales --root "D:\您的Vue项目" --no-llm

7.2 嵌入 jQuery / 静态 HTML 项目

步骤 1:复制文件到 Web 根目录

wwwroot/ai-agent/vendor/echarts.min.js

wwwroot/ai-agent/ai-chat-agent.js

步骤 2:在页面 </body> 前添加

html

<script src="/ai-agent/vendor/echarts.min.js"></script>

<script src="/ai-agent/ai-chat-agent.js"></script>

<ai-chat-agent api-base="http://localhost:5100" project="demo" title="AI 助手"></ai-chat-agent>

步骤 3:iframe 方式(老项目兼容)

若 Web Component 与旧版 jQuery 冲突,使用 iframe:

html

<iframe

  src="/ai-agent/iframe.html"

  style="position:fixed;right:0;bottom:0;width:420px;height:600px;border:none;z-index:99999;">

</iframe>

修改 iframe.html 内 api-base 为 Agent 服务地址。

7.3 嵌入 ASP.NET MVC Razor 项目

步骤 1:复制静态文件

复制到 wwwroot/ai-agent/(与 jQuery 方式相同)。

步骤 2:在 _Layout.cshtml 底部添加

cshtml

@* AI Agent 对话助手 *@

<script src="~/ai-agent/vendor/echarts.min.js"></script>

<script src="~/ai-agent/ai-chat-agent.js"></script>

<ai-chat-agent api-base="@Url.Content("~/")" project="mvc-demo" title="数据助手"></ai-chat-agent>

若 Agent 部署在独立站点:

cshtml

<ai-chat-agent api-base="https://ai-agent.internal" project="mvc-demo"></ai-chat-agent>

步骤 3:扫描 MVC 项目

powershell

node scanner/src/cli.js scan --project mvc-demo --root "D:\您的MVC项目" --framework mvc --no-llm

Scanner 会自动解析:

  • Html.BeginForm("Action", "Controller") → POST 路由(标记为不可用于 Agent)
  • @Url.Action("GetData", "Report") → GET 路由
  • .cs Controller 中的 [HttpGet] + JsonResult → agentUsable: true

图 9-2 MVC 项目嵌入效果示意

步骤 4:鉴权传递

用户登录 MVC 后,浏览器 Cookie 会自动随 Chat UI 的 fetch 请求发送到 Agent;Agent 再转发 Cookie 调用业务 API,无需额外登录

7.4 嵌入 ASP.NET Core Web API / Blazor 项目

方式 A:Agent 静态文件随 Agent 服务托管(推荐)

1. 执行 npm run sync:wwwroot 将 Chat UI 同步到 AiAgent.Api/wwwroot

2. 业务页面通过 iframe 或跨域 Web Component 引用 Agent 站点

3. 配置业务系统 CORS 允许 Agent 域名(若跨域调用业务 API)

方式 B:与业务 API 同站点部署

1. 将 wwwroot/ai-agent/* 复制到业务项目的 wwwroot/ai-agent/

2. 在业务项目中添加反向代理,将 /api/chat/* 转发到 Agent 服务

3. 页面引用:

html

<script src="~/ai-agent/vendor/echarts.min.js"></script>

<script src="~/ai-agent/ai-chat-agent.js"></script>

<ai-chat-agent project="my-api-project"></ai-chat-agent>

更多推荐