跳至主要内容

会话

会话是用户与TaskWeaver应用程序进行对话的一个实例。当用户与应用交互时,会创建一个新会话。当用户结束与应用交互时,该会话应当被关闭。TaskWeaver允许应用创建并管理多个会话,因此多个用户可以在不同会话中同时与应用进行交互。

sessions

通过调用TaskWeaverApp类的get_session方法创建新会话。 在后台,get_session方法会创建一个新的Session实例。

class Session:
@inject
def __init__(
self,
session_id: str,
workspace: Workspace,
app_injector: Injector,
logger: TelemetryLogger,
tracing: Tracing,
config: AppSessionConfig,
role_registry: RoleRegistry,
) -> None:
"""
Initialize the session.
:param session_id: The session ID.
:param workspace: The workspace.
:param app_injector: The app injector.
:param logger: The logger.
:param tracing: The tracing.
:param config: The configuration.
:param role_registry: The role registry.
"""
info

在TaskWeaver中,我们使用injector来处理大部分依赖注入。

Session 类包含以下方法:

def send_message(
self,
message: str,
event_handler: Optional[SessionEventHandler] = None,
files: Optional[List[Dict[Literal["name", "path", "content"], Any]]] = None,
) -> Round:
"""
Send a message.
:param message: The message.
:param event_handler: The event handler.
:param files: The files.
:return: The chat round.
"""

send_message 用于向应用程序发送消息。 message 参数是用户发送给应用程序的文本消息。 event_handler 参数是一个处理会话期间事件的函数。 我们定义了多种可由事件处理器处理的事件类型。 每个事件都有特定的类型和消息。 通过实现事件处理器,您可以自定义会话期间事件的显示方式。 下面展示一个非常简单的事件处理器示例:

class ConsoleEventHandler(SessionEventHandler):
def handle(self, event: TaskWeaverEvent):
print(event.t, event.msg)

session.send_message("Hello, how can I help you?", ConsoleEventHandler())

ConsoleEventHandler 类是一个简单的事件处理器,用于将事件类型和消息打印到控制台。

files 参数用于上传文件到应用程序进行处理。

def stop(self) -> None:
"""
Stop the session.
This function must be called before the session exits.
"""

stop 方法用于停止会话。

def update_session_var(
self,
variables: Dict[str, str]
):
"""
Update the session variables.
:param variables: The variables to update.
"""

update_session_var 方法用于更新会话变量。 会话变量是仅在特定会话中可用的键值对。 会话变量可用于插件中存储特定于会话的信息。 例如,您可以在不同会话的会话变量中存储不同的用户名。 然后,在插件中,您可以通过会话变量访问用户名。

@register_plugin
class PluginClass(Plugin):

def __call__(self, argument1: str):
...
# this line of code in the plugin implementation
self.ctx.get_session_var("user_name", "anonymous")
...

update_session_var 方法可以被多次调用来更新多个会话变量。