记忆槽位设置
这些配置决定了 Bot 在群聊中的仿真表现。
槽位列表
槽位列表是所有记忆槽位构成的列表,每个记忆槽位都是槽位列表的一个元素,互相不共享上下文。
记忆槽位决定了 Bot 在哪些会话启用并共享上下文。
当会话被加入记忆槽位时,Bot 才会开始在该会话发言。易言之,当一个会话不在记忆槽位列表时,即使 Bot 在该群聊且未被禁言,它也不会调用 API 进行发言。
Athena 提供了一个列表配置项 MemorySlot.SlotContains
来设置记忆槽位。你可以直接填入数字群号。
Info
即使 Athena 被设计用于群聊,你仍然可以将其用于私聊。做法是在 ` 添加一项以
private:开头的 QQ 号,表示接收来自此账号的 QQ 私聊。例如
private:2445691453表示接收该账号
2445691453` 的私聊消息。
如果你希望接收所有群聊的消息,你可以在记忆槽位中添加 all
。同理,若要接收所以私聊消息,填写 private:all
。
当你希望多个会话共享同一个上下文时,将它们填写到同一个记忆槽位中就行啦。
另外,记忆槽位还有优先级机制。当一个会话同时出现在不同的记忆槽位时,收到来自此会话的消息后,优先应用第一个槽位。除非你将 插件设置
中的 Settings.FirsttoAll
设置为 true
,此时将会把所有匹配到的槽位的上下文融合在一起交给 LLM 处理。
特别地,若要加入沙盒模式的消息,填写 #
。
例如:
SlotContains:
- - '114514' # 收到来自群 114514 的消息时,优先使用这个槽位,意味着 bot 在此群中无其他会话的记忆
- - '114514'
- private:1919810 # 收到来自 1919810 的私聊消息时,优先使用这个槽位,意味着 bot 此时拥有两个会话的记忆
- - private:1919810
- '12085141'
- '2551991321520'
- - '#' # 接受沙盒模式消息。
群聊消息设置
Athena 使用消息队列来管理上下文。在 Bot 接收到新消息时,消息会被加入到一个队列里。当队列的长度达到一定的数量时,队列将会作为上下文提供给大模型进行决策。这之后,你的 Bot 将会发出消息。
- 配置项
MemorySlot.SlotSize
用于控制消息队列的长度,即 Bot 所能知道的历史消息的条数。默认为 20。上限取决于你的模型限制; - 配置项
MemorySlot.MaxTriggerCount
用于控制 Bot 每次发言的最大冷却条数; - 配置项
MemorySlot.MinTriggerCount
用于控制 Bot 每次发言的最小冷却条数; - 特别地,配置项
MemorySlot.FirstTriggerCount
用于控制当 Athena 启动时的初始触发条数。初次启动机器人后,接收到消息的条数达到此项设置的数目后才会首次请求 LLM API。默认为2
。之后,将综合考虑 LLM 的返回结果、最大冷却条数和最小冷却条数来决定下一次请求 LLM API 的所需收到的消息条数。
以上是按消息条数来控制机器人活跃度的配置。接下来的配置是按照时间来控制的:
- 配置项
MemorySlot.MaxTriggerTime
用于模拟主动发送消息的行为。距离同一会话最后一条消息达到此时间时,将主动触发一次 Bot 回复,设为0
表示关闭此功能。单位为毫秒; - 配置项
MemorySlot.MinTriggerTime
用来设置最小回复间隔,即单次触发冷却间隔,防止短时间内的多次触发让机器人露馅。冷却期间如果再次触发回复,将处理新触发回复,跳过本次触发。
除此之外,还有一个特殊的配置项 MemorySlot.AtReactPossibility
,它是一个介于 0 到 1 之间的实数,表示每次 Bot 被 @ 时触发发送消息的概率。
词汇过滤器
有时候有人会使用提示词注入攻击来使群聊中的机器人返回你不希望出现的内容——这时你需要想办法屏蔽某些话术,又或者你希望符合某些特定关键字的消息能被 Bot 忽略,Athena 提供了词汇过滤器来实现这一点。
配置项 MemorySlot.Filter
是一个字符串列表,对于每一项,填入你希望屏蔽的关键字。当某条消息包含该关键字时,这条消息将不会被加入消息队列。
Info
提示词攻击是一种新型的攻击方式,包括提示词注入、提示词泄露和提示词越狱。这些攻击方式可能会导致模型生成不适当的内容,泄露敏感信息等。Prompt 的构建使得预训练大模型能够输出更加符合人类语言和理解的结果,但只能在一定程度上抵御提示词攻击。因此需要使用词汇过滤器来防止提示词攻击。