Type something to search...
构建智能ai代理:5个步骤处理动态输入与人类干预的解决方案

构建智能ai代理:5个步骤处理动态输入与人类干预的解决方案

在这一部分,我们将深入探讨如何在LangGraph工作流中管理动态输入和集成人类中断。

这对于创建能够适应用户输入并实时做出相应反应的智能系统至关重要。让我们看看如何有效地实现这一点!

在这篇文章中,我们将探讨:

  • 动态输入,通过实时用户问题。
  • 人类中断,根据用户输入修改流程。
  • 如何将工具绑定到LangChain Groq模型,以实现高效的AI响应。

目标 🎯

我们正在构建一个图,将会:

  • 接受人类输入(例如,“Harsha是谁?”)。
  • 使用预定义的 工具(例如,检索一个人的详细信息和位置)。
  • 随着每个用户输入和查询动态更新状态。

最终目标是创建一个更 交互式和响应式AI系统,能够处理实时数据和用户问题。 🤖

代码演示 💻

这是一个使用 LangGraph 集成动态用户交互和基于工具的响应的实现:

from typing_extensions import TypedDict, Annotated
from langchain_core.messages import HumanMessage, AnyMessage, SystemMessage, AIMessage
from langgraph.graph import StateGraph, START, END
from langchain_groq import ChatGroq
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from langgraph.checkpoint.memory import MemorySaver
from dotenv import load_dotenv

load_dotenv()

class MessagesState(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]

def get_person_details(person_name: str) -> str:
    """检索个人详细信息。"""
    return f"{person_name} 是一名DevOps工程师。"

def get_person_location(person_name: str) -> str:
    """检索个人位置。"""
    return f"{person_name} 住在班加罗尔。"

llm = ChatGroq(model="llama-3.1-8b-instant")

tools = [get_person_details, get_person_location]
llm_with_tools = llm.bind_tools(tools)

def assistant(state: MessagesState):
    sys_msg = SystemMessage(
        "您是一位乐于助人的助手,使用可用工具准确回答问题。")
    return {"messages": llm_with_tools.invoke([sys_msg] + state["messages"])}

def ask_human_input(prompt: str) -> str:
    """提示用户输入的辅助函数。"""
    return input(f"{prompt}\n> ")

builder = StateGraph(MessagesState)
builder.add_node("assistant", assistant)
builder.add_node("tools", ToolNode(tools=tools))

builder.add_edge(START, "assistant")
builder.add_conditional_edges("assistant", tools_condition)
builder.add_edge("tools", "assistant")

graph = builder.compile(
    checkpointer=MemorySaver(),
    interrupt_before=["assistant"],
    interrupt_after=[],
)

thread = {"configurable": {"thread_id": "1"}}

graph.invoke({"messages": [HumanMessage("Harsha是谁?")]}, thread)

user_question = ask_human_input(
    "您的问题:Harsha是谁?\n您想问Harsha其他问题吗?")
user_message = HumanMessage(content=user_question)

graph.update_state(thread, {"messages": [user_message]})

result = graph.stream(None, thread, stream_mode="values")

for event in result:
    event["messages"][-1].pretty_print()

输出

你的问题:Harsha是谁?

================================ 人类消息 =================================

================================== AI消息 ==================================
工具调用:
get_person_details (call_ve92)
调用ID:call_ve92
参数:
person_name: Harsha

================================= 工具消息 =================================
名称:get_person_details

Harsha是一个DevOps工程师。

解释:

  1. 系统以问题开始,“Harsha是谁?”
  2. 添加了一个中断,询问我们是否想要更改问题。
  3. 当我们说不时,AI识别到这一点,并理解这是一个需要工具的查询,并调用get_person_details工具。
  4. 工具回应,“Harsha是一名DevOps工程师。”

你的问题:Harsha是谁?
你想问Harsha的其他事情吗?

Harsha住在哪里?

================================ 人类消息 =================================

Harsha住在哪里?

================================== AI消息 ==================================

工具调用:
get_person_location (call_epdv)
调用ID:call_epdv
参数:
person_name: Harsha

================================= 工具消息 =================================

名称:get_person_location

Harsha住在班加罗尔。

Please translate the following text to Chinese. Requirements: 1. Keep code blocks (```) unchanged 2. Keep inline code (`) unchanged 3. Keep Markdown formatting 4. Use these technical term translations: LangGraph -> LangGraph dynamic inputs -> 动态输入 human interrupts -> 人类中断 tools -> 工具 LangChain Groq model -> LangChain Groq模型 interactive and responsive AI system -> 交互式和响应式AI系统 StateGraph -> 状态图 START -> 开始 END -> 结束 ChatGroq -> ChatGroq add_messages -> 添加消息 ToolNode -> 工具节点 tools_condition -> 工具条件 MemorySaver -> 内存保存器 load_dotenv -> 加载环境变量 TypedDict -> 类型字典 Annotated -> 注解 AnyMessage -> 任何消息 HumanMessage -> 人类消息 SystemMessage -> 系统消息 AIMessage -> AI消息 llm -> 语言模型 invoke -> 调用 update_state -> 更新状态 stream -> 流 stream_mode -> 流模式

     Text: ## Explanation:
  1. The system starts with the question, “Who is Harsha?”
  2. An interrupt is added which asks if we wanna change the question.
  3. As we asked a new Question “Where is Harsha living?”
  4. The AI recognizes this and understands that this is a query requiring a tool and calls the get_person_location tool.
  5. The tool fetches the information, “Harsha lives in Bangalore,” and returns it to the user.

工作原理 🛠️

工具:

  • get_person_details: 检索个人的职位。
  • get_person_location: 检索个人的位置信息。

状态管理: MessagesState 跟踪对话状态,包括用户的消息和系统响应。

人类中断:

  • 程序等待人类输入(例如,“Harsha是谁?”)。
  • 在接收到输入后,图会动态更新状态并提供响应。

图流:

  • 图从 assistant 节点开始,处理输入,调用工具,并更新状态。
  • 图流是 动态 的,因为新的输入会实时收集和处理。

示例互动 💬

  1. 系统消息: “您是一个使用可用工具准确回答问题的有用助手。”
  2. 用户问题: "Harsha是谁?"
  3. 助手回复: “Harsha是一名DevOps工程师。”
  4. 下一个问题: 系统提示用户: “您想要问关于Harsha的其他问题吗?”

结论 🎯

通过将 人类中断动态输入 集成到 LangGraph 中,我们使得 AI 代理在实时数据方面变得更加交互式和响应式。这种方法允许助手根据用户查询进行演变,使系统更智能、更个性化。无论是检索有关人员的信息还是调整变化的输入,这种方法为创建先进的 AI 驱动系统提供了灵活的基础。

免责声明: 本文已使用 AI 工具进行了改写,部分内容源自不同来源,以提供全面的概述。

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...