LangBot Docs

上下文 API

上下文保存当前一次组件调用的数据。不同组件接收的上下文不同,请先按组件找到对应入口。

组件处理函数入口上下文类型
EventListenerhandler(event_context)EventContext
Commandsubcommand(context)ExecuteContext
Toolcall(params, session, query_id)无独立上下文对象
运行器run(ctx)handler(ctx)RunnerContext
KnowledgeEngineingest(context)retrieve(context)IngestionContextRetrievalContext
KnowledgeRetrieverretrieve(context)RetrievalContext
Parserparse(context)ParseContext
Pagehandle_api(request)PageRequest

本页只介绍上下文中的数据和方法。模型、知识库、存储等 LangBot 能力统一通过 self.plugin 调用,见 LangBot API;平台操作见平台 API

EventContextExecuteContextSession 还会携带 instance_uuidworkspace_uuidplacement_generation。这些字段用于标识当前执行所在的实例和工作区,不应作为插件自行鉴权的依据。

EventListener

EventListener 处理流水线事件。事件处理函数接收 EventContext

event = event_context.event
sender_id = event.sender_id

上下文数据

属性类型说明
eventBaseEventModel当前事件对象,实际类型与注册的事件类型一致
event_namestr当前事件类名
query_idint当前流水线请求 ID
query_uuidstr | None当前流水线请求的稳定标识
eidintPlugin Runtime 内的临时事件编号,不应持久化
is_prevent_defaultbool是否已阻止默认处理;通过 prevent_default() 修改
is_prevent_postorderbool是否已阻止后续插件;通过 prevent_postorder() 修改

事件对象的字段和所有可监听事件见流水线事件

上下文方法

方法返回值说明
await event_context.reply(message_chain, quote_origin=False)-回复当前请求所在会话
await event_context.get_bot_uuid()str获取当前请求来源机器人 UUID
await event_context.set_query_var(key, value)-设置当前请求变量
await event_context.get_query_var(key)Any获取一个请求变量
await event_context.get_query_vars()dict[str, Any]获取全部请求变量
await event_context.create_new_conversation()dict[str, Any]清除流水线当前使用的对话,后续请求会创建新对话
await event_context.list_pipeline_knowledge_bases()list[dict[str, Any]]列出当前流水线 Local Agent 绑定的知识库
await event_context.retrieve_knowledge(kb_id, query_text, top_k=5, filters=None)list[dict[str, Any]]检索当前流水线已绑定的知识库
event_context.prevent_default()-阻止当前事件的默认处理
event_context.prevent_postorder()-阻止后续插件继续处理当前事件

reply() 使用 MessageChain。请求变量、回复和流水线知识库方法依赖当前请求;没有关联请求的事件不能调用这些方法。retrieve_knowledge()kb_id 必须来自 list_pipeline_knowledge_bases()

prevent_default() 只对支持中止默认流程的流水线事件生效,具体事件见流水线事件

Command

Command 的子命令处理函数接收 ExecuteContext

query = " ".join(context.crt_params)
session = context.session

上下文数据

属性类型说明
sessionSession当前消息所属会话
command_textstr去掉命令前缀后的完整文本
full_command_textstr包含命令前缀的完整文本
commandstr根命令名称
crt_commandstr当前正在执行的子命令名称
paramslist[str]根命令后的全部参数
crt_paramslist[str]当前子命令尚未消费的参数
privilegeint当前用户的命令权限级别
query_idint当前流水线请求 ID
query_uuidstr | None当前流水线请求的稳定标识

context.shift() 由 SDK 在进入当前子命令前调用,组件不需要手动调用。

上下文方法

方法返回值说明
await context.reply(message_chain, quote_origin=False)-回复当前请求所在会话
await context.get_bot_uuid()str获取当前请求来源机器人 UUID
await context.set_query_var(key, value)-设置当前请求变量
await context.get_query_var(key)Any获取一个请求变量
await context.get_query_vars()dict[str, Any]获取全部请求变量
await context.create_new_conversation()dict[str, Any]清除流水线当前使用的对话,后续请求会创建新对话
await context.list_pipeline_knowledge_bases()list[dict[str, Any]]列出当前流水线 Local Agent 绑定的知识库
await context.retrieve_knowledge(kb_id, query_text, top_k=5, filters=None)list[dict[str, Any]]检索当前流水线已绑定的知识库

