From 789c732866fa432690ecdecfa68bcce877743748 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Tue, 10 Dec 2024 22:52:17 -0500 Subject: [PATCH 1/3] x --- docs/docs/concepts/human_in_the_loop.md | 170 ++++++++++++++---------- 1 file changed, 102 insertions(+), 68 deletions(-) diff --git a/docs/docs/concepts/human_in_the_loop.md b/docs/docs/concepts/human_in_the_loop.md index 493d8f1498..7b5896d3b4 100644 --- a/docs/docs/concepts/human_in_the_loop.md +++ b/docs/docs/concepts/human_in_the_loop.md @@ -13,114 +13,141 @@ A **human-in-the-loop** (or "on-the-loop") workflow integrates human input into Key use cases for **human-in-the-loop** workflows in LLM-based applications include: -1. **🛠️ [Reviewing tool calls](#review-and-edit)**: Humans can review, edit, or approve tool calls requested by the LLM before tool execution. +1. **🛠️ Reviewing tool calls**: Humans can review, edit, or approve tool calls requested by the LLM before tool execution. 2. **✅ Validating LLM outputs**: Humans can review, edit, or approve content generated by the LLM. 3. **💡 Providing context**: Enable the LLM to explicitly request human input for clarification or additional details or to support multi-turn conversations. -## Design Patterns - -1. **Approval**: Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. -2. **Editing**: Pause the graph to review and edit the agent's state. This is useful for correcting mistakes or updating the agent's state. -3. **Input**: Explicitly request human input at a particular step in the graph. This is useful for collecting additional information or context to inform the agent's decision-making process or for supporting **multi-turn conversations**. - +## `interrupt` -### Approval - -
-![image](img/human_in_the_loop/approve-or-reject.png){: style="max-height:400px"} -
Depending on the human's approval or rejection, the graph can proceed with the action or take an alternative path.
-
- -Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. +The [`interrupt` function][langgraph.types.interrupt] in LangGraph enables human-in-the-loop workflows by pausing the graph at a specific node, presenting information to a human, and resuming the graph with their input. This function is useful for tasks like approvals, edits, or collecting additional input. The [`interrupt` function][langgraph.types.interrupt] is used in conjunction with the [`Command`](../reference/types.md#langgraph.types.Command) object to resume the graph with a value provided by the human. ```python from langgraph.types import interrupt -def human_approval(state: State): - ... - is_approved = interrupt( - { - "question": "Is this correct?", - # Surface the output that should be - # reviewed and approved by the human. - "llm_output": state["llm_output"] - } +def human_node(state: State): + value = interrupt( + # Any JSON serializable value to surface to the human. + # For example, a question or a piece of text or a set of keys in the state + some_data ) + ... + # Update the state with the human's input or route the graph based on the input. + ... - if is_approved: - # Proceed with the action - ... - else: - # Do something else - ... - -# Add the node to the graph in an appropriate location -# and connect it to the relevant nodes. -graph_builder.add_node("human_approval", human_approval) -graph = graph_builder.compile(checkpointer=checkpointer) - -... - -# After running the graph and hitting the breakpoint, the graph will pause. -# Resume it with either an approval or rejection. +# Run the graph and hit the breakpoint thread_config = {"configurable": {"thread_id": "some_id"}} -graph.invoke(Command(resume=True), config=thread_config) +graph.invoke(some_input, config=thread_config) + +# Resume the graph with the human's input +graph.invoke(Command(resume=value_from_human), config=thread_config) ``` +Please read the [Breakpoints](breakpoints.md) guide for more information on using the `interrupt` function. -### Edit - -
-![image](img/human_in_the_loop/tool-call-review.png){: style="max-height:400px"} -
A human can review and edit the output from the LLM before proceeding. This is particularly -critical in applications where the tool calls requested by the LLM may be sensitive or require human oversight. -
-
+## Design Patterns +1. **Approval**: Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. +2. **Editing**: Pause the graph to review and edit the agent's state. This is useful for correcting mistakes or updating the agent's state. +3. **Input**: Explicitly request human input at a particular step in the graph. This is useful for collecting additional information or context to inform the agent's decision-making process or for supporting **multi-turn conversations**. -=== "Review tool calls" - TODO: Create an example for tool call review. +=== "Approval" +
+ ![image](img/human_in_the_loop/approve-or-reject.png){: style="max-height:400px"} +
Depending on the human's approval or rejection, the graph can proceed with the action or take an alternative path.
+
-=== "Review text output from the LLM and make any necessary edits." + Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. ```python from langgraph.types import interrupt - def human_editing(state: State): + def human_approval(state: State): ... - result = interrupt( - # Interrupt information to surface to the client. - # Can be any JSON serializable value. + is_approved = interrupt( { - "task": "Review the output from the LLM and make any necessary edits.", + "question": "Is this correct?", + # Surface the output that should be + # reviewed and approved by the human. "llm_output": state["llm_output"] } ) - # Update the state with the edited text - return { - "llm_output": result["edited_text"] - } + if is_approved: + # Proceed with the action + ... + else: + # Do something else + ... # Add the node to the graph in an appropriate location # and connect it to the relevant nodes. - graph_builder.add_node("human_editing", human_editing) + graph_builder.add_node("human_approval", human_approval) graph = graph_builder.compile(checkpointer=checkpointer) ... # After running the graph and hitting the breakpoint, the graph will pause. - # Resume it with the edited text. + # Resume it with either an approval or rejection. thread_config = {"configurable": {"thread_id": "some_id"}} - graph.invoke( - Command(resume={"edited_text": "The edited text"}), - config=thread_config - ) + graph.invoke(Command(resume=True), config=thread_config) ``` -### Multi-turn conversation (Input) + +=== "Review & Edit" + +
+ ![image](img/human_in_the_loop/tool-call-review.png){: style="max-height:400px"} +
A human can review and edit the output from the LLM before proceeding. This is particularly + critical in applications where the tool calls requested by the LLM may be sensitive or require human oversight. +
+
+ + + === "Review tool calls" + + TODO: Create an example for tool call review. + + + === "Review text output from the LLM and make any necessary edits." + + ```python + from langgraph.types import interrupt + + def human_editing(state: State): + ... + result = interrupt( + # Interrupt information to surface to the client. + # Can be any JSON serializable value. + { + "task": "Review the output from the LLM and make any necessary edits.", + "llm_output": state["llm_output"] + } + ) + + # Update the state with the edited text + return { + "llm_output": result["edited_text"] + } + + # Add the node to the graph in an appropriate location + # and connect it to the relevant nodes. + graph_builder.add_node("human_editing", human_editing) + graph = graph_builder.compile(checkpointer=checkpointer) + + ... + + # After running the graph and hitting the breakpoint, the graph will pause. + # Resume it with the edited text. + thread_config = {"configurable": {"thread_id": "some_id"}} + graph.invoke( + Command(resume={"edited_text": "The edited text"}), + config=thread_config + ) + ``` + +### Multi-turn conversation
![image](img/human_in_the_loop/multi-turn-conversation.png){: style="max-height:400px"} @@ -164,6 +191,13 @@ graph.invoke( ) ``` +## Best practices + +* Use the [`interrupt`](breakpoints.md#the-interrupt-function) function to set breakpoints and collect user input. +* Use [`Command`](breakpoints.md#the-command-primitive) to resume execution and control the graph state. +* Consider putting all side effects (e.g., API calls) after the `interrupt` to prevent duplication. +* Understand [how resuming from a breakpoint works](breakpoints.md#how-does-resuming-from-a-breakpoint-work) to avoid common gotchas. + ## Additional Resources 📚 - [**Conceptual Guide: Persistence**](persistence.md#replay): Read the persistence guide for more context on replaying. From a4d49b4e77ad9ecde4a28ff8e82314516c21bd68 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Tue, 10 Dec 2024 23:23:58 -0500 Subject: [PATCH 2/3] x --- docs/docs/concepts/human_in_the_loop.md | 179 ++++++++++++++---------- 1 file changed, 104 insertions(+), 75 deletions(-) diff --git a/docs/docs/concepts/human_in_the_loop.md b/docs/docs/concepts/human_in_the_loop.md index 7b5896d3b4..ac02d57c23 100644 --- a/docs/docs/concepts/human_in_the_loop.md +++ b/docs/docs/concepts/human_in_the_loop.md @@ -46,106 +46,136 @@ Please read the [Breakpoints](breakpoints.md) guide for more information on usin ## Design Patterns -1. **Approval**: Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. -2. **Editing**: Pause the graph to review and edit the agent's state. This is useful for correcting mistakes or updating the agent's state. +There are typically three different things that you might want to do when you interrupt a graph: + +1. **Approval/Rejection**: Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. This pattern often involve **routing** the graph based on the human's input. +2. **Editing**: Pause the graph to review and edit the graph state. This is useful for correcting mistakes or updating the state with additional information. This pattern often involves **updating** the state with the human's input. 3. **Input**: Explicitly request human input at a particular step in the graph. This is useful for collecting additional information or context to inform the agent's decision-making process or for supporting **multi-turn conversations**. -=== "Approval" +### Approve or Reject -
- ![image](img/human_in_the_loop/approve-or-reject.png){: style="max-height:400px"} -
Depending on the human's approval or rejection, the graph can proceed with the action or take an alternative path.
-
+
+![image](img/human_in_the_loop/approve-or-reject.png){: style="max-height:400px"} +
Depending on the human's approval or rejection, the graph can proceed with the action or take an alternative path.
+
- Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. +Pause the graph before a critical step, such as an API call, to review and approve the action. If the action is rejected, you can prevent the graph from executing the step, and potentially take an alternative action. - ```python - from langgraph.types import interrupt +```python - def human_approval(state: State): - ... - is_approved = interrupt( - { - "question": "Is this correct?", - # Surface the output that should be - # reviewed and approved by the human. - "llm_output": state["llm_output"] - } - ) +from typing import Literal +from langgraph.types import interrupt, Command + +def human_approval(state: State) -> Command[Literal["some_node", "another_node"]]: + is_approved = interrupt( + { + "question": "Is this correct?", + # Surface the output that should be + # reviewed and approved by the human. + "llm_output": state["llm_output"] + } + ) - if is_approved: - # Proceed with the action - ... - else: - # Do something else - ... + if is_approved: + return Command(goto="some_node") + else: + return Command(goto="another_node") - # Add the node to the graph in an appropriate location - # and connect it to the relevant nodes. - graph_builder.add_node("human_approval", human_approval) - graph = graph_builder.compile(checkpointer=checkpointer) +# Add the node to the graph in an appropriate location +# and connect it to the relevant nodes. +graph_builder.add_node("human_approval", human_approval) +graph = graph_builder.compile(checkpointer=checkpointer) - ... +# After running the graph and hitting the breakpoint, the graph will pause. +# Resume it with either an approval or rejection. +thread_config = {"configurable": {"thread_id": "some_id"}} +graph.invoke(Command(resume=True), config=thread_config) +``` - # After running the graph and hitting the breakpoint, the graph will pause. - # Resume it with either an approval or rejection. - thread_config = {"configurable": {"thread_id": "some_id"}} - graph.invoke(Command(resume=True), config=thread_config) - ``` +### Review & Edit State +
+![image](img/human_in_the_loop/edit-graph-state-simple.png){: style="max-height:400px"} +
A human can review and edit the state of the graph. This is useful for correcting mistakes or updating the state with additional information. +
+
-=== "Review & Edit" +```python +from langgraph.types import interrupt -
- ![image](img/human_in_the_loop/tool-call-review.png){: style="max-height:400px"} -
A human can review and edit the output from the LLM before proceeding. This is particularly - critical in applications where the tool calls requested by the LLM may be sensitive or require human oversight. -
-
+def human_editing(state: State): + ... + result = interrupt( + # Interrupt information to surface to the client. + # Can be any JSON serializable value. + { + "task": "Review the output from the LLM and make any necessary edits.", + "llm_generated_summary": state["llm_generated_summary"] + } + ) + # Update the state with the edited text + return { + "llm_generated_summary": result["edited_text"] + } - === "Review tool calls" +# Add the node to the graph in an appropriate location +# and connect it to the relevant nodes. +graph_builder.add_node("human_editing", human_editing) +graph = graph_builder.compile(checkpointer=checkpointer) - TODO: Create an example for tool call review. +... +# After running the graph and hitting the breakpoint, the graph will pause. +# Resume it with the edited text. +thread_config = {"configurable": {"thread_id": "some_id"}} +graph.invoke( + Command(resume={"edited_text": "The edited text"}), + config=thread_config +) +``` - === "Review text output from the LLM and make any necessary edits." +### Review Tool Call - ```python - from langgraph.types import interrupt +
+![image](img/human_in_the_loop/tool-call-review.png){: style="max-height:400px"} +
A human can review and edit the output from the LLM before proceeding. This is particularly +critical in applications where the tool calls requested by the LLM may be sensitive or require human oversight. +
+
- def human_editing(state: State): - ... - result = interrupt( - # Interrupt information to surface to the client. - # Can be any JSON serializable value. - { - "task": "Review the output from the LLM and make any necessary edits.", - "llm_output": state["llm_output"] - } - ) +```python +def human_review_node(state) -> Command[Literal["call_llm", "run_tool"]]: + # This is the value we'll be providing via Command(resume=) + human_review = interrupt( + { + "question": "Is this correct?", + # Surface tool calls for review + "tool_call": tool_call + } + ) - # Update the state with the edited text - return { - "llm_output": result["edited_text"] - } + review_action, review_data = human_review - # Add the node to the graph in an appropriate location - # and connect it to the relevant nodes. - graph_builder.add_node("human_editing", human_editing) - graph = graph_builder.compile(checkpointer=checkpointer) + # Approve the tool call and continue + if review_data == "approve": + return Command(goto="run_tool") + # Modify the tool call manually and then continue + elif review_action == "update": ... + updated_msg = get_updated_msg(review_data) + # Remember that modify an existing message you will need + # pass the message with a matching ID. + return Command(goto="run_tool", update={"messages": [updated_message]}) - # After running the graph and hitting the breakpoint, the graph will pause. - # Resume it with the edited text. - thread_config = {"configurable": {"thread_id": "some_id"}} - graph.invoke( - Command(resume={"edited_text": "The edited text"}), - config=thread_config - ) - ``` + # Give natural language feedback, and then pass that back to the agent + elif review_action == "feedback": + ... + feedback_msg = get_feedback_msg(review_data) + return Command(goto="call_llm", update={"messages": [feedback_msg]}) +``` ### Multi-turn conversation @@ -182,7 +212,6 @@ graph_builder.add_node("human_input", human_input) graph_builder.add_edge("human_input", "agent") graph = graph_builder.compile(checkpointer=checkpointer) - # After running the graph and hitting the breakpoint, the graph will pause. # Resume it with the human's input. graph.invoke( From 6153c777fb2bd795ef07b8b54ad2b5a60920dbc3 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Tue, 10 Dec 2024 23:24:26 -0500 Subject: [PATCH 3/3] x --- .../edit-graph-state-simple.png | Bin 0 -> 40187 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/docs/concepts/img/human_in_the_loop/edit-graph-state-simple.png diff --git a/docs/docs/concepts/img/human_in_the_loop/edit-graph-state-simple.png b/docs/docs/concepts/img/human_in_the_loop/edit-graph-state-simple.png new file mode 100644 index 0000000000000000000000000000000000000000..4c4d4fac49e9f67a0f4683f331c7208eb56cea03 GIT binary patch literal 40187 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