---
name: ai-resource-platform
description: 查询、下载与调用AI基座平台的各类AI资源（大模型/智能体/知识库/skill等）。使用场景：(1)需要查询可用的AI资源列表时；(2)需要根据关键字（如"RAG-答案生成"）搜索特定接口时；(3)需要查看某个资源的路由地址和请求参数时；(4)需要下载AI skill文件时；(5)需要基于业务需求选取并调用合适的AI资源时；(6)需要向AI智能体发送消息并获取回复时；(7)需要调用智能体/API资源时。对外API基地址: http://61.243.2.226:9080
---

# AI基座平台资源查询、下载与使用

查询AI基座平台的AI资源，根据业务需求选用、下载和调用。

**⚠️ 重要：所有API都需要先登录获取Token，脚本会自动处理认证。**

## 整体工作流

```
业务需求 → 查询资源列表(按关键字筛选) → 查看资源详情 → 获取资源信息
                                                                   ↓
                                              下载skill(按需) → 安装到本地
                                                                   ↓
                                              调用智能体/API资源 → 获取结果
```

---

## 基本信息

- **认证接口:** `http://61.243.2.226:9080/auth/login` (默认用户: admin / admin123)
- **资源接口基址:** `http://61.243.2.226:9080/ai-resource`
- **认证方式:** `Authorization: Bearer <token>`

## 资源类型

| resourceType | 说明            | 详情中 routeAddress 含义      |
| ------------ | --------------- | ----------------------------- |
| AGENT        | AI Agent 智能体 | 智能体的访问地址 + 路由路径   |
| MODEL        | AI 大模型       | 模型服务地址                  |
| SKILL        | 可下载的技能包  | —                             |
| MCP          | MCP 工具        | —                             |
| PROMPT       | 提示词模板      | —                             |
| KNOWLEDGE    | 知识库资源      | —                             |
| API          | API资源         | API的具体路由路径，可组合调用 |

---

## Step 1: 查询资源列表

**接口:**

```
GET http://61.243.2.226:9080/ai-resource/resources/list
Authorization: Bearer <token>
```

**用法:** 先用接口描述中包含的关键字搜索资源。例如用户需要"答案生成能力"时，用关键字 `答案` 搜索。查询列表后获取每条资源的 `resourceId` 和 `resourceType`，用于下一步查询详情。

**脚本:**

```bash
# 查询所有资源
python scripts/query_resource.py list

# 按关键字过滤（基于返回的description筛选）
python scripts/query_resource.py list | grep -i "关键字"
```

**返回示例**:

```json
{
  "code": 200000,
  "message": "success",
  "data": [
    { "id": 7, "resourceId": "7", "resourceType": "AGENT",
      "resourceTypeName": "Agent资源", "name": "xxx",
      "code": "agent_xxx", "description": "xxx" },
    ...
  ]
}
```

> **重要:** 从返回结果中提取 `resourceId` 和 `resourceType`，用于下一步查询详情。

---

## Step 2: 查询资源详情

**接口:**

```
GET http://61.243.2.226:9080/ai-resource/resources/detail?resourceType=<type>&resourceId=<id>
Authorization: Bearer <token>
```

**脚本:**

```bash
# 查询AGENT类型资源的详情
python scripts/query_resource.py detail --type AGENT --id 7
```

**返回示例**:

```json
{
  "code": 200000,
  "data": {
    "id": 7,
    "resourceId": "7",
    "resourceType": "AGENT",
    "name": "测试Agent",
    "code": "agent_xxx",
    "description": "",
    "routePath": null,
    "routeAddress": "http://127.0.0.1:9080",
    "paramsConfig": [],
    "status": 1,
    "createdAt": "2026-04-17 09:39:01",
    "updatedAt": "2026-04-17 09:39:01"
  }
}
```

详情中最关键的信息：

| 字段           | 说明                                                              |
| -------------- | ----------------------------------------------------------------- |
| `routeAddress` | 资源的访问地址（可能包含完整URL或路由路径）                       |
| `routePath`    | 资源的独立路由路径                                                |
| `paramsConfig` | 调用时需要的参数定义（paramType, paramKey, paramValue, required） |
| `status`       | 资源状态（0=未启用, 1=已启用, 2=已停用）                          |

---

## Step 3: 调用资源

获取到 `routeAddress` 和 `paramsConfig` 后调用该资源。