这些请求方法的行为与 EventListener 相同。命令的注册和返回值见 Command 组件

Tool

Tool 没有独立的上下文对象。调用信息直接传入 call()

conversation_type = session.launcher_type.value
conversation_id = session.launcher_id
sender_id = session.sender_id
参数说明
params模型或调用方根据工具 JSON Schema 生成的参数
session当前会话数据
query_id当前流水线请求 ID;调用需要请求上下文的 LangBot API 时原样传入

Session 的常用字段如下:

属性说明
launcher_type会话类型:persongroup
launcher_id私聊用户或群组 ID
sender_id当前消息发送者 ID
bot_uuid当前机器人 UUID
using_conversation当前流水线会话
conversations该 Session 保存的流水线会话列表
use_prompt_name当前使用的提示词名称
create_timeupdate_timeSession 的创建时间和更新时间

session 只保存数据,不提供 reply() 等上下文方法。工具的返回值交给调用方,不会自动发送到聊天平台。需要调用 LangBot 或平台能力时使用 self.plugin;相关接口要求 sessionquery_id 时,传入本次调用收到的值。

运行器

SDK Runner 类型的自定义 run(ctx) 和事件处理函数都接收 RunnerContext。该上下文只在本次运行期间有效。

text = ctx.input.to_text()
event_type = ctx.event.event_type

上下文数据

属性类型说明
run_idstr本次运行 ID
triggerAgentTrigger触发类型、来源和时间
eventAgentEventContext标准事件信封,包含事件 ID、类型、来源、时间和原始数据
platform_event平台事件类型按事件类型解析后的平台事件对象
conversationConversationContext | None当前会话、线程、机器人和工作区标识
actorActorContext | None事件发起者
subjectSubjectContext | None事件所作用的消息、群组等对象
inputAgentInput当前输入的文本、结构化内容和附件
deliveryDeliveryContext当前输出目标及流式、编辑、回应等能力
resourcesAgentResources本次运行已授权的模型、工具、知识库、技能和存储
contextContextAccess会话游标、内联范围和可用上下文 API
stateAgentRunState本次运行开始时读取到的各作用域状态快照
runtimeAgentRuntimeContextLangBot 版本、追踪 ID 和截止时间
configdict[str, Any]当前 Agent 或插件处理器配置
adapterAdapterContext | None入口适配器附加数据
variablesdict[str, Any]公开的请求变量,可用于运行器插值模板
metadatadict[str, Any]宿主提供的其他元数据

优先使用上表中的稳定字段。event.dataadapter.extra 用于承载尚未进入稳定字段的附加信息。

回复与日志

方法返回值说明
await ctx.get_bot_uuid()str获取来源机器人 UUID;无关联机器人时抛出异常
await ctx.reply(message_chain, quote_origin=False)Any回复当前事件,支持字符串或 MessageChain
ctx.reply_stream()异步上下文管理器流式更新同一条回复
await ctx.log(text, level="info")-写入本次运行日志;级别支持 debuginfowarningerror

reply_stream()update(text) 接收当前完整文本。平台不支持流式时,LangBot 会在结束时发送一条完整消息;调试模式只模拟发送。

可用工具

方法返回值说明
await ctx.get_available_tools()list[dict[str, Any]]获取本次实际允许调用的上下文动作、平台 API、插件工具和 MCP 工具
await ctx.call_tool(tool_name, parameters=None)dict[str, Any]调用上述列表中的工具

get_available_tools() 的每一项包含 namedescriptionparameterstypeoperations。返回结果已经按当前 Agent 或插件处理器的配置和事件能力过滤;不在列表中的工具不能通过 ctx.call_tool() 调用。

Box 与附件

Box 是否启用、何时创建以及如何复用,由运行器决定。获取状态和申请 Box 使用 LangBot API;当前运行的绑定和附件操作使用下列方法。

方法返回值说明
await ctx.bind_box(box_id)BoxBinding绑定当前工作区中的 Box,返回 box_idoutbox;同次运行不能切换 Box
await ctx.import_box_attachments(attachment_ids=None)list[BoxFile]导入 ctx.input.attachmentsref,省略参数则导入全部;返回各文件的沙箱 path
await ctx.export_box_files()list[BoxFile]导出本次运行 outbox 中的文件,返回文件句柄,不发送消息
await ctx.reply_files(file_ids)Any使用导出的 id 回复当前事件,受回复工具权限约束

