🔄 阀门
阀门
阀门(Valves)和用户阀门(UserValves)用于允许用户提供动态详细信息,例如API密钥或配置选项。这些将在给定功能的GUI菜单中创建可填充字段或布尔开关。它们始终是可选的,但强烈建议使用。
因此,Valves和UserValves类可以在Pipe
、Pipeline
、Filter
或Tools
类中定义。
阀门只能由管理员通过工具或功能菜单配置。另一方面,用户阀门可以由任何用户直接从聊天会话中配置。
注释示例
from pydantic import BaseModel, Field
from typing import Literal
# 定义阀门
class Filter:
# 注意当前缩进:Valves和UserValves必须声明为
# Tools、Filter或Pipe类的属性。这里我们以
# Filter为例。
class Valves(BaseModel):
# Valves和UserValves继承自pydantic的BaseModel。这
# 支持复杂的用例,如模型验证器等。
test_valve: int = Field( # 注意类型提示:它用于
# 选择向用户显示的UI元素类型(按钮、
# 文本等)。
default=4,
description="控制数值的阀门"
# required=False, # 您可以使用True强制字段
)
# 要让用户在多个字符串之间选择,您可以使用typing中的Literal:
choice_option: Literal["choiceA", "choiceB"] = Field(
default="choiceA",
description="多选阀门的示例",
)
priority: int = Field(
default=0,
description="过滤器操作的优先级。较低值优先通过"
)
# priority字段是可选的,但如果存在将用于
# 排序过滤器。
pass
# 注意此'pass'有助于解析,建议使用。
# UserValves的定义方式相同。
class UserValves(BaseModel):
test_user_valve: bool = Field(
default=False, description="控制True/False(开/关)开关的用户阀门"
)
pass
def __init__(self):
self.valves = self.Valves()
# 因为它们由管理员设置,所以在代码执行时可直接访问。
pass
# inlet方法仅用于Filter,但__user__处理是相同的
def inlet(self, body: dict, __user__: dict):
# 因为UserValves是按用户定义的,所以只有在
# 使用时才可用。
# 注意虽然__user__是一个dict,但__user__["valves"]是一个
# UserValves对象。因此您可以这样访问值:
test_user_valve = __user__["valves"].test_user_valve
# 或者:
test_user_valve = dict(__user__["valves"])["test_user_valve"]
# 但这将返回默认值而不是实际值:
# test_user_valve = __user__["valves"]["test_user_valve"] # 不要这样做!