### 通用调用格式

```powershell
# 根据 paramsConfig 构造请求参数
# paramType: header → 放入请求头, query → 放入 URL 查询参数, body → 放入请求体

$login = Invoke-RestMethod -Uri "http://61.243.2.226:9080/auth/login" -Method POST `
  -ContentType "application/json" -Body '{"username":"admin","password":"admin123"}'
$token = $login.data.token
$headers = @{Authorization="Bearer $token"}

# 根据 paramsConfig 设置额外请求头
foreach ($param in $detail.data.paramsConfig) {
  if ($param.paramType -eq "header") { $headers[$param.paramKey] = $param.paramValue }
}

# 构造 URL 查询参数
$queryParts = @()
foreach ($param in $detail.data.paramsConfig) {
  if ($param.paramType -eq "query") { $queryParts += "$($param.paramKey)=$([System.Web.HttpUtility]::UrlEncode($param.paramValue))" }
}
$queryString = if ($queryParts) { "?" + ($queryParts -join "&") } else { "" }

# 发送请求
$url = "http://61.243.2.226:9080$($detail.data.routeAddress)$queryString"
$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
```

---

## Step 4: 下载AI Skill

查询到的资源如果是 skill 类型，可以通过以下接口下载。

**接口:**

```
GET http://61.243.2.226:9080/ai-resource/api/market/skills/{skillId}/download
Authorization: Bearer <token>
```

**脚本:**

```bash
# 下载skill
python scripts/query_resource.py download --skill-id 9

# 指定保存路径
python scripts/query_resource.py download --skill-id 9 --output ./skills/

# 直接安装到本地 skills 目录
python scripts/query_resource.py install --install-path ./skill_9.skill
python scripts/query_resource.py install --install-path ./skill_9.skill --install-name my-skill
```

---

## Step 5: 调用AI智能体完整流程

**核心理解：智能体是以 API 形式在平台上暴露的。** 查询资源列表时查的是 `resourceType=API` 的资源，查询详情也是查 API 类型的详情。

```
┌──────────────────────────────────────────────────────────┐
│  Step 5.1: 查询 API 资源列表                              │
│  → 调用 /ai-resource/resources/list                      │
│  → 筛选 resourceType="API" 的资源                          │
│  → 找到聊天发送类 API（名称/描述含"发送""chat"等关键字）    │
└──────────────────────────┬───────────────────────────────┘
                           ↓
┌──────────────────────────────────────────────────────────┐
│  Step 5.2: 查询 API 资源详情 → 获取路由和参数              │
│  → 调用 /ai-resource/resources/detail?resourceType=API    │
│  → 从 routePath 获取接口路径                                │
│  → 从 paramsConfig 提取：                                 │
│    - applicationId（智能体应用ID）                         │
│    - uid（用户标识）                                       │
│    - flag、files 等固定参数                                │
└──────────────────────────┬───────────────────────────────┘
                           ↓
┌──────────────────────────────────────────────────────────┐
│  Step 5.3: 调用智能体发送请求                              │
│  → 根据 paramsConfig 构造请求（paramType决定参数位置）      │
│  → header参数放请求头，query参数放 URL                     │
│  → 传入 input（用户问题）                                  │
│  → 调用 routePath 指定的接口                               │
│  → 获取返回的 jobId                                        │
└──────────────────────────┬───────────────────────────────┘
                           ↓
┌──────────────────────────────────────────────────────────┐
│  Step 5.4: 轮询获取智能体回复内容                          │
│  → 用 jobId 查询回复结果接口                               │
│  → 持续轮询直到返回完整回复内容                             │
└──────────────────────────┬───────────────────────────────┘
                           ↓
┌──────────────────────────────────────────────────────────┐
│  Step 5.5: 展示回复内容                                   │
│  → 解析回复数据，提取最终回答                              │
│  → 展示给用户                                             │
└──────────────────────────────────────────────────────────┘
```

### Step 5.1: 查询 API 资源列表 → 找到智能体相关接口

**每次调用前都需要先登录获取 Token。** 从资源列表中筛选 `resourceType="API"` 的资源，找到聊天发送相关的接口（名称/描述中包含"发送""chat""智能体"等关键字）。

```powershell
# 1. 登录
$login = Invoke-RestMethod -Uri "http://61.243.2.226:9080/auth/login" -Method POST `
  -ContentType "application/json" -Body '{"username":"admin","password":"admin123"}'
$token = $login.data.token
$headers = @{Authorization="Bearer $token"}

# 2. 查询所有资源列表
$list = Invoke-RestMethod -Uri "http://61.243.2.226:9080/ai-resource/resources/list" `
  -Method GET -Headers $headers