BoxFile 包含 idnametypesize 和可选的 path。输入的 urlcontent 等原始信息仍保留,只有显式导入才产生沙箱文件路径。文件句柄仅在本次运行有效,不能重复发送。

先绑定 Box,再使用原生执行、文件工具和附件方法。复用同一 Box 时,各次运行的附件目录仍独立。ctx.variables 提供公开的请求变量,运行器可据此计算复用键。

通过流水线运行时,ctx.delivery.automatic_replyTrue,可以在 RunnerResult.message_completed(ctx.run_id, message, file_ids=[...]) 返回附件;Agent 和插件处理器使用 ctx.reply_files() 显式发送。

外部运行器通过 AgentRunExternalTools 工具网关使用相同流程:langbot_get_box_statuslangbot_list_boxeslangbot_acquire_boxlangbot_bind_boxlangbot_import_box_attachmentslangbot_export_box_files。具有当前事件回复权限时还可使用 langbot_reply_files;这些调用均携带当前运行的授权。

提示词、历史与事件

方法返回值可用性字段
await ctx.get_prompt()list[dict[str, Any]]prompt_get
await ctx.history_page(conversation_id=None, before_cursor=None, after_cursor=None, limit=50, direction="backward", include_attachments=False)HistoryPagehistory_page
await ctx.history_search(query, filters=None, top_k=10)HistorySearchResulthistory_search
await ctx.event_get(event_id)AgentEventRecordevent_get
await ctx.event_page(conversation_id=None, event_types=None, before_cursor=None, limit=50)EventPageevent_page
await ctx.steering_pull(mode="all", limit=None)SteeringPullResultsteering_pull

状态

方法返回值说明
await ctx.state_get(scope, key)dict[str, Any]读取状态值
await ctx.state_set(scope, key, value)dict[str, Any]写入可 JSON 序列化的状态值
await ctx.state_delete(scope, key)dict[str, Any]删除状态值
await ctx.state_list(scope, prefix=None, limit=100)dict[str, Any]列出指定作用域的状态键

scope 支持 conversationactorsubjectrunner。这些方法要求 ctx.context.available_apis.statetrue

运行记录

方法返回值可用性字段
await ctx.run_get(run_id=None)AgentRunrun_get
await ctx.run_list(conversation_id=None, statuses=None, before_cursor=None, limit=50)RunPagerun_list
await ctx.run_events_page(run_id=None, before_cursor=None, after_cursor=None, limit=50, direction="forward")RunEventPagerun_events_page
await ctx.run_cancel(run_id=None, reason=None)AgentRunrun_cancel
await ctx.run_append_result(result)AgentRunEventrun_append_result
await ctx.run_finalize(run_id=None, status=None, reason=None)AgentRunrun_finalize

run_id=None 表示当前运行。普通事件处理函数结束后,SDK 会自动完成本次运行;自定义 run(ctx) 通过 yield RunnerResult 返回结果时,也不需要再调用 run_append_result() 重复登记。

可用性与授权

通过 ctx.context.available_apis 判断提示词、历史、事件、状态和运行记录接口是否可用。模型、工具和知识库的授权范围分别位于 ctx.resources.modelsctx.resources.toolsctx.resources.knowledge_bases

运行器执行期间,通过 self.plugin 发起的模型、工具、知识库、存储和平台调用会自动关联当前运行,并按 ctx.resources 再次校验,无需传入 run_id。处理函数结束后,不要继续在后台任务中使用本次上下文或这些运行关联调用。

ctx.api 是底层的运行级代理。普通组件代码应优先使用本页列出的 ctx 方法,并通过 self.plugin 调用 LangBot API。

数据型上下文

以下组件收到的是本次任务的输入数据,不提供 EventListener 或运行器的上下文方法。字段、返回值和完整示例放在对应组件教程中。

组件入口主要数据组件教程
KnowledgeEngine.ingest(context: IngestionContext)文件、目标知识库、创建配置和解析结果KnowledgeEngine
KnowledgeEngine.retrieve(context: RetrievalContext)查询、目标知识库、检索配置和过滤条件KnowledgeEngine
KnowledgeRetriever.retrieve(context: RetrievalContext)查询和外部知识库配置KnowledgeRetriever
Parser.parse(context: ParseContext)文件内容、文件名、MIME 类型和元数据Parser
Page.handle_api(request: PageRequest)接口路径、HTTP 方法、请求体和请求头Page

On this page