Python 交互
1. 安装 Dora CLI 和依赖项
首先,请确保您安装了 Python 3.11 。
接下来,如果你还没有安装uv:
pip install uv
然后,创建和激活虚拟环境:
uv venv --seed -p 3.11
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
最后,安装 Dora CLI:
pip install dora-rs-cli
2. 建立一个新的数据流(dataflow)
创建基于 Python 的数据流并导航到项目目录:
dora new conversation_py --lang python
cd conversation_py
这就创建了下面的 conversation_py 目录结构:
├── dataflow.yml
├── listener-1
│ ├── README.md
│ ├── listener_1
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ └── main.py
│ ├── pyproject.toml
│ └── tests
│ └── test_listener_1.py
└── talker-1
├── README.md
├── pyproject.toml
├── talker_1
│ ├── __init__.py
│ ├── __main__.py
│ └── main.py
└── tests
└── test_talker_1.py
3. 添加另一个节 点 (可选)
从 conversation_py 项目目录内,您可以添加另一个节点到工作区:
dora new --kind node talker --lang python
现在请在您的文本编辑器中打开 talker-1/talker_1/main.py 文件。
4. 默认节点如何工作
您的节点现在是非常精简的。 以下是关于其默认工作方式的说明。
导入并初始化节点
from dora import Node
import pyarrow as pa
def main():
node = Node()
处理输入事件
for event in node:
if event["type"] == "INPUT":
print(
f"""Node received:
id: {event["id"]},
value: {event["value"]},
metadata: {event["metadata"]}"""
)
正在发送输出到另一个节点
node.send_output("speech", pa.array(["Hello World"]))
send_output将数据发送到其他节点。"speech"是数据流中引用的输出 ID。pa.array(["Hello World"])创建一个 Apache Arrow 数组。- 为了简化,本教程省略了元数据。
5. 监听器节点故障
文件: listener-1/listener_1/main.py
from dora import Node
def main():
node = Node()
for event in node:
if event["type"] == "INPUT":
message = event["value"][0].as_py()
print(f"I heard {message} from {event['id']}")
if __name__ == "__main__":
main()
event["value"]是一个Apache Arrow 数组。[0]访问第一个元素。.as_py()将其转换为原生的 Python 值。
6. 运行 数据流(dataflow)
编辑 dataflow.yml 以连接节点:
nodes:
- id: talker
path: talker-1/talker_1/main.py
inputs:
tick: dora/timer/secs/1
outputs:
- speech
- id: listener
path: listener-1/listener_1/main.py
inputs:
speech: talker/speech
构建并运行数据流
# 安装依赖
dora build dataflow.yml --uv
# 运行数据流
dora run dataflow.yml --uv
您应该看到:
I heard Hello World from speech
要停止数据流,请按 Ctrl+C 。
7. 结论
恭喜您完成本教程。
您已经创建并运行了一个 Dora 数据流,连接了一个说话者(talker)节点和一个监听者(listener)节点。
从这里开始,可以尝试使用不同的数据类型或探索Dora的高级功能。