# 3. 筛选 API 类型的资源
$apis = $list.data | Where-Object { $_.resourceType -eq "API" }

# 4. 找到智能体聊天接口（根据名称/描述中的关键字匹配）
$chatApi = $apis | Where-Object {
  $_.name -match "发送" -or $_.code -match "send" -or $_.description -match "chat"
}
Write-Host "找到智能体API: ID=$($chatApi.resourceId) 名称=$($chatApi.name)"
```

### Step 5.2: 查询 API 资源详情 → 获取路由和参数配置

对上一步找到的 API 调用详情接口，获取 `routePath` 和 `paramsConfig`。

```powershell
# 查询 API 资源详情
$chatDetail = Invoke-RestMethod -Uri "http://61.243.2.226:9080/ai-resource/resources/detail?resourceType=API&resourceId=$($chatApi.resourceId)" `
  -Method GET -Headers $headers
$config = $chatDetail.data

Write-Host "接口路径: $($config.routePath)"
Write-Host "参数配置:"
$config.paramsConfig | Format-Table paramKey, paramType, paramValue, required

# 从 paramsConfig 中提取关键参数
$appId = ($config.paramsConfig | Where-Object { $_.paramKey -eq "applicationId" }).paramValue
$uid = ($config.paramsConfig | Where-Object { $_.paramKey -eq "uid" }).paramValue
$flag = ($config.paramsConfig | Where-Object { $_.paramKey -eq "flag" }).paramValue
Write-Host "applicationId: $appId"
Write-Host "uid: $uid"
```

> **注意：** 每次查询详情前都要确保 token 有效。如果 token 过期，需要重新登录获取。

### Step 5.3: 调用智能体发送请求 → 获取 jobId

根据 `paramsConfig` 中每个参数的 `paramType` 决定参数位置：

- `paramType=header` → 放入请求头
- `paramType=query` → 放入 URL 查询参数
- `paramType=body` → 放入请求体

将 `input`（用户问题）加入请求参数中。

```powershell
# 构造请求头（包含 Authorization + uid 等 header 参数）
$chatHeaders = @{Authorization="Bearer $token"}
$queryParams = @{}

foreach ($p in $config.paramsConfig) {
  if ($p.paramType -eq "header") {
    $chatHeaders[$p.paramKey] = $p.paramValue
  }
  elseif ($p.paramType -eq "query") {
    $queryParams[$p.paramKey] = $p.paramValue
  }
}

# 设置用户问题
$queryParams["input"] = "你好，请介绍一下你自己"

# 构造完整 URL
$queryString = ($queryParams.GetEnumerator() | ForEach-Object {
  "$($_.Key)=$([System.Web.HttpUtility]::UrlEncode($_.Value))
}) -join "&"
$uri = "http://61.243.2.226:9080$($config.routePath)?$queryString"

# 根据 paramsConfig 决定请求方法（POST 或 GET）
$response = Invoke-RestMethod -Uri $uri -Method POST -ContentType "application/json" -Headers $chatHeaders

# 提取 jobId（根据实际返回结构调整）
$jobId = if ($response.data.jobId) { $response.data.jobId }
         elseif ($response.jobId) { $response.jobId }
         elseif ($response.data.id) { $response.data.id }
         else { $null }
Write-Host "获取到 jobId: $jobId"
```

### Step 5.4: 轮询获取智能体回复内容

1. 用 `jobId` 查询智能体回复结果接口（需要在 API 资源列表中查找结果查询接口）
2. 循环轮询（每2秒一次）
3. 直到返回最终回复内容

```powershell
# 在 API 列表中查找结果查询接口（名称含"结果""result""reply"等）
$resultApi = $apis | Where-Object {
  $_.name -match "结果" -or $_.code -match "result" -or $_.code -match "reply" -or $_.description -match "reply"
}
$resultDetail = Invoke-RestMethod -Uri "http://61.243.2.226:9080/ai-resource/resources/detail?resourceType=API&resourceId=$($resultApi.resourceId)" `
  -Method GET -Headers $headers

