Skip to main content

对象

在 Blaflow 中,对象是Pydantic模型,用作数据的结构化、功能性表示。

数据对象

Data对象是一个Pydantic模型,用作存储和操作数据的容器。它包含data——一个可以作为属性访问的字典——并使用text_key来指定字典中的哪个键应被视为主要文本内容。

  • 主要属性:
    • text_key:指定用于检索主要文本数据的键。
    • data:用于存储额外数据的字典。
    • default_value:当text_keydata字典中不存在时的默认值。

创建数据对象

通过直接分配键值对来创建Data对象。例如:


_10
from blaflow.schema import Data
_10
_10
# 创建具有指定键值对的Data对象
_10
data = Data(text="my_string", bar=3, foo="another_string")
_10
_10
# 输出:
_10
print(data.text) # 输出:"my_string"
_10
print(data.bar) # 输出:3
_10
print(data.foo) # 输出:"another_string"

text_key指定data字典中的哪个键应被视为主要文本内容。如果text_key不存在,default_value提供后备值。


_10
# 创建具有特定text_key和default_value的Data对象
_10
data = Data(data={"title": "Hello, World!"}, text_key="content", default_value="No content available")
_10
_10
# 使用text_key和default_value访问主要文本
_10
print(data.get_text()) # 输出:"No content available",因为"content"键不在data字典中
_10
_10
# 通过直接调用属性访问数据键
_10
print(data.title) # 输出:"Hello, World!",因为"title"键在data字典中

Data对象对于输出可视化也很方便,因为输出预览具有可视化元素,可以将数据作为表格检查,并将其单元格作为基本类型的弹出窗口。其目的是在 Blaflow 中创建一种统一的方式来处理和可视化复杂信息。

要在组件输入中接收Data对象,请使用DataInput输入类型。


_10
inputs = [
_10
DataInput(name="data", display_name="Data", info="Helpful info about the incoming data object.", is_list=True),
_10
]

消息对象

Message对象扩展了Data的功能,并包含用于聊天交互的额外属性和方法。

  • 核心消息数据:

    • text:消息的主要文本内容
    • sender:发送者的标识符("User"或"AI")
    • sender_name:发送者的名称
    • session_id:聊天会话的标识符(stringUUID
    • timestamp:消息创建时的时间戳(UTC)
    • flow_id:流程的标识符(stringUUID
    • id:消息的唯一标识符
  • 内容和文件:

    • files:与消息关联的文件或图像列表
    • content_blocks:结构化内容块对象列表
    • properties:包括视觉样式和源信息的额外属性
  • 消息状态:

    • error:指示是否有错误的布尔值
    • edit:指示消息是否被编辑的布尔值
    • category:消息类别("message"、"error"、"warning"、"info")

Message对象可用于在 Blaflow 中发送、存储和操作聊天消息。

创建消息对象

您可以通过直接分配键值对来创建Message对象。例如:


_10
from blaflow.schema.message import Message
_10
_10
message = Message(text="Hello, AI!", sender="User", sender_name="John Doe")

要在组件输入中接收Message对象,您可以使用MessageInput输入类型,或者当目标是仅提取Message对象的text字段时使用MessageTextInput

ContentBlock 对象

ContentBlock对象是多个ContentTypes的列表。它允许您在单个Message中包含多种类型的内容,包括图像、视频和文本。

内容类型是从 content_types.py 中的类型构造的 Pydantic 基类。

每种内容类型都有与其数据类型相关的特定字段。例如:

  • TextContent有一个用于存储文本字符串的text字段
  • MediaContent有一个用于存储媒体文件 URL 的urls字段
  • CodeContent有用于代码片段的codelanguage字段
  • JSONContent有一个用于存储任意 JSON 数据的data字段
  • ToolContent有一个用于存储工具输入参数的tool_input字段

创建 ContentBlock 对象

使用不同内容类型的列表创建ContentBlock对象。


_10
content_block = ContentBlock(
_10
title="Mixed Content Example",
_10
contents=[
_10
TextContent(text="This is a text content"),
_10
MediaContent(urls=["http://example.com/image.jpg"]),
_10
JSONContent(data={"key": "value"}),
_10
CodeContent(code="print('Hello')", language="python")
_10
],
_10
media_url=["http://example.com/additional_image.jpg"]
_10
)

将 ContentBlocks 对象添加到消息中

在此示例中,将文本和媒体ContentBlock添加到消息中。


_23
from blaflow.schema.message import Message
_23
from blaflow.schema.content_block import ContentBlock
_23
from blaflow.schema.content_types import TextContent, MediaContent
_23
_23
message = Message(
_23
text="Main message text",
_23
sender="User",
_23
sender_name="John Doe",
_23
content_blocks=[
_23
ContentBlock(
_23
title="Text Block",
_23
contents=[
_23
TextContent(type="text", text="This is some text content")
_23
]
_23
),
_23
ContentBlock(
_23
title="Media Block",
_23
contents=[
_23
MediaContent(type="media", urls=["http://example.com/image.jpg"])
_23
]
_23
)
_23
]
_23
)

DataFrame对象

DataFrame类是 Pandas DataFrame类的自定义扩展,专门设计用于与 Blaflow 的Data对象无缝协作。该类包括在DataFrameData对象列表之间转换的方法。

DataFrame对象接受各种输入格式,包括Data对象列表、字典和现有的DataFrames

创建DataFrame对象

您可以使用不同的数据格式创建 DataFrame 对象:


_14
from blaflow.schema import Data
_14
from blaflow.schema.data import DataFrame
_14
_14
# 从Data对象列表创建
_14
data_list = [Data(data={"name": "John"}), Data(data={"name": "Jane"})]
_14
df = DataFrame(data_list)
_14
_14
# 从字典列表创建
_14
dict_list = [{"name": "John"}, {"name": "Jane"}]
_14
df = DataFrame(dict_list)
_14
_14
# From a dictionary of lists
_14
data_dict = {"name": ["John", "Jane"], "age": [30, 25]}
_14
df = DataFrame(data_dict)

主要方法

  • to_data_list():将 DataFrame 转换回 Data 对象列表。
  • add_row(data):向 DataFrame 添加单行(Data 对象或字典)。
  • add_rows(data):向 DataFrame 添加多行(Data 对象或字典列表)。

使用示例


_11
# 创建DataFrame
_11
df = DataFrame([Data(data={"name": "John"}), Data(data={"name": "Jane"})])
_11
_11
# Add a new row
_11
df = df.add_row({"name": "Alice"})
_11
_11
# 转换回Data对象列表
_11
data_list = df.to_data_list()
_11
_11
# 使用pandas功能
_11
filtered_df = df[df["name"].str.startswith("J")]

要在组件输入中使用 DataFrame 对象,请使用 DataFrameInput 输入类型。


_10
DataFrameInput(
_10
name="dataframe_input", display_name="DataFrame Input", info="Input for DataFrame objects.", tool_mode=True
_10
),