Langflow 数据类型
Langflow 组件旨在接受和产生特定类型的输入和输出。 输入和输出数据类型定义了组件之间信息的结构和流动。 了解这些结构有助于您构建能够提供有效输入并正确预测输出格式的应用程序。
组件端口 (Component ports) 代表了每个组件可以发送和接收的数据类型。 某些数据类型从它们所连接的字段中显而易见;例如,System Message 字段接受 消息数据。 端口颜色 (Port colors) 也指示端口的数据类型。 例如,由 表示的 Data 端口,要么接受要么发出 结构化数据对象。
在构建流时,将输出端口连接到相同类型(颜色)的输入端口,以便在两个组件之间传输该类型的数据。
-
在 工作区 (workspace) 中,将鼠标悬停在端口上可以查看该端口的连接详细信息。 点击端口以 搜索 (Search) 兼容的组件。
-
如果两个组件的数据类型不兼容,您可以使用处理组件(如 Type Convert 组件)在组件之间转换数据。
Data (数据)
Data 端口 接受或产生 Data 类型,这是一种结构化数据对象,类似于您可能发送给 API 的 JSON 负载。
此数据类型用于在组件之间传递键值对,例如用户配置文件、设置或其他结构化信息。
Data 对象包含一个由 text_key 指示的主要文本字段,以及额外的元数据。
架构与属性 (Schema and attributes)
架构定义在 data.py 中。
提供以下属性:
data:Data对象在.data属性中存储键值对。这是Data对象的核心字典。每个键是一个字段名,值可以是任何受支持的数据类型。text_key:data中被视为主要文本值的键。default_value: 如果text_key缺失时的回退值。默认的text_key是"text"。
_10data_obj = Data(_10 text_key="text",_10 data={_10 "text": "Hello world",_10 "name": "Charlie",_10 "age": 28_10 },_10 default_value=""_10)
Data 对象可以序列化为 JSON、从 JSON 创建或从其他字典数据创建。
然而,生成的 Data 对象是一个带有验证和方法的结构化对象,而不是一个普通的字典。
例如,当序列化为 JSON 时,之前的 Python 示例将变为以下 JSON 对象:
_10{_10 "text_key": "text",_10 "data": {_10 "text": "Hello world",_10 "name": "Charlie",_10 "age": 28_10 },_10 "default_value": ""_10}
DataFrame (数据框)
DataFrame 端口 接受或产生 pandas DataFrames,它们类似于表格形式的 CSV 数据。
使用 DataFrame 类型来处理包含多行或多条记录的数据。
架构与属性 (Schema and attributes)
架构定义在 dataframe.py 中。
提供以下属性:
-
完全兼容 pandas: 支持所有 pandas DataFrame 的方法和功能。
-
Langflow 集成: 接受
Data对象 列表、字典或现有的 DataFrames。 -
便捷方法:
to_data_list()add_row()add_rows()to_lc_documents()to_data()to_message()
-
文本键支持: 维护
text_key和default_value属性,以兼容Data对象。
DataFrame 结构 (DataFrame structure)
DataFrame 具有包含行和列的表格数据结构。 键是列,数组中的每个对象是一行。
_12[_12 {_12 "name": "Charlie Lastname",_12 "age": 28,_12 "email": "charlie.lastname@example.com"_12 },_12 {_12 "name": "Alexandra Example",_12 "age": 34,_12 "email": "alexandra@example.com"_12 }_12]
当表示为表格数据时,上述 DataFrame 对象的结构如下:
_10| name | age | email |_10|------|-----|-------|_10| Charlie Lastname | 28 | charlie.lastname@example.com |_10| Alexandra Example | 34 | alexandra@example.com |
Embeddings (嵌入)
Embeddings 端口 发出或摄取向量嵌入,以支持相似性搜索等功能。
Embeddings 数据类型专门用于产生或消耗向量嵌入的组件,例如 嵌入模型组件 和向量存储组件。
例如,嵌入模型组件输出 Embeddings 数据,您可以将其连接到向量存储组件上的 Embedding 输入端口。
有关产生 Embeddings 的底层 Python 类的更多信息,请参阅 LangChain Embedding 模型文档。
LanguageModel (语言模型)
LanguageModel 类型是一种特定的数据类型,可以由语言模型组件产生,并由使用 LLM 的组件接受。
当您将语言模型组件的输出类型从 Model Response 更改为 Language Model 时,组件的输出端口将从 Message 端口更改为 Language Model 端口 。 然后,您可以将传出的 Language Model 端口连接 到兼容组件(如 Smart Transform 组件)上的 Language Model 输入端口。
有关在流中使用这些组件以及切换 LanguageModel 输出的更多信息,请参阅 语言模型组件。
LanguageModel 是 LangChain ChatModel 的一个实例
由于 Langflow 构建在 LangChain 之上,LanguageModel 实际上是一个 LangChain 聊天模型 (chat model) 的实例,它使用了原始组件中设置的配置参数。
通常,组件会产生一个集成的聊天模型实例,该实例旨在支持特定的模型提供商,例如 ChatOpenAI 或 ChatAnthropic。
您可以检查 组件代码 (component code) 以查看它产生的具体 Chat 实例。
Memory (记忆)
Memory 端口 用于将 Message History 组件与外部聊天记忆存储集成。
有关更多信息,请参阅 Message History 组件。
Message (消息)
Message 端口 接受或产生 Message 数据,它扩展了 Data 类型,增加了通常用于聊天流中文本输入的额外字段和方法。
许多组件都使用此数据类型。
接受或产生 Message 数据的组件可能不会在传入或传出的 Message 数据中包含所有属性。
只要数据与 Message 架构兼容,它就可以是有效的。
在构建流时,重点关注工作区中每个组件上显示的字段,而不是组件之间传递 的数据类型。 特定数据类型的细节通常仅在您调试未产生预期输出的流或组件时才相关。
例如,Chat Input 组件仅需要 Input Text (input_value) 字段的内容。
然后,该组件会构建一个完整的 Message 对象,然后再将数据传递给流中的其他组件。
架构、结构与属性 (Schema, structure, and attributes)
Message 架构定义在 message.py 中。
某些 Message 属性有它们自己的架构定义,例如 content_block.py。
Message 数据被结构化为 JSON 对象。
例如:
_10{_10 "text": "Name: Charlie Lastname, Age: 28, Email: charlie.lastname@example.com",_10 "sender": "User",_10 "sender_name": "Charlie Lastname",_10 "session_id": "some-session-id",_10 "timestamp": "2024-06-01T12:00:00Z",_10 "files": [],_10 "content_blocks": [],_10 "category": "message"_10}
包含在特定 Message 对象中的属性取决于上下文,包括组件类型、流活动以及消息是查询还是响应。
一些常见的属性包括:
text: 主要消息内容。sender: 将聊天消息的发送者标识为User或Language Model。sender_name: 发送者的显示名称。默认为User或Language Model。session_id: 聊天 会话标识符 (session identifier)。flow_id: 与消息关联的流的 ID。如果流不使用自定义会话 ID,则flow_id和session_id相同。timestamp: 发送消息的 UTC 时间戳。files: 消息中包含的文件路径或图像列表。content_blocks: 用于丰富内容输入的容器,如文本、媒体或代码。如果 LLM 无法处理输入,还包含错误消息信息。category:"message"、"error"、"warning"或"info"。
并非所有属性都是必需的,某些组件接受与消息兼容的输入,例如原始文本输入。 严格程度取决于具体组件。
输入和输出组件中的消息数据 (Message data in Input and Output components)
在具有 Chat Input 和 Output 组件 的流中,Message 数据为聊天交互提供了统一的结构,非常适合聊天机器人、对话分析以及其他基于与 LLM 或代理对话的用例。
在这些流中,Playground 聊天界面仅打印与对话相关的 Message 属性,例如 text、files 以及来自 content_blocks 的错误消息。
要查看所有 Message 属性,请在 Playground 中检查消息日志。
在具有 Text Input 和 Output 组件 的流中,Message 数据用于传递简单的文本字符串,不包含与聊天相关的元数据。
这些组件将 Message 数据作为独立的文本字符串处理,而不是作为持续对话的一部分。
因此,仅具有 Text Input 和 Output 组件的流与 Playground 不兼容。
有关更多信息,请参阅 文本输入和输出组件 (Text input and output components)。
使用 Langflow API 时,响应中包含 Message 对象以及来自流运行的其他响应数据。
Langflow API 的响应可能非常冗长,因此您的应用程序必须包含从响应中提取相关数据并返回给用户的代码。
有关示例,请参阅 Langflow 快速入门 (Langflow quickstart)。
此外,发送到输入/输出组件输入端口的输入_不需要_是完整的 Message 对象,因为组件会构建随后传递给流中其他组件或作为流输出返回的 Message 对象。
事实上,某些组件不应该接收完整的 Message 对象,因为某些属性(如 timestamp)应该由组件添加以确保准确性。
Tool (工具)
Tool 端口 将工具连接到 Agent 组件。
工具可以是启用了 工具模式 (Tool Mode) 的其他组件,也可以是专用的 MCP Tools 组件,或者是仅支持 工具模式 (Tool Mode) 的其他组件。 多个工具可以在同一个端口连接到同一个 Agent 组件。
在功能上,Tool 数据是一个可以在代理流中使用的 LangChain StructuredTool 对象。
有关更多信息,请参阅 为代理配置工具 (Configure tools for agents) 和 将 Langflow 用作 MCP 客户端 (Use Langflow as an MCP client)。
未知或多种类型 (Unknown or multiple types)
如果一个端口可以接受或产生多种数据类型,它由灰色端口图标 表示。
将鼠标悬停在端口上以查看接受或产生的数据类型。
在流中查看数据类型 (View data types in flows)
在 Langflow 中,您可以使用 Inspect output (检查输出) 来查看单个组件的输出。 这可以帮助您了解不同的数据类型,并调试无效或格式错误的输入和输出问题。
以下示例说明了如何检查 Type Convert 组件 的输出,该组件可以将数据从一种类型转换为另一种类型:
-
创建一个流,然后将 Chat Input 组件连接到 Type Convert 组件。
-
在 Chat Input 组件中,输入一些文本供类型转换器处理。
-
在 Type Convert 组件上,点击 Run component (运行组件),然后点击 Inspect output (检查输出)。
默认输出是
Message数据,这与来自 Chat Input 组件的输入相同。 要查看转换为Data或DataFrame的Message数据,请在 Type Convert 组件上更改 Output Type,然后重新运行组件。- Message
- Data
- DataFrame
_10Input text_30{_30"timestamp": "2025-07-15 20:56:20 UTC",_30"sender": "User",_30"sender_name": "User",_30"session_id": "a0c7e888-4fd6-4242-b8c8-e761ad690aeb",_30"text": "",_30"files": [],_30"error": false,_30"edit": false,_30"properties": {_30"text_color": "",_30"background_color": "",_30"edited": false,_30"source": {_30"id": null,_30"display_name": null,_30"source": null_30},_30"icon": "",_30"allow_markdown": false,_30"positive_feedback": null,_30"state": "complete",_30"targets": []_30},_30"category": "message",_30"content_blocks": [],_30"id": "9da72da2-efbb-4ccd-90ad-b32429b0418e",_30"flow_id": "a0c7e888-4fd6-4242-b8c8-e761ad690aeb",_30"duration": null_30}_16| 字段 | 值 |_16|-------|-------|_16| timestamp | 2025-07-15 20:56:11 UTC |_16| sender | User |_16| sender_name | User |_16| session_id | a0c7e888-4fd6-4242-b8c8-e761ad690aeb |_16| text | (empty) |_16| files | [] |_16| error | False |_16| edit | False |_16| properties | text_color: '', background_color: '', edited: False, source: {id: None, display_name: None, source: None}, icon: '', allow_markdown: False, positive_feedback: None, state: 'complete', targets: [] |_16| category | message |_16| content_blocks | [] |_16| id | 341686eb-7a39-4b80-a90a-d8bf267815ef |_16| flow_id | a0c7e888-4fd6-4242-b8c8-e761ad690aeb |_16| duration | (empty) |