# 轮询
$resultUri = "http://61.243.2.226:9080$($resultDetail.data.routePath)?jobId=$jobId"
$maxRetries = 30
for ($i = 0; $i -lt $maxRetries; $i++) {
  try {
    $result = Invoke-RestMethod -Uri $resultUri -Method GET -Headers @{Authorization="Bearer $token"}
    $resData = if ($result.data) { $result.data } else { $result }
    $content = $resData.content -or $resData.answer -or $resData.reply -or $resData.message -or $resData.output
    if ($content) {
      Write-Host "回复就绪!"
      break
    }
  } catch {
    # 202/204 表示还在处理中
  }
  Start-Sleep -Seconds 2
}
```

### Step 5.5: 展示回复内容

```powershell
Write-Host "`n===== 智能体回复 ====="
Write-Host $content
```

---

## 常见智能体参数速查

以下是从平台 API 资源配置中提取的实际参数示例：

| 参数名          | 类型   | 说明         | 示例值                                |
| --------------- | ------ | ------------ | ------------------------------------- |
| `applicationId` | query  | 智能体应用ID | `s1gjLSit18Eof59u`                    |
| `uid`           | header | 用户标识     | `8beefc3-5668-4e02-b2bf-ebddd1a48c6e` |
| `flag`          | query  | 标识         | `ai-core`                             |
| `input`         | query  | 用户问题     | 任意文本                              |
| `files`         | query  | 附件         | `""`                                  |

> 实际参数值以 `detail` 接口返回的 `paramsConfig` 为准，智能体不同参数值会不同。

---

## 常用接口速查

| 用途             | HTTP | 路径                                                            |
| ---------------- | ---- | --------------------------------------------------------------- |
| 登录获取Token    | POST | `/auth/login`                                                   |
| 查询所有资源列表 | GET  | `/ai-resource/resources/list`                                   |
| 查询资源详情     | GET  | `/ai-resource/resources/detail?resourceType=xxx&resourceId=xxx` |
| 下载Skill包      | GET  | `/ai-resource/api/market/skills/{skillId}/download`             |
| 发送智能体消息   | POST | `/chat/send` (需从API资源详情中获取)                            |
| 查询智能体回复   | GET  | `/chat/result?jobId=xxx` (需从API资源详情中获取)                |

---

## 脚本参考

### `scripts/query_resource.py`

| 操作                 | 命令                                                                    | 说明             |
| -------------------- | ----------------------------------------------------------------------- | ---------------- |
| login                | `python scripts/query_resource.py login`                                | 登录并显示Token  |
| list                 | `python scripts/query_resource.py list`                                 | 查询全部资源     |
| detail               | `python scripts/query_resource.py detail -t 类型 -i ID`                 | 查详情           |
| download             | `python scripts/query_resource.py download --skill-id ID`               | 下载skill文件    |
| install              | `python scripts/query_resource.py install --install-path 文件路径`      | 安装.skill到本地 |
| detail+auto-download | `python scripts/query_resource.py detail -t 类型 -i ID --auto-download` | 查详情后自动下载 |

### 直接调用API（不使用脚本时）

```bash
# 登录获取Token
TOKEN=$(curl -s -X POST "http://61.243.2.226:9080/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin123"}' | python -c "import sys,json; print(json.load(sys.stdin)['data']['token'])")

# 查询资源列表
curl -s -H "Authorization: Bearer $TOKEN" \
  "http://61.243.2.226:9080/ai-resource/resources/list"

# 查询资源详情
curl -s -H "Authorization: Bearer $TOKEN" \
  "http://61.243.2.226:9080/ai-resource/resources/detail?resourceType=AGENT&resourceId=10"

# 下载skill
curl -s -o skill.skill -H "Authorization: Bearer $TOKEN" \
  "http://61.243.2.226:9080/ai-resource/api/market/skills/9/download"
```

---

## 关键原则

1. **登录Token是通行证** - 所有请求前先通过 `/auth/login` 获取Token
2. **先筛选后详情** - 先用资源列表找到目标，再逐个查看详情
3. **提取 applicationId 和 uid** - 调用智能体时需要这两个参数
4. **参数类型决定位置** - header参数放请求头，query参数放 URL
5. **智能体调用是异步的** - 调用后拿 jobId，轮询获取结果
6. **skill按需下载安装** - 遇到skill类型资源时可下载安装到本地
