LangGraph(四)——加入人機交互控制

目錄

  • 1. 引言
  • 2. 添加Human Assistance工具
  • 3. 編譯狀態圖
  • 4. 提示聊天機器人
  • 5. 恢復執行
  • 參考

1. 引言

??智能體可能不可靠,甚至需要人工輸入才能完成任務。同樣,對于某些操作,你可能需要在運行前獲得人工批準,以保證一切按預期運行。
??LangGraph的持久層支持人機交互工作流,允許根據用戶反饋暫停和恢復執行。此功能的主要接口是interrupt函數。在節點內部調用Interrupt將暫停執行。可以通過傳入command來interrupt執行,并接收新的人工輸入。interrupt在人機工程學上類似于Python的內置input(),但也有一些注意事項。

2. 添加Human Assistance工具

??初始化聊天模型:

from langchain.chat_models import init_chat_modelllm = init_chat_model("deepseek:deepseek-chat"
)

??使用附加工具將human assistance附加到狀態圖中:

from typing import Annotatedfrom langchain_tavily import TavilySearch
from langchain_core.tools import tool
from typing_extensions import TypedDictfrom langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_conditionfrom langgraph.types import Command, interruptclass State(TypedDict):messages: Annotated[list, add_messages]graph_builder = StateGraph(State)@tool
def human_assistance(query: str) -> str:"""Request assistance from a human."""human_response = interrupt({"query": query})return human_response["data"]tool = TavilySearch(max_results=2)
tools = [tool, human_assistance]
llm_with_tools = llm.bind_tools(tools)def chatbot(state: State):message = llm_with_tools.invoke(state["messages"])# Because we will be interrupting during tool execution,# we disable parallel tool calling to avoid repeating any# tool invocations when we resume.assert len(message.tool_calls) <= 1return {"messages": [message]}graph_builder.add_node("chatbot", chatbot)tool_node = ToolNode(tools=tools)
graph_builder.add_node("tools", tool_node)graph_builder.add_conditional_edges("chatbot",tools_condition,
)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge(START, "chatbot")

3. 編譯狀態圖

??使用檢查點編譯狀態圖:

memory = MemorySaver()graph = graph_builder.compile(checkpointer=memory)

4. 提示聊天機器人

??向聊天機器人提出一個問題,該問題將使用human assistance工具:

user_input = "I need some expert guidance for building an AI agent. Could you request assistance for me?"
config = {"configurable": {"thread_id": "1"}}events = graph.stream({"messages": [{"role": "user", "content": user_input}]},config,stream_mode="values",
)
for event in events:if "messages" in event:event["messages"][-1].pretty_print()

??運行結果為:
在這里插入圖片描述
??聊天機器人生成了一個工具調用,但隨后執行被中斷。如果你檢查狀態圖,會發現它在工具節點處停止了:

snapshot = graph.get_state(config)
snapshot.next

??運行結果為:

('tools',)

5. 恢復執行

??要恢復執行需要傳遞一個包含工具所需數據的Command對象。此數據的格式可根據需要自定義。在本例中,使用一個帶有鍵”data"字典:

human_response = ("We, the experts are here to help! We'd recommend you check out LangGraph to build your agent."" It's much more reliable and extensible than simple autonomous agents."
)human_command = Command(resume={"data": human_response})events = graph.stream(human_command, config, stream_mode="values")
for event in events:if "messages" in event:event["messages"][-1].pretty_print()

??運行結果為:

================================== Ai Message ==================================
Tool Calls:human_assistance (call_0_cee258cf-15db-49d4-8495-46761c7ddc65)Call ID: call_0_cee258cf-15db-49d4-8495-46761c7ddc65Args:query: I need expert guidance for building an AI agent.
================================= Tool Message =================================
Name: human_assistanceWe, the experts are here to help! We'd recommend you check out LangGraph to build your agent. It's much more reliable and extensible than simple autonomous agents.
================================== Ai Message ==================================Great! It seems the experts recommend using **LangGraph** for building your AI agent, as it is more reliable and extensible compared to simple autonomous agents. If you'd like, I can provide more details about LangGraph or assist you with specific steps to get started. Let me know how you'd like to proceed!

