Skip to content

Commit 12aa316

Browse files
committed
feat: add Tool registration instructions and usage examples in AI guide
1 parent c99e251 commit 12aa316

File tree

1 file changed

+77
-41
lines changed

1 file changed

+77
-41
lines changed

zh/dev/star/guides/ai.md

Lines changed: 77 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,42 @@ class BilibiliTool(FunctionTool[AstrAgentContext]):
6666
return "1. 视频标题:如何使用AstrBot\n视频链接:xxxxxx"
6767
```
6868

69+
## 注册 Tool 到 AstrBot
70+
71+
在上面定义好 Tool 之后,如果你需要实现的功能是让用户在使用 AstrBot 进行对话时自动调用该 Tool,那么你需要在插件的 __init__ 方法中将 Tool 注册到 AstrBot 中:
72+
73+
```py
74+
class MyPlugin(Star):
75+
def __init__(self, context: Context):
76+
super().__init__(context)
77+
# >= v4.5.1 使用:
78+
self.context.add_llm_tools(BilibiliTool(), SecondTool(), ...)
79+
80+
# < v4.5.1 之前使用:
81+
tool_mgr = self.context.provider_manager.llm_tools
82+
tool_mgr.func_list.append(BilibiliTool())
83+
```
84+
85+
### 通过装饰器定义 Tool 和注册 Tool
86+
87+
除了上述的通过 `@dataclass` 定义 Tool 的方式之外,你也可以使用装饰器的方式注册 tool 到 AstrBot。如果请务必按照以下格式编写一个工具(包括函数注释,AstrBot 会解析该函数注释,请务必将注释格式写对)
88+
89+
```py{3,4,5,6,7}
90+
@filter.llm_tool(name="get_weather") # 如果 name 不填,将使用函数名
91+
async def get_weather(self, event: AstrMessageEvent, location: str) -> MessageEventResult:
92+
'''获取天气信息。
93+
94+
Args:
95+
location(string): 地点
96+
'''
97+
resp = self.get_weather_from_api(location)
98+
yield event.plain_result("天气信息: " + resp)
99+
```
100+
101+
`location(string): 地点` 中,`location` 是参数名,`string` 是参数类型,`地点` 是参数描述。
102+
103+
支持的参数类型有 `string`, `number`, `object`, `boolean`, `array`。在 v4.5.7 之后,支持对 `array` 类型参数指定子类型,例如 `array[string]`
104+
69105
## 调用 Agent
70106

71107
> [!TIP]
@@ -316,78 +352,78 @@ await conv_mgr.add_message_pair(
316352

317353
#### `new_conversation`
318354

319-
- **Usage**
355+
- __Usage__
320356
在当前会话中新建一条对话,并自动切换为该对话。
321-
- **Arguments**
357+
- __Arguments__
322358
- `unified_msg_origin: str` – 形如 `platform_name:message_type:session_id`
323359
- `platform_id: str | None` – 平台标识,默认从 `unified_msg_origin` 解析
324360
- `content: list[dict] | None` – 初始历史消息
325361
- `title: str | None` – 对话标题
326362
- `persona_id: str | None` – 绑定的 persona ID
327-
- **Returns**
363+
- __Returns__
328364
`str` – 新生成的 UUID 对话 ID
329365

330366
#### `switch_conversation`
331367

332-
- **Usage**
368+
- __Usage__
333369
将会话切换到指定的对话。
334-
- **Arguments**
370+
- __Arguments__
335371
- `unified_msg_origin: str`
336372
- `conversation_id: str`
337-
- **Returns**
373+
- __Returns__
338374
`None`
339375

340376
#### `delete_conversation`
341377

342-
- **Usage**
378+
- __Usage__
343379
删除会话中的某条对话;若 `conversation_id``None`,则删除当前对话。
344-
- **Arguments**
380+
- __Arguments__
345381
- `unified_msg_origin: str`
346382
- `conversation_id: str | None`
347-
- **Returns**
383+
- __Returns__
348384
`None`
349385

350386
#### `get_curr_conversation_id`
351387

352-
- **Usage**
388+
- __Usage__
353389
获取当前会话正在使用的对话 ID。
354-
- **Arguments**
390+
- __Arguments__
355391
- `unified_msg_origin: str`
356-
- **Returns**
392+
- __Returns__
357393
`str | None` – 当前对话 ID,不存在时返回 `None`
358394

359395
#### `get_conversation`
360396

361-
- **Usage**
397+
- __Usage__
362398
获取指定对话的完整对象;若不存在且 `create_if_not_exists=True` 则自动创建。
363-
- **Arguments**
399+
- __Arguments__
364400
- `unified_msg_origin: str`
365401
- `conversation_id: str`
366402
- `create_if_not_exists: bool = False`
367-
- **Returns**
403+
- __Returns__
368404
`Conversation | None`
369405

370406
#### `get_conversations`
371407

372-
- **Usage**
408+
- __Usage__
373409
拉取用户或平台下的全部对话列表。
374-
- **Arguments**
410+
- __Arguments__
375411
- `unified_msg_origin: str | None` – 为 `None` 时不过滤用户
376412
- `platform_id: str | None`
377-
- **Returns**
413+
- __Returns__
378414
`List[Conversation]`
379415

380416
#### `update_conversation`
381417

382-
- **Usage**
418+
- __Usage__
383419
更新对话的标题、历史记录或 persona_id。
384-
- **Arguments**
420+
- __Arguments__
385421
- `unified_msg_origin: str`
386422
- `conversation_id: str | None` – 为 `None` 时使用当前对话
387423
- `history: list[dict] | None`
388424
- `title: str | None`
389425
- `persona_id: str | None`
390-
- **Returns**
426+
- __Returns__
391427
`None`
392428

393429
## 人格设定管理器
@@ -403,67 +439,67 @@ persona_mgr = self.context.persona_manager
403439

404440
#### `get_persona`
405441

406-
- **Usage**
442+
- __Usage__
407443
获取根据人格 ID 获取人格数据。
408-
- **Arguments**
444+
- __Arguments__
409445
- `persona_id: str` – 人格 ID
410-
- **Returns**
446+
- __Returns__
411447
`Persona` – 人格数据,若不存在则返回 None
412-
- **Raises**
448+
- __Raises__
413449
`ValueError` – 当不存在时抛出
414450

415451
#### `get_all_personas`
416452

417-
- **Usage**
453+
- __Usage__
418454
一次性获取数据库中所有人格。
419-
- **Returns**
455+
- __Returns__
420456
`list[Persona]` – 人格列表,可能为空
421457

422458
#### `create_persona`
423459

424-
- **Usage**
460+
- __Usage__
425461
新建人格并立即写入数据库,成功后自动刷新本地缓存。
426-
- **Arguments**
462+
- __Arguments__
427463
- `persona_id: str` – 新人格 ID(唯一)
428464
- `system_prompt: str` – 系统提示词
429465
- `begin_dialogs: list[str]` – 可选,开场对话(偶数条,user/assistant 交替)
430466
- `tools: list[str]` – 可选,允许使用的工具列表;`None`=全部工具,`[]`=禁用全部
431-
- **Returns**
467+
- __Returns__
432468
`Persona` – 新建后的人格对象
433-
- **Raises**
469+
- __Raises__
434470
`ValueError` – 若 `persona_id` 已存在
435471

436472
#### `update_persona`
437473

438-
- **Usage**
474+
- __Usage__
439475
更新现有人格的任意字段,并同步到数据库与缓存。
440-
- **Arguments**
476+
- __Arguments__
441477
- `persona_id: str` – 待更新的人格 ID
442478
- `system_prompt: str` – 可选,新的系统提示词
443479
- `begin_dialogs: list[str]` – 可选,新的开场对话
444480
- `tools: list[str]` – 可选,新的工具列表;语义同 `create_persona`
445-
- **Returns**
481+
- __Returns__
446482
`Persona` – 更新后的人格对象
447-
- **Raises**
483+
- __Raises__
448484
`ValueError` – 若 `persona_id` 不存在
449485

450486
#### `delete_persona`
451487

452-
- **Usage**
488+
- __Usage__
453489
删除指定人格,同时清理数据库与缓存。
454-
- **Arguments**
490+
- __Arguments__
455491
- `persona_id: str` – 待删除的人格 ID
456-
- **Raises**
492+
- __Raises__
457493
`Valueable` – 若 `persona_id` 不存在
458494

459495
#### `get_default_persona_v3`
460496

461-
- **Usage**
497+
- __Usage__
462498
根据当前会话配置,获取应使用的默认人格(v3 格式)。
463499
若配置未指定或指定的人格不存在,则回退到 `DEFAULT_PERSONALITY`
464-
- **Arguments**
500+
- __Arguments__
465501
- `umo: str | MessageSession | None` – 会话标识,用于读取用户级配置
466-
- **Returns**
502+
- __Returns__
467503
`Personality` – v3 格式的默认人格对象
468504

469505
::: details Persona / Personality 类型定义

0 commit comments

Comments
 (0)