一、引言
在智能体(Agent)的应用场景中,其自主规划并调用工具完成任务的能力极大提升了工作效率,但
并非所有操作都适合完全自动化执行。像删除数据库表、删除文件、发起转账这类高风险动作,一旦
执行失误,可能会引发数据丢失、财产损失等严重后果。因此,为高风险操作引入人工审批环节,成
为保障系统安全的关键举措。
此前我们曾基于Spring AI Alibaba技术栈实现了智能体执行过程中的人工介入能力,本文将换用Pyt
hon技术栈,依托LangChain、LangGraph与DeepAgents,详细演示如何为Agent的高危工具调用
添加人工审批机制,并对比两种技术栈的实现思路。
二、核心技术栈简介
(一)LangChain
LangChain作为大语言模型应用开发框架,主要负责模型和工具的抽象。它能够将不同的大语言模型
和各类工具进行标准化封装,让开发者可以更便捷地实现模型与工具的调用,为智能体的构建提供基
础支撑。
(二)LangGraph
LangGraph专注于执行状态、检查点的管理以及执行流程的恢复。在人工介入的场景中,它能让Agent
的执行流程真正暂停下来,并保存当前的执行状态,待人工审批完成后,可从暂停点继续执行任务,确
保流程的连贯性。
(三)DeepAgents
DeepAgents用于创建支持工具调用和中断审批的Agent。它可以根据预设的规则,判断哪些工具调用属
于高风险操作,并在合适的时机触发人工审批流程,实现Agent自主执行与人工干预的有机结合。
(四)通义千问兼容OpenAI API
作为底层大模型,通义千问通过兼容OpenAI API,为智能体提供强大的语义理解和任务规划能力,让Agent
能够准确分析用户需求,合理规划工具调用步骤。
三、Agent人工介入的必要性
Agent的核心价值在于自主完成任务,但在面对高风险操作时,完全自动化执行存在极大隐患:
数据安全风险:删除数据库表、删除文件等操作,若因Agent判断失误或指令理解偏差执行错误,可能
导致重要数据永久丢失,给企业带来难以挽回的损失。
财产安全风险:发起转账等涉及资金的操作,一旦出现错误,可能造成直接的财产损失。
系统稳定性风险:修改线上配置、调用外部系统执行不可逆操作,可能会影响系统的正常运行,甚至导
致系统瘫痪,影响业务的连续性。
因此,合理的模式是:普通查询类等低风险动作由Agent自动执行,而高风险动作必须先进入人工审批流程,
经人工确认无误后再执行。
在本次示例中,我们定义了三个工具:
query_table_data:查询表数据,属于低风险操作,可由Agent自动执行。
delete_table:删除数据表,高风险操作,需人工审批。
delete_file:删除文件,高风险操作,需人工审批。
用户输入的任务为:先查询product表的数据,再删除user表,最后删除lucaju.txt文件。Agent在执行过程中,
会先自动完成查询表数据的操作,当执行到删除表和删除文件的高风险动作时,流程将被中断,等待人工审批。
四、具体实现步骤
(一)初始化大模型
首先需要初始化大模型,这里我们使用通义千问兼容OpenAI API的方式进行调用。代码示例如下:
import os
from langchain.chat_models import init_chat_model
llm = init_chat_model(
model="kimi-k2.5",
model_provider="openai",
api_key=os.getenv("AliQwen_API"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model_kwargs={"reasoning_effort": "none"},
)
在上述代码中,我们通过init_chat_model函数初始化模型,指定模型为kimi-k2.5,模型提供商为openai,
并通过环境变量获取API密钥,将base_url指向阿里云DashScope的兼容接口。model_kwargs中的参数可根
据实际模型的支持情况进行调整。
需要提前配置环境变量:
export AliQwen_API="你的 API Key"
(二)定义工具
使用LangChain的@tool装饰器定义工具,示例代码如下:
from langchain.tools import tool
@tool
def delete_table(table_name: str) -> str:
""" 删除指定的表 """
return f"删除表{table_name}"
@tool
def delete_file(file_name: str) -> str:
""" 删除指定的文件 """
return f"删除文件{file_name}"
@tool
def query_table_data(table_name: str) -> str:
""" 查询指定表的数据 """
return f"查询表{table_name}的数据"
为了演示效果,工具内部仅返回操作描述字符串,在实际项目中,delete_table可能会执行SQL语句删除
数据库表,delete_file可能会操作对象存储或服务器文件系统来删除文件。
(三)配置Checkpointer
Human-in-the-loop(人在回路中)的核心并非简单地询问“是否确认”,而是要让Agent的执行流程真
正暂停,并能从暂停点恢复执行,这就需要保存执行状态。示例中使用LangGraph提供的内存检查点来实现这一功能:
from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver()
config = {"configurable": {"thread_id": "123"} }
通过InMemorySaver创建检查点存储对象,config用于配置线程ID等信息,确保不同任务的执行状态相互独立。
(四)创建Agent并执行任务
借助DeepAgents创建支持工具调用和中断审批的Agent,并执行用户任务。在执行过程中,当Agent调
用高风险工具时,流程会自动中断,等待人工审批。人工审批通过后,Agent将从暂停点继续执行后续任务;
若审批不通过,则终止任务执行或根据人工指示进行调整。
五、与Spring AI Alibaba方案对比
(一)技术栈差异
Spring AI Alibaba方案基于Java生态,适合在Spring框架为主的企业级应用中使用;而本次的Python方案
依托LangChain、LangGraph等Python生态的框架,更适合Python技术栈的项目。
(二)实现复杂度
两种方案在核心逻辑上相似,都需要实现高风险操作的识别、流程暂停与恢复以及人工审批交互。但由于技
术栈的不同,在具体实现细节上存在差异。Spring AI Alibaba方案可能更依赖于Spring的依赖注入、AOP等
特性来实现功能;Python方案则借助LangChain的装饰器、LangGraph的状态管理等机制来完成。
(三)适用场景
Spring AI Alibaba方案适用于对性能要求较高、业务逻辑复杂的企业级应用,尤其是已经采用Spring框架的
项目;Python方案则更适合快速原型开发、数据科学相关项目以及对灵活性要求较高的场景。
六、生产落地建议
(一)审批流程优化
在生产环境中,人工审批流程应尽可能高效。可以结合企业的组织架构,设置不同级别审批权限,对于一般高
风险操作由普通运维人员审批,对于重大操作则需由管理人员审批。同时,可通过消息通知、待办任务提醒等
方式,确保审批人员及时处理审批请求。
(二)日志与监控
完善的日志记录和监控机制至关重要。要记录Agent的每一步操作、人工审批的结果以及任务的执行状态,以便
在出现问题时进行排查和追溯。同时,通过监控系统实时监控Agent的运行状态,及时发现异常情况并进行处理。
(三)模型与工具管理
定期对大模型和工具进行评估和更新。随着业务的发展,可能需要新增或调整工具,同时大模型的性能和能力也
可能会有提升,及时更新可以确保Agent始终以最佳状态完成任务。
(四)容错机制
建立完善的容错机制,当Agent在执行过程中出现错误或人工审批不通过时,能够优雅地处理异常情况,如回滚
已执行的操作、给出明确的错误提示等,避免因异常导致系统状态混乱。