參考

https://langchain-ai.github.io/langgraph/tutorials/get-started/4-human-in-the-loop/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81406.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構【AVL樹】

AVL樹 1.AVL樹1.AVL的概念2.平衡因子 2.AVl樹的實現2.1AVL樹的結構2.2AVL樹的插入2.3 旋轉2.3.1 旋轉的原則 1.AVL樹 1.AVL的概念 AVL樹可以是一個空樹。 它的左右子樹都是AVL樹&#xff0c;且左右子樹的高度差的絕對值不超過1。AVL樹是一顆高度平衡搜索二叉樹&#xff0c;通…

JavaScript【5】DOM模型

1.概述&#xff1a; DOM (Document Object Model)&#xff1a;當頁面被加載時&#xff0c;瀏覽器會創建頁面的文檔對象模型&#xff0c;即dom對象&#xff1b;dom對象會被結構化為對象樹&#xff0c;如一個HTML文檔會被分為head&#xff0c;body等部分&#xff0c;而每個部分又…

STM32燒錄程序正常,但是運行異常

一、硬件配置問題 BOOT引腳設置錯誤 STM32的啟動模式由BOOT0和BOOT1引腳決定。若設置為從RAM啟動&#xff08;BOOT01&#xff0c;BOOT10&#xff09;&#xff0c;程序在掉電后無法保存&#xff0c;導致復位后無法正常運行。應確保BOOT00&#xff08;從Flash啟動&#xff09;15。…

汽車二自由度系統模型以及電動助力轉向系統模型

汽車二自由度系統模型與電動助力轉向系統&#xff08;EPS&#xff09;的詳細建模方案&#xff0c;包含理論推導、MATLAB/Simulink實現代碼及參數說明&#xff1a; 一、二自由度汽車模型 1. 模型描述 包含以下兩個自由度&#xff1a; 橫向運動&#xff08;側向加速度&#xf…

git提交庫常用詞

新功能 feat修改BUG fix文檔修改 docs格式修改 style重構 refactor性能提升 perf測試 test構建系統 build對CI配置文件修改 ci修改構建流程、或增加依賴庫、工具 chore回滾版本 revert

JavaScript 時間轉換:從 HH:mm:ss 到十進制小時及反向轉換

關鍵點 JavaScript 可以輕松實現時間格式&#xff08;HH:mm:ss 或 HH:mm&#xff09;與十進制小時&#xff08;如 17.5&#xff09;的相互轉換。兩個函數分別處理時間字符串到十進制小時&#xff0c;以及十進制小時到時間字符串的轉換&#xff0c;支持靈活的輸入和輸出格式。這…

LLM智能體新紀元:深入解析MCP與A2A協議,賦能智能自動化協作

LLM智能體&#xff08;LLM agents&#xff09;是能夠自主行動以實現特定目標的AI系統。在實際應用中&#xff0c;智能體能夠將用戶請求拆解為多個步驟&#xff0c;利用知識庫或API獲取數據&#xff0c;最終整合出答案。這讓智能體相比于傳統獨立聊天機器人擁有更強大的能力——…

[PMIC]PMIC重要知識點總結

PMIC重要知識點總結 摘要&#xff1a;PMIC (Power Management Integrated Circuit) 是現代電子設備中至關重要的組件&#xff0c;負責電源管理&#xff0c;包括電壓調節、電源轉換、電池管理和功耗優化等。PMIC 中的數字部分主要涉及控制邏輯、狀態機、寄存器配置、通信接口&am…

PYTHON訓練營DAY28

類 &#xff08;一&#xff09;題目1&#xff1a;定義圓&#xff08;Circle&#xff09;類 要求&#xff1a; 包含屬性&#xff1a;半徑 radius。包含方法&#xff1a; calculate_area()&#xff1a;計算圓的面積&#xff08;公式&#xff1a;πr&#xff09;。calculate_circ…

機器學習-人與機器生數據的區分模型測試 -數據篩選

內容繼續機器學習-人與機器生數據的區分模型測試 使用隨機森林的弱學習樹來篩選相對穩定的特征數據 # 隨機森林篩選特征 X data.drop([city, target], axis1) # 去除修改前的城市名稱列和目標變量列 y data[target] X_train, X_test, y_train, y_test train_test_split(X…

