Skip to content

Commit 5221790

Browse files
Copilotliuruibin
andcommitted
Add README.md with comprehensive documentation based on the code
Co-authored-by: liuruibin <23045261+liuruibin@users.noreply.github.com>
1 parent f8b9b93 commit 5221790

1 file changed

Lines changed: 236 additions & 0 deletions

File tree

README.md

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
# MaxKB Skill — 智能体路由与调用
2+
3+
> 基于 MaxKB 平台的 Skill,供宿主智能体(LLM)查询已发布智能体列表并按名称发起对话,实现多智能体路由分发。
4+
5+
---
6+
7+
## 目录
8+
9+
- [功能概述](#功能概述)
10+
- [目录结构](#目录结构)
11+
- [环境要求](#环境要求)
12+
- [快速开始](#快速开始)
13+
- [环境变量](#环境变量)
14+
- [工具函数说明](#工具函数说明)
15+
- [list\_agents](#list-agents)
16+
- [chat\_to\_agent](#chat-to-agent)
17+
- [推荐调用流程](#推荐调用流程)
18+
- [API 接口说明](#api-接口说明)
19+
- [错误处理](#错误处理)
20+
21+
---
22+
23+
## 功能概述
24+
25+
本 Skill 提供两个工具函数,配合宿主智能体的 LLM 完成智能路由与调用:
26+
27+
| 函数 | 说明 |
28+
|-------------------|---------------------------------------------------------------|
29+
| `list_agents` | 返回当前工作空间所有**已发布**智能体的名称与描述,供 LLM 选择 |
30+
| `chat_to_agent` | 按 LLM 指定的智能体名称发起对话,返回该智能体的回答 |
31+
32+
---
33+
34+
## 目录结构
35+
36+
```
37+
MaxKB-skills/
38+
├── .env.example # 环境变量示例(复制为 .env 并填写实际值)
39+
├── .gitignore
40+
├── SKILL.md # Skill 快速参考文档
41+
└── scripts/
42+
└── main.py # Skill 核心实现
43+
```
44+
45+
---
46+
47+
## 环境要求
48+
49+
- Python 3.7+
50+
- 可访问的 MaxKB 实例(v1.x)
51+
- (可选)`python-dotenv`:用于自动加载 `.env` 文件
52+
53+
```bash
54+
pip install python-dotenv
55+
```
56+
57+
若未安装,脚本内置了简单的 `.env` 解析,无需额外安装。
58+
59+
---
60+
61+
## 快速开始
62+
63+
### 1. 配置环境变量
64+
65+
复制示例文件并填写实际值:
66+
67+
```bash
68+
cp .env.example .env
69+
```
70+
71+
编辑 `.env`
72+
73+
```env
74+
MAXKB_DOMAIN=http://127.0.0.1:8080
75+
MAXKB_USERNAME=admin
76+
MAXKB_PASSWORD=admin123
77+
MAXKB_WORKSPACE_ID=default
78+
```
79+
80+
> **提示**:用户名/密码与 Token 可同时配置,用户名/密码优先级更高。
81+
82+
### 2. 列出已发布智能体
83+
84+
```bash
85+
python3 scripts/main.py
86+
```
87+
88+
输出示例:
89+
90+
```json
91+
[
92+
{"name": "客服助手", "desc": "处理用户常见问题"},
93+
{"name": "代码助手", "desc": "辅助编写和审查代码"}
94+
]
95+
```
96+
97+
### 3. 向指定智能体提问
98+
99+
```bash
100+
python3 scripts/main.py "Python 里如何读取文件?" "代码助手"
101+
```
102+
103+
输出示例:
104+
105+
```json
106+
{
107+
"agent_name": "代码助手",
108+
"answer": "可以使用内置的 open() 函数来读取文件..."
109+
}
110+
```
111+
112+
---
113+
114+
## 环境变量
115+
116+
| 变量 | 说明 | 默认值 |
117+
|----------------------|-----------------------------------|---------------------------|
118+
| `MAXKB_DOMAIN` | MaxKB 服务地址 | `http://127.0.0.1:8080` |
119+
| `MAXKB_TOKEN` | Bearer Token(管理员 API Key) ||
120+
| `MAXKB_WORKSPACE_ID` | 工作空间 ID | `default` |
121+
| `MAXKB_USERNAME` | 登录用户名(优先于 `MAXKB_TOKEN`||
122+
| `MAXKB_PASSWORD` | 登录密码(优先于 `MAXKB_TOKEN`||
123+
124+
**认证优先级**:若同时配置了 `MAXKB_USERNAME` + `MAXKB_PASSWORD``MAXKB_TOKEN`,系统将使用用户名/密码登录获取 Token,忽略 `MAXKB_TOKEN`
125+
126+
---
127+
128+
## 工具函数说明
129+
130+
### list_agents
131+
132+
返回当前工作空间所有已发布智能体的列表,供 LLM 判断选择合适的智能体。
133+
134+
**函数签名**
135+
136+
```python
137+
list_agents() -> str
138+
```
139+
140+
**返回值**:JSON 字符串,数组中每个元素包含:
141+
142+
| 字段 | 类型 | 说明 |
143+
|--------|--------|--------------|
144+
| `name` | string | 智能体名称 |
145+
| `desc` | string | 智能体描述 |
146+
147+
**返回示例**
148+
149+
```json
150+
[
151+
{"name": "客服助手", "desc": "处理用户常见问题"},
152+
{"name": "代码助手", "desc": "辅助编写和审查代码"}
153+
]
154+
```
155+
156+
---
157+
158+
### chat_to_agent
159+
160+
向指定智能体发起一次对话,返回智能体的回答。
161+
162+
**函数签名**
163+
164+
```python
165+
chat_to_agent(question: str, agent_name: str) -> str
166+
```
167+
168+
**参数**
169+
170+
| 参数 | 类型 | 说明 |
171+
|--------------|--------|--------------------------------------------|
172+
| `question` | string | 用户的问题文本 |
173+
| `agent_name` | string | 由 LLM 从 `list_agents` 结果中选定的名称 |
174+
175+
**返回值**:JSON 字符串,包含:
176+
177+
| 字段 | 类型 | 说明 |
178+
|--------------|--------|--------------------|
179+
| `agent_name` | string | 实际调用的智能体名称 |
180+
| `answer` | string | 智能体的回答内容 |
181+
182+
**返回示例**
183+
184+
```json
185+
{
186+
"agent_name": "客服助手",
187+
"answer": "您好,有什么可以帮助您的?"
188+
}
189+
```
190+
191+
---
192+
193+
## 推荐调用流程
194+
195+
```
196+
用户提问
197+
198+
199+
LLM 调用 list_agents() ← 获取已发布智能体列表
200+
│ 返回 [{"name":..., "desc":...}, ...]
201+
202+
LLM 根据问题内容选出最合适的 agent_name
203+
204+
205+
LLM 调用 chat_to_agent(question, agent_name) ← 发起对话
206+
│ 返回 {"agent_name":..., "answer":...}
207+
208+
将 answer 返回给用户
209+
```
210+
211+
---
212+
213+
## API 接口说明
214+
215+
脚本内部依次调用以下 MaxKB API:
216+
217+
| 步骤 | 方法 | 路径 | 说明 |
218+
|------|------|------|------|
219+
| 1 | POST | `/admin/api/user/login` | 用户名/密码登录,获取 Token |
220+
| 2 | GET | `/admin/api/workspace/{workspace_id}/application/1/100` | 获取智能体列表 |
221+
| 3 | GET | `/admin/api/workspace/{workspace_id}/application/{agent_id}/access_token` | 获取匿名访问 Token |
222+
| 4 | POST | `/chat/api/auth/anonymous` | 创建匿名会话 |
223+
| 5 | GET | `/chat/api/open` | 初始化对话,获取 chat_id |
224+
| 6 | POST | `/chat/api/chat_message/{chat_id}` | 发送消息(SSE 流式响应)|
225+
226+
---
227+
228+
## 错误处理
229+
230+
| 错误场景 | 行为 |
231+
|----------------------------|--------------------------------------------|
232+
| 无已发布智能体 | 抛出 `RuntimeError`,提示工作空间无可用智能体 |
233+
| 智能体名称不存在 | 抛出 `RuntimeError`,列出所有可用智能体名称 |
234+
| HTTP 请求失败(4xx/5xx) | 抛出 `RuntimeError`,包含状态码和响应体 |
235+
| 网络连接失败 | 抛出 `RuntimeError`,包含连接错误信息 |
236+
| 登录失败 | 抛出 `RuntimeError`,包含登录响应内容 |

0 commit comments

Comments
 (0)