mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-10-31 04:45:23 +08:00
* 重构文档结构:移除 docs 目录,调整文件组织结构 * Reorder "插件 SDK API" section in docs.json * Refactor and clarify various documentation sections * Refine warnings and info boxes across multiple docs * Refactor and simplify Japanese documentation content * Update package.json to include mintlify as a dependency and add pnpm-lock.yaml for dependency management * Update blog link and add description in docs.json --------- Co-authored-by: Junyan Chin <[email protected]>
310 lines
7.7 KiB
Plaintext
310 lines
7.7 KiB
Plaintext
---
|
|
title: "插件通用 API"
|
|
---
|
|
|
|
LangBot 为插件提供了一系列 API ,用于操作 LangBot 各个模块、控制消息上下文等。
|
|
|
|
## 请求 API
|
|
|
|
操作当前正在处理的用户请求(消息)。仅在`EventListener`和`Command`组件中可用。访问方式如下:
|
|
|
|
- `EventListener` 的各个事件处理器方法中:`event_context: context.EventContext`对象内部方法
|
|
- `Command` 的各个子命令处理器方法中:`context: ExecuteContext`对象内部方法
|
|
|
|
### 直接回复消息
|
|
|
|
直接回复一个消息链到当前请求所在会话。
|
|
|
|
消息链构造方式请参考[消息平台实体](/zh/plugin/dev/apis/messages)。
|
|
|
|
```python
|
|
async def reply(
|
|
self, message_chain: platform_message.MessageChain, quote_origin: bool = False
|
|
):
|
|
"""Reply to the message request
|
|
|
|
Args:
|
|
message_chain (platform.types.MessageChain): LangBot message chain
|
|
quote_origin (bool): Whether to quote the original message
|
|
"""
|
|
|
|
# 调用示例
|
|
await event_context.reply(
|
|
platform_message.MessageChain([
|
|
platform_message.Plain(text="Hello, world!"),
|
|
]),
|
|
)
|
|
```
|
|
|
|
### 获取机器人 UUID
|
|
|
|
获取当前请求来源机器人 UUID。
|
|
|
|
```python
|
|
async def get_bot_uuid(self) -> str:
|
|
"""Get the bot uuid"""
|
|
|
|
# 调用示例
|
|
bot_uuid = await event_context.get_bot_uuid()
|
|
```
|
|
|
|
### 设置请求变量
|
|
|
|
单次请求中某些信息会被存储到请求变量中,在使用 Dify 等外部 LLMOps 平台时,[这些变量会显式传入 LLMOps 平台](/zh/deploy/pipelines/readme.html#%E8%AF%B7%E6%B1%82%E5%8F%98%E9%87%8F)。
|
|
|
|
```python
|
|
async def set_query_var(self, key: str, value: Any):
|
|
"""Set a query variable"""
|
|
|
|
# 调用示例
|
|
await event_context.set_query_var("key", "value")
|
|
```
|
|
|
|
### 获取请求变量
|
|
|
|
获取单个请求变量。
|
|
|
|
```python
|
|
async def get_query_var(self, key: str) -> Any:
|
|
"""Get a query variable"""
|
|
|
|
# 调用示例
|
|
query_var = await event_context.get_query_var("key")
|
|
```
|
|
|
|
### 获取所有请求变量
|
|
|
|
```python
|
|
async def get_query_vars(self) -> dict[str, Any]:
|
|
"""Get all query variables"""
|
|
|
|
# 调用示例
|
|
query_vars = await event_context.get_query_vars()
|
|
```
|
|
|
|
## LangBot API
|
|
|
|
这些 API 可在插件任何组件中调用。访问方式如下:
|
|
|
|
- 插件根目录`main.py`中:`self` 对象内部方法,这些 API 均由插件类父类 `BasePlugin` 提供。
|
|
- 插件任何组件类中:`self.plugin` 对象内部方法。
|
|
|
|
### 获取插件配置信息
|
|
|
|
插件配置格式可在`manifest.yaml`中编写,用户需要在 LangBot 的插件管理中按照插件配置格式填写。之后插件代码可以调用此 API 获取插件配置信息。
|
|
|
|
```python
|
|
def get_config(self) -> dict[str, typing.Any]:
|
|
"""Get the config of the plugin."""
|
|
|
|
# 调用示例
|
|
config = self.plugin.get_config()
|
|
```
|
|
|
|
### 获取 LangBot 版本
|
|
|
|
获取 LangBot 版本号,返回格式为字符串`v<major>.<minor>.<patch>`。
|
|
|
|
```python
|
|
async def get_langbot_version(self) -> str:
|
|
"""Get the langbot version"""
|
|
|
|
# 调用示例
|
|
langbot_version = await self.plugin.get_langbot_version()
|
|
```
|
|
|
|
### 获取已配置的机器人列表
|
|
|
|
返回由所有机器人 UUID 组成的列表。
|
|
|
|
```python
|
|
async def get_bots(self) -> list[str]:
|
|
"""Get all bots"""
|
|
|
|
# 调用示例
|
|
bots = await self.plugin.get_bots()
|
|
```
|
|
|
|
### 获取机器人信息
|
|
|
|
获取机器人信息。
|
|
|
|
```python
|
|
async def get_bot_info(self, bot_uuid: str) -> dict[str, Any]:
|
|
"""Get a bot info"""
|
|
|
|
# 调用示例
|
|
bot_info = await self.plugin.get_bot_info("de639861-be05-4018-859b-c2e2d3e0d603")
|
|
|
|
# 返回示例
|
|
{
|
|
"uuid": "de639861-be05-4018-859b-c2e2d3e0d603",
|
|
"name": "aiocqhttp",
|
|
"description": "由 LangBot v3 迁移而来",
|
|
"adapter": "aiocqhttp",
|
|
"enable": true,
|
|
"use_pipeline_name": "ChatPipeline",
|
|
"use_pipeline_uuid": "c30a1dca-e91c-452b-83ec-84d635a30028",
|
|
"created_at": "2025-05-10T13:53:08",
|
|
"updated_at": "2025-08-12T11:27:30",
|
|
"adapter_runtime_values": { # 若该机器人正在运行中,则具有该字段
|
|
"bot_account_id": 960164003 # 机器人账号 ID
|
|
}
|
|
}
|
|
```
|
|
|
|
### 发送主动消息
|
|
|
|
通过机器人 UUID 和目标会话 ID 发送主动消息。
|
|
|
|
消息链构造方式请参考[消息平台实体](/zh/plugin/dev/apis/messages)。
|
|
|
|
```python
|
|
async def send_message(
|
|
self,
|
|
bot_uuid: str,
|
|
target_type: str,
|
|
target_id: str,
|
|
message_chain: platform_message.MessageChain,
|
|
) -> None:
|
|
"""Send a message to a session"""
|
|
|
|
# 调用示例
|
|
await self.plugin.send_message(
|
|
bot_uuid="de639861-be05-4018-859b-c2e2d3e0d603",
|
|
target_type="person",
|
|
target_id="1010553892",
|
|
message_chain=platform_message.MessageChain([platform_message.Plain(text="Hello, world!")]),
|
|
)
|
|
```
|
|
|
|
### 获取已配置的 LLM 模型列表
|
|
|
|
返回由所有已配置的 LLM 模型 UUID 组成的列表。
|
|
|
|
```python
|
|
async def get_llm_models(self) -> list[str]:
|
|
"""Get all LLM models"""
|
|
|
|
# 调用示例
|
|
llm_models = await self.plugin.get_llm_models()
|
|
```
|
|
|
|
### 调用 LLM 模型
|
|
|
|
调用 LLM 模型,返回 LLM 消息。非流式。
|
|
|
|
```python
|
|
async def invoke_llm(
|
|
self,
|
|
llm_model_uuid: str,
|
|
messages: list[provider_message.Message],
|
|
funcs: list[resource_tool.LLMTool] = [],
|
|
extra_args: dict[str, Any] = {},
|
|
) -> provider_message.Message:
|
|
"""Invoke an LLM model"""
|
|
|
|
# 调用示例
|
|
llm_message = await self.plugin.invoke_llm(
|
|
llm_model_uuid="llm_model_uuid",
|
|
messages=[provider_message.Message(role="user", content="Hello, world!")],
|
|
funcs=[],
|
|
extra_args={},
|
|
)
|
|
```
|
|
|
|
### 设置插件持久化数据
|
|
|
|
持久化存储插件数据。通过这个接口存储的数据,仅可被该插件访问。值需要自行转换为字节。
|
|
|
|
```python
|
|
async def set_plugin_storage(self, key: str, value: bytes) -> None:
|
|
"""Set a plugin storage value"""
|
|
|
|
# 调用示例
|
|
await self.plugin.set_plugin_storage("key", b"value")
|
|
```
|
|
|
|
### 获取插件持久化数据
|
|
|
|
```python
|
|
async def get_plugin_storage(self, key: str) -> bytes:
|
|
"""Get a plugin storage value"""
|
|
|
|
# 调用示例
|
|
plugin_storage = await self.plugin.get_plugin_storage("key")
|
|
```
|
|
|
|
### 获取插件所有持久化数据键
|
|
|
|
```python
|
|
async def get_plugin_storage_keys(self) -> list[str]:
|
|
"""Get all plugin storage keys"""
|
|
|
|
# 调用示例
|
|
plugin_storage_keys = await self.plugin.get_plugin_storage_keys()
|
|
```
|
|
|
|
### 删除插件持久化数据
|
|
|
|
```python
|
|
async def delete_plugin_storage(self, key: str) -> None:
|
|
"""Delete a plugin storage value"""
|
|
|
|
# 调用示例
|
|
await self.plugin.delete_plugin_storage("key")
|
|
```
|
|
|
|
### 获取工作空间持久化数据
|
|
|
|
通过这个接口存储的数据,可被所有插件访问。值需要自行转换为字节。
|
|
|
|
```python
|
|
async def set_workspace_storage(self, key: str, value: bytes) -> None:
|
|
"""Set a workspace storage value"""
|
|
|
|
# 调用示例
|
|
await self.plugin.set_workspace_storage("key", b"value")
|
|
```
|
|
|
|
### 获取工作空间持久化数据
|
|
|
|
```python
|
|
async def get_workspace_storage(self, key: str) -> bytes:
|
|
"""Get a workspace storage value"""
|
|
|
|
# 调用示例
|
|
workspace_storage = await self.plugin.get_workspace_storage("key")
|
|
```
|
|
|
|
### 获取工作空间所有持久化数据键
|
|
|
|
```python
|
|
async def get_workspace_storage_keys(self) -> list[str]:
|
|
"""Get all workspace storage keys"""
|
|
|
|
# 调用示例
|
|
workspace_storage_keys = await self.plugin.get_workspace_storage_keys()
|
|
```
|
|
|
|
### 删除工作空间持久化数据
|
|
|
|
```python
|
|
async def delete_workspace_storage(self, key: str) -> None:
|
|
"""Delete a workspace storage value"""
|
|
|
|
# 调用示例
|
|
await self.plugin.delete_workspace_storage("key")
|
|
```
|
|
|
|
### 获取插件配置项文件数据
|
|
|
|
```python
|
|
async def get_config_file(self, file_key: str) -> bytes:
|
|
"""Get a config file value"""
|
|
|
|
# 调用示例
|
|
file_bytes = await self.plugin.get_config_file("key")
|
|
```
|
|
|
|
请结合 [``file 或 array[file] 类型配置项``](/zh/plugin/dev/basic-info.html#type-file)使用。 |