# AI Agent 问渠 API 智能代理
**Repository Path**: north-dream-testing/Ask-Canal-API-Intelligent-Agent
## Basic Information
- **Project Name**: AI Agent 问渠 API 智能代理
- **Description**: 问渠 API 智能代理(API Agent)是一个基于 MCP(Model Context Protocol)协议的智能 API 网关服务。它将任意 GraphQL 或 REST API 转化为可通过自然语言查询的智能端点,用户无需了解 API 的具体结构,只需用自然语言描述需求,代理即可自动理解 API Schema、生成调用请求、返回结构化结果。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-25
- **Last Updated**: 2026-09-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 问渠 API 智能代理
用自然语言查询任意 API
功能特性 •
快速开始 •
配置说明 •
界面预览 •
API 文档 •
部署指南
---
## 项目简介
**问渠 API 智能代理**(API Agent)是一个基于 MCP(Model Context Protocol)协议的智能 API 网关服务。它将任意 GraphQL 或 REST API 转化为可通过自然语言查询的智能端点,用户无需了解 API 的具体结构,只需用自然语言描述需求,代理即可自动理解 API Schema、生成调用请求、返回结构化结果。
### 核心能力
- 🎯 **自然语言查询** - 用中文或英文提问,自动转换为 API 调用
- 🔌 **多协议支持** - 同时支持 GraphQL 和 REST/OpenAPI 接口
- 🧠 **智能 Schema 理解** - 自动读取并理解 API 结构,生成最优查询
- **结构化输出** - 支持表格、CSV、JSON 等多种结果格式
- **Recipe 学习** - 成功查询可保存为可复用工具,提升后续查询效率
- 🔐 **认证透传** - 支持 Bearer Token、API Key 等多种认证方式
- 🐳 **容器化部署** - 开箱即用的 Docker 部署方案
### 技术栈
| 组件 | 技术 |
|------|------|
| 后端框架 | Python 3.11 + FastMCP |
| LLM 集成 | OpenAI Agents SDK(兼容 DeepSeek) |
| 数据处理 | DuckDB(SQL 后处理) |
| 协议 | MCP JSON-RPC 2.0 over Streamable HTTP |
| 前端 | 原生 HTML/CSS/JavaScript SPA |
| 部署 | Docker + Docker Compose |
---
## 功能特性
### 1. 自然语言 API 查询
用户只需用自然语言描述需求,代理自动完成:
- 解析用户意图
- 理解 API Schema
- 生成最优 API 调用
- 后处理返回结果
**示例:**
```
用户:列出前 5 个角色,包括名字和状态
代理:自动生成 GraphQL 查询 → 调用 API → 返回表格结果
```
### 2. GraphQL 支持
- 自动读取 GraphQL Schema
- 支持复杂查询、嵌套字段
- 智能字段选择和过滤
### 3. REST/OpenAPI 支持
- 自动解析 OpenAPI 3.x 规范
- 支持 GET/POST/PUT/DELETE 等方法
- 路径参数和查询参数自动处理
### 4. Recipe 学习机制
成功的查询模式会被采样保存为可复用的 `r_{slug}` 工具,后续相似查询可直接调用,大幅提升响应速度和准确性。
### 5. 多结果格式
- **文本摘要** - LLM 生成的自然语言回答
- **表格展示** - 结构化数据自动渲染为表格
- **CSV 导出** - 支持 `return_directly` 参数直接返回 CSV
- **调试模式** - 包含完整调用链和 trace_id
### 6. 认证与安全
- 支持 Bearer Token、API Key 等认证头透传
- 可选的 Passthrough Headers 机制
- 不安全路径(POST/PUT/DELETE)白名单控制
---
## 快速开始
### 环境要求
- Docker 20.10+
- Docker Compose v2+
- 有效的 LLM API Key(OpenAI 或 DeepSeek)
### 一键部署
```bash
# 1. 克隆项目
git clone
cd api-agent
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入你的 API Key
# 3. 启动服务
docker compose up -d
# 4. 访问前端
open http://localhost:8080
```
### 服务端口
| 服务 | 端口 | 说明 |
|------|------|------|
| API Agent (MCP) | 3000 | MCP 协议端点 |
| Frontend (Web UI) | 8080 | 用户界面 |
### 健康检查
```bash
curl http://localhost:3000/health
# {"status":"ok"}
```
---
## 配置说明
### 环境变量(.env)
```env
# LLM 配置
OPENAI_API_KEY=sk-xxx # LLM API 密钥
OPENAI_BASE_URL=https://... # LLM API 地址(可选,用于 DeepSeek 等兼容服务)
# 服务配置
PORT=3000 # MCP 服务端口
API_AGENT_HOST=0.0.0.0 # 绑定地址
API_AGENT_CORS_ALLOWED_ORIGINS=* # CORS 允许的来源
```
### TOML 配置(api-agent.toml)
```toml
[model]
api = "chat_completions" # API 类型:chat_completions 或 responses
name = "deepseek-chat" # 模型名称
openai_base_url = "https://api.deepseek.com/v1"
reasoning_effort = "low" # 推理努力程度
[description]
model_name = "deepseek-chat" # Schema 描述模型
timeout_seconds = 15 # 描述生成超时
```
> **注意**:只有 `OPENAI_API_KEY`、`OPENAI_BASE_URL`、`PORT` 可通过环境变量覆盖,其他配置必须通过 TOML 文件设置。
---
## 界面预览
### 整体架构
```
┌─────────────┐ MCP Protocol ┌──────────────┐ HTTP ┌─────────────┐
│ 前端 UI │ ─────────────────► │ API Agent │ ◄──────────► │ Target API │
│ (Port 8080)│ JSON-RPC 2.0 │ (Port 3000) │ GraphQL/REST│ (External) │
└─────────────┘ └──────────────┘ └─────────────┘
│
▼
┌──────────────┐
│ LLM API │
│ (DeepSeek等) │
└──────────────┘
```
### 功能界面截图
#### 1. 欢迎页面
首次访问时显示的欢迎界面,左侧为 API 配置面板,右侧为对话区域。

