UserNode#
UserNode 是一个从终端获取用户输入并为图提供交互功能的节点。
概述#
UserNode 继承自 AsyncNode,提供一个简单的用户交互接口。当图执行到 UserNode 时,会在终端显示提示信息并等待用户输入,然后将输入内容传递给图的后续流程。
特性#
异步处理: 避免阻塞事件循环,支持高并发场景
可配置提示: 支持自定义用户提示信息
灵活存储: 可指定输入在状态中的存储键名
异常安全: 优雅处理各种异常情况
简单易用: 配置简单,开箱即用
基本使用#
from evofabric.core.agent._user_node import UserNode
# Create a UserNode with default configuration
user_node = UserNode()
# Custom prompt message
custom_node = UserNode(prompt_message="Please enter your command: ")
# Custom storage key name
keyed_node = UserNode(input_key="custom_input")
在图中使用#
# Define a graph containing UserNode
from evofabric.core.graph import GraphBuilder
graph = GraphBuilder()
# Add nodes and edges
graph.add_node("user_input", User Node(prompt_message="Please enter task description: "))
graph.add_node("process", YourProcessingNode())
graph.add_edge("user_input", "process")
# Execute the graph
final_state = await graph.run({"messages": []})
# Assume user input "Complete data analysis"
# Result: final_state["messages"] contains the user input message
最佳实践#
1. 输入验证
如果需要对用户输入进行验证,可以在后续节点中添加处理逻辑:
async def validate_input(state: State) -> StateDelta:
user_input = state.get("user_input", "")
if not user_input.strip():
return {"error": "Input cannot be empty"}
# Other validation ...
2. 错误处理
UserNode 已经内置完善的异常处理,但建议在图的后续节点中添加业务逻辑错误处理:
async def handle_error(state: State) -> StateDelta:
if "error" in state:
print(f"Error: {state['error']}")
return {"messages": [UserMessage(content="Please re-enter")]}
return {}
3. 多轮对话
可以实现简单的多轮对话模式:
class ConversationNode(AsyncNode):
async def __call__(self, state: State) -> StateDelta:
messages = state.get(" "messages", [])
if not messages:
# First round: ask for requirements
return {"messages": [UserMessage(content="What help do you need?")]}
else:
# Subsequent rounds: process user replies
last_message = messages[-1].content
if last_message.lower() in ["exit", "quit"]:
return {"messages": [UserMessage(content="Goodbye!")]}
# Process other replies...
return {"messages": [UserMessage(content="Your reply has been received")]}
参数说明#
- evofabric.core.agent.prompt_message#
显示的用户输入提示信息。
- Type:
str
- Default:
"Please enter your input: "
- evofabric.core.agent.input_key#
用户输入在状态中存储的键名。
- Type:
str
- Default:
"user_input"
异常处理#
UserNode 自动处理以下异常情况:
EOFError: 用户输入流结束(如文件结束符)
KeyboardInterrupt: 用户中断输入(Ctrl+C)
其他异常: 捕获所有未预期的错误
所有异常情况下都会返回空的状态增量,确保图执行不会中断。