用户会话旨在通过聊天会话的生命周期将数据持久化到内存中。每个用户会话对于一个用户和一个给定的聊天会话是唯一的。

为什么使用用户会话?

假设您想要跟踪每个聊天会话的消息计数。

一个简单的实现可能看起来像这样

此示例仅用于说明目的。不建议在生产环境中使用此代码。

简单示例
import chainlit as cl

counter = 0


@cl.on_message
async def on_message(message: cl.Message):
    global counter
    counter += 1

    await cl.Message(content=f"You sent {counter} message(s)!").send()

乍一看,这段代码似乎有效。但是,它有一个主要缺陷。如果两个用户同时与机器人聊天,两个用户都会增加同一个 counter

这时就需要使用用户会话。让我们使用用户会话重写上面的示例

正确示例
import chainlit as cl


@cl.on_chat_start
def on_chat_start():
    cl.user_session.set("counter", 0)


@cl.on_message
async def on_message(message: cl.Message):
    counter = cl.user_session.get("counter")
    counter += 1
    cl.user_session.set("counter", counter)

    await cl.Message(content=f"You sent {counter} message(s)!").send()

用户会话默认值

默认情况下,Chainlit 将与聊天会话相关的数据存储在用户会话中。

以下键保留用于存储与聊天会话相关的数据

id
str

会话 ID。

user
cl.User

仅在启用身份验证时设置。包含启动此聊天会话的用户的用户对象。

chat_profile
str

仅在使用聊天档案功能时相关。包含此用户选择的聊天档案。

chat_settings
Dict

仅在使用聊天设置功能时相关。包含此用户提供的聊天设置。

env
Dict
默认值:"{}"

仅在使用user_env 配置时相关。包含此用户提供的环境变量。