Data whale LLM universe

使用LLM API開發應用 基本概念 Prompt Prompt 最初指的是自然語言處理研究人員為下游任務設計的一種任務專屬的輸入模板。 Temperature 使用Temperature參數控制LLM生成結果的隨機性和創造性&#xff0c;一般取值設置在0~1之間&#xff0c;當取值接近1的時候預測的隨機性較…

Azure 應用的托管身份與服務主體

Microsoft Entra ID -- 前稱 Azure Active Directory -- 提供強大的身份驗證和授權功能。托管身份和服務主體通過限制憑據暴露的風險來幫助確保對 Azure 資源的訪問安全。 托管身份為Azure原生應用程序自動管理身份&#xff0c;而服務主體則非常適合需要訪問Azure資源的外部應…

16 C 語言布爾類型與 sizeof 運算符詳解:布爾類型的三種聲明方式、執行時間、賦值規則

1 布爾類型 1.1 布爾類型概述 布爾類型用于表示邏輯上的真&#xff08;true&#xff09;和假&#xff08;false&#xff09;兩種狀態&#xff0c;是編程中條件判斷和邏輯運算的基礎。在 C 語言中&#xff0c;布爾值的表示方式隨著標準的發展而不斷完善。 1.2 布爾類型的三種聲…

【C++詳解】string各種接口如何使用保姆級攻略

文章目錄 一、string介紹二、string使用構造函數析構函數賦值運算符重載string的遍歷修改方法1、下標[]2、迭代器3、范圍for 迭代器使用詳解const迭代器反向迭代器&#xff08;reverse) Capacity(容量相關)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(縮容)reserve(擴…

回調函數應用示例

回調函數是一種通過函數指針&#xff08;或引用&#xff09;調用的函數&#xff0c;它在特定事件或條件發生時被另一個函數調用。回調函數的核心思想是將函數作為參數傳遞&#xff0c;以便在適當的時候執行自定義邏輯&#xff0c;常用于異步編程、事件驅動架構等場景。 業務場景…

linux標準庫頭文件解析

linuxc標準庫 C 標準庫&#xff08;C Standard Library&#xff09;包含了一組頭文件&#xff0c;這些頭文件提供了許多函數和宏&#xff0c;用于處理輸入輸出、字符串操作、數學計算、內存管理等常見編程任務。。 頭文件功能簡介<stdio.h>標準輸入輸出庫&#xff0c;包含…

Unbuntu 命令

Ubuntu 命令速查表? ?分類??命令??功能描述??示例/常用選項????文件與目錄?ls列出目錄內容ls -a&#xff08;顯示隱藏文件&#xff09;; ls -lh&#xff08;詳細列表易讀大小&#xff09; cd切換目錄cd ~&#xff08;主目錄&#xff09;; cd ..&#xff08;上級…

怎么在excel單元格1-5行中在原來內容前面加上固定一個字?

環境&#xff1a; WPS 2024 問題描述&#xff1a; 怎么在excel單元格1-5行中在原來內容前面加上固定一個字&#xff1f; 解決方案&#xff1a; 1.在Excel中&#xff0c;如果您想在單元格的內容前面添加一個固定的字&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法…

Linux zip、unzip 壓縮和解壓

zip 命令用于壓縮文件&#xff0c;壓縮后的文件后綴名為 .zip 。 對應的解壓命令是 unzip 。 測試用的目錄結構如下&#xff0c; userzn:~/test$ tree . ├── folder1 │ ├── folder111 │ │ └── file1.txt │ └── main1.c ├── folder2 │ ├── …

【C語言練習】047. 理解遞歸與循環的轉換

047. 理解遞歸與循環的轉換 047. 理解遞歸與循環的轉換1. 遞歸與循環的基本概念遞歸循環2. 遞歸與循環的轉換示例1:計算階乘示例2:漢諾塔問題3. 遞歸與循環的適用場景遞歸:循環:一、遞歸的適用場景與代碼示例1. 分治問題2. 樹形結構遍歷3. 復雜狀態問題二、循環的適用場景與…