**界面元素说明:**
- **服务地址**:MCP 服务endpoint,默认 `http://localhost:3000/mcp`
- **目标 API 地址**:GraphQL 端点或 OpenAPI 规范 URL
- **接口类型**:GraphQL 或 REST/OpenAPI 切换
- **认证请求头**:JSON 格式的认证信息(可选)
- **工具名前缀**:自定义工具名称前缀(可选)
#### 2. API 连接成功
配置目标 API 后,点击回车或切换字段自动触发连接。连接成功后状态栏显示绿色圆点和工具名称。

**连接流程:**
1. 前端发送 `initialize` 请求到 MCP 服务
2. MCP 服务加载目标 API Schema
3. 动态生成 `{prefix}_query` 工具
4. 前端显示连接状态和可用工具
#### 3. GraphQL 查询结果
输入自然语言问题,代理自动理解 GraphQL Schema 并生成查询,结果以表格形式展示。

**查询示例:**
- "列出前 5 个角色,包括名字和状态"
- "找出所有存活的角色,按名字排序"
- "统计每个状态的角色数量"
#### 4. REST API 查询结果
切换到 REST 模式,输入 OpenAPI 规范 URL,即可对 REST API 进行自然语言查询。

**支持特性:**
- 自动解析 OpenAPI 3.x 规范
- 智能选择 HTTP 方法和路径
- 自动处理路径参数和查询参数
- 结果自动格式化为表格或文本
#### 5. 错误处理
当 API 地址无效或连接失败时,界面显示清晰的错误提示。

**错误类型:**
- 网络连接失败
- Schema 加载失败
- 认证失败
- 查询执行错误
#### 6. 认证头配置
支持配置认证请求头,用于访问需要认证的 API。

**配置示例:**
```json
{
"Authorization": "Bearer your-token-here",
"X-API-Key": "your-api-key"
}
```
---
## API 文档
### MCP 协议端点
**URL**: `POST /mcp`
**协议**: JSON-RPC 2.0 over Streamable HTTP
### 必需请求头
| 请求头 | 说明 | 示例 |
|--------|------|------|
| `X-Target-URL` | 目标 API 地址 | `https://api.example.com/graphql` |
| `X-API-Type` | API 类型 | `graphql` 或 `rest` |
### 可选请求头
| 请求头 | 说明 | 默认值 |
|--------|------|--------|
| `X-Target-Headers` | 发送给目标 API 的认证头 | `{}` |
| `X-Passthrough-Headers` | 从当前请求透传的头名称 | `[]` |
| `X-Allow-Unsafe-Paths` | 允许的不安全路径模式 | `[]` |
| `X-Base-URL` | REST API 基础 URL 覆盖 | - |
| `X-Include-Result` | 是否在输出中包含完整结果 | `false` |
| `X-Poll-Paths` | 需要轮询的路径 | `[]` |
| `X-Recipe-Learn-Rate` | Recipe 采样率 (0-1) | - |
| `X-Debug` | 调试模式,包含调用链 | `false` |
| `X-API-Name` | 自定义工具名前缀 | 自动从 URL 生成 |
### 工具列表
#### `_query` - 自然语言查询
**描述**: 用自然语言提问关于配置 API 的问题
**参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `question` | string | 是 | 自然语言问题 |
| `return_directly` | boolean | 否 | 直接返回 CSV(默认 false) |
**响应格式**:
```json
{
"ok": true,
"data": "自然语言回答",
"result": [...],
"queries": [...],
"error": null
}
```
### 响应结构
| 字段 | 类型 | 说明 |
|------|------|------|
| `ok` | boolean | 请求是否成功 |
| `data` | string | 自然语言回答 |
| `result` | array | 结构化结果数据 |
| `queries` / `api_calls` | array | API 调用记录 |
| `error` | string | 错误信息(失败时) |
| `debug` | object | 调试信息(X-Debug=true 时) |
---
## 部署指南
### Docker Compose 部署(推荐)
```yaml
services:
api-agent:
build: .
ports:
- "3000:3000"
env_file:
- .env
environment:
- API_AGENT_HOST=0.0.0.0
- API_AGENT_PORT=3000
- API_AGENT_CORS_ALLOWED_ORIGINS=*
volumes:
- ./data:/app/data
- ./api-agent.toml:/app/api-agent.toml:ro
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3000/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
frontend:
image: python:3.11-slim
ports:
- "8080:8080"
volumes:
- ./frontend:/app/frontend:ro
working_dir: /app/frontend
command: python server.py 8080
restart: unless-stopped
depends_on:
- api-agent
```
### 生产环境建议
1. **安全配置**
- 设置具体的 `API_AGENT_CORS_ALLOWED_ORIGINS`,避免使用 `*`
- 使用 HTTPS 反向代理(Nginx/Caddy)
- 配置防火墙规则
2. **性能优化**
- 调整 LLM 超时配置
- 启用 Recipe 学习提升缓存命中率
- 配置适当的并发限制
3. **监控告警**
- 监控 `/health` 端点
- 记录 API 调用日志
- 设置 LLM API 用量告警
---
## 开发指南
### 项目结构
```
api-agent/
├── api_agent/ # 核心后端代码
│ ├── agent/ # GraphQL/REST 代理逻辑
│ ├── tools/ # MCP 工具定义
│ ├── recipe/ # Recipe 学习机制
│ ├── utils/ # 工具函数
│ ├── config.py # 配置管理
│ ├── context.py # 请求上下文
│ ├── middleware.py # 中间件
│ └── query_response.py # 响应封装
├── frontend/ # 前端界面
│ ├── index.html # 单页应用
│ └── server.py # 静态文件服务
├── docs/ # 文档
│ └── screenshots/ # 界面截图
├── tests/ # 测试用例
├── api-agent.toml # 应用配置
├── docker-compose.yml # 容器编排
├── Dockerfile # 容器镜像
└── pyproject.toml # Python 项目配置
```
### 本地开发
```bash
# 1. 安装依赖
uv sync
# 2. 配置环境变量
cp .env.example .env
# 3. 启动后端(开发模式)
uv run python -m api_agent
# 4. 启动前端(另一个终端)
cd frontend
python server.py 8080
```
### 运行测试
```bash
uv run pytest tests/ -v
```
---
## 常见问题
### Q: 支持哪些 LLM 服务?
A: 支持所有兼容 OpenAI API 格式的服务,包括:
- OpenAI GPT-4/GPT-3.5
- DeepSeek
- Azure OpenAI
- 其他兼容服务(通过 `OPENAI_BASE_URL` 配置)
### Q: 如何配置 DeepSeek?
A: 修改 `api-agent.toml` 和 `.env`:
```toml
# api-agent.toml
[model]
api = "chat_completions"
name = "deepseek-chat"
openai_base_url = "https://api.deepseek.com/v1"
```
```env
# .env
OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.deepseek.com/v1
```
### Q: REST API 的 X-Target-URL 应该填什么?
A: 应该填写 OpenAPI 规范 JSON 的 URL,例如:
- `https://petstore3.swagger.io/api/v3/openapi.json`
- `https://api.example.com/openapi.json`
### Q: 如何调试 API 调用?
A: 添加 `X-Debug: true` 请求头,响应中会包含完整的调用链和 trace_id:
```json
{
"ok": true,
"data": "...",
"debug": {
"queries": [...],
"trace_id": "abc123"
}
}
```
### Q: Recipe 学习是什么?
A: Recipe 学习机制会自动采样成功的查询模式,保存为可复用的工具。后续相似查询可直接调用已保存的 Recipe,提升响应速度和准确性。可通过 `X-Recipe-Learn-Rate` 控制采样率。
---
## 许可证
本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。
---
## 贡献指南
欢迎提交 Issue 和 Pull Request!详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
---
问渠那得清如许?为有源头活水来。