HumanLayer:开源 AI 智能体人类监督工具集,实现高风险操作管控与多场景协同
一、HumanLayer是什么
HumanLayer是一款开源的API与SDK工具集,旨在为AI智能体(Agent)提供人类监督能力,支持AI在执行高风险操作(如发送邮件、修改私人数据等)时触发人类审批、获取人类反馈或咨询建议。该工具兼容主流LLM(OpenAI/Llama/Claude)与AI框架(LangChain/CrewAI),通过多渠道通知(Slack/Email/Discord等)实现人类与AI的高效协同,解决LLM可靠性不足、 hallucination(幻觉)等问题,确保高风险操作的安全性与准确性,适用于客户沟通、数据管理、内容发布等多类业务场景。
在AI智能体(Agent)逐渐普及的背景下,工具调用成为AI实现复杂任务的核心能力——从查询数据、管理日程到操作数据库、发布内容,AI通过调用工具可大幅提升工作效率。但与此同时,高价值的工具往往伴随着高风险:例如让AI直接发送客户邮件可能因内容不当引发投诉,允许AI修改生产环境数据库可能导致数据丢失,这些“高风险操作”即便只有10%的失误率,也可能给个人或企业带来严重损失。
HumanLayer正是为解决这一痛点而生的开源工具:它是一套包含API与SDK的工具集,核心功能是在AI智能体与工具之间搭建“人类监督层”,让AI在执行关键操作时必须与人类交互(如获取审批、咨询建议),从而平衡AI的自动化能力与操作安全性。
简单来说,HumanLayer的定位可概括为:
不是替代AI:不改变AI的推理逻辑与工具调用能力,而是在AI与工具之间增加“安全闸门”;
不是独立框架:无需替换现有LLM或AI开发框架,可无缝集成到已有工作流中;
专注“人类在环”:核心价值是让人类参与AI的高风险决策环节,解决LLM可靠性不足的问题。
从AI智能体发展阶段来看,HumanLayer主要服务于“第二代Agentic Assistants(智能体助手)”与“第三代Autonomous Agents(自治智能体)”:
第二代智能体:由人类发起任务(如“发送欢迎邮件给新客户”),AI通过框架驱动工具调用完成任务,HumanLayer可在此阶段为工具调用增加审批环节;
第三代自治智能体:无需人类主动触发,AI自主规划任务、管理进度(如“每日检查LinkedIn收件箱并回复咨询”),HumanLayer可支持AI在需要时主动联系人类获取反馈,确保任务方向正确。

二、功能特色
HumanLayer的功能围绕“人类监督AI操作”展开,核心特色可通过下表清晰呈现,涵盖核心能力、兼容性、交互渠道等关键维度:
| 功能类别 | 具体能力 | 价值说明 |
|---|---|---|
| 核心监督能力 |
1. 函数调用审批(@hl.require_approval()) 2. 人类作为工具(hl.human_as_tool()) |
1. 高风险函数(如发送邮件、修改CRM数据)必须经人类批准后才能执行,拒绝时可向LLM反馈原因 2. AI可主动调用“人类工具”获取建议(如“这封邮件内容是否合适”),支持调试、咨询等场景 |
| 多渠道交互 | 支持Slack、Email、Discord、CLI(命令行) | 人类可通过常用渠道接收AI的请求(如Slack通知审批、邮件查看内容),无需额外安装专用软件,降低使用门槛 |
| 细粒度路由 | 审批请求可定向发送给特定团队或个人 | 例如“财务相关操作”仅发送给财务团队,“客户沟通操作”仅发送给客服团队,确保审批专业性 |
| 全栈兼容性 |
1. 支持主流LLM:OpenAI(GPT-4o等)、Llama、Claude 2. 支持主流框架:LangChain、CrewAI、ControlFlow、Raw OpenAI Client | 无需重构现有AI工作流,可直接集成到已使用的LLM或框架中,适配不同企业的技术栈 |
| 灵活反馈机制 |
1. 审批结果(通过/拒绝)自动同步给LLM 2. 人类可添加文本反馈(如“邮件标题需突出优惠活动”) | LLM可根据反馈调整操作(如修改邮件内容后重新请求审批),形成“AI-人类”协同闭环 |
| 开源可扩展 | SDK开源(Apache 2 License),支持自定义扩展 | 企业可根据需求修改代码(如增加内部通讯工具集成、自定义审批流程),社区贡献可丰富功能生态 |
此外,HumanLayer还具备“风险分级适配”特性——针对不同风险等级的操作提供差异化监督策略,具体风险分级如下表:
| 风险等级 | 操作示例 | 监督策略 | 风险影响范围 |
|---|---|---|---|
| 低风险 |
1. 读取公开数据(如查询Wikipedia、调用公开API) 2. 向AI开发者发送私人通知(如Slack进度更新) | 无需监督,AI可直接执行 | 仅影响信息获取或开发者个人,无外部风险 |
| 中风险 |
1. 读取私人数据(如查看企业邮箱、查询CRM客户信息) 2. 按固定模板发送消息(如使用预设文案发送验证码) | 可选监督(根据业务需求配置) | 可能泄露内部数据或影响少量用户,风险可控 |
| 高风险 |
1. 代表个人/企业对外沟通(如发送客户邮件、发布社交媒体内容) 2. 修改私人数据(如更新CRM客户信息、调整账单数据) | 强制监督(必须经人类审批) | 可能影响客户关系、企业声誉或造成数据错误,风险较高 |
三、技术细节
1. 核心工作原理
HumanLayer的工作逻辑基于“装饰器(Decorator)”与“工具注册”机制,核心流程可分为3步:
初始化SDK:开发者通过代码初始化HumanLayer客户端,建立与服务的连接;
标记监督函数:使用装饰器(如@hl.require_approval())标记需要监督的函数,或注册“人类工具”(hl.human_as_tool());
触发交互闭环:AI调用标记函数时,HumanLayer自动拦截请求,通过指定渠道通知人类;人类反馈后,结果同步给LLM,决定是否继续执行函数。
以“发送邮件”场景为例,具体流程如下图所示:
AI智能体 → 调用send_email()函数(已标记@hl.require_approval()) → HumanLayer拦截请求 → 向指定人类发送审批通知(含邮件内容) → 人类审批(通过/拒绝+反馈) → HumanLayer将结果同步给AI → AI执行函数(通过)或调整内容(拒绝)
2. 技术栈与架构
HumanLayer支持两种主流开发语言,技术栈清晰,架构轻量易集成:
| 维度 | Python SDK | TypeScript/JS SDK |
|---|---|---|
| 安装方式 | pip install humanlayer | npm install @humanlayer/sdk |
| 核心依赖 | requests(网络请求)、python-dotenv(环境变量管理) | axios(网络请求)、@types/node(类型定义) |
| 核心组件 |
1. HumanLayer客户端(初始化与配置) 2. 装饰器模块(@require_approval) 3. 工具注册模块(human_as_tool) |
1. HumanLayer类(初始化与配置) 2. 审批装饰器(requireApproval) 3. 人类工具工厂(createHumanAsTool) |
| 通信方式 | HTTP请求(与HumanLayer服务交互) | HTTP请求(与HumanLayer服务交互) |
| 数据格式 | JSON(请求/响应数据) | JSON(请求/响应数据) |
其架构特点是“去中心化集成”——无需部署独立服务器(基础功能依赖HumanLayer公共服务,也支持未来自定义服务器部署),SDK直接嵌入AI工作流,不增加额外系统复杂度。
3. 关键功能技术实现
(1)函数审批(@hl.require_approval())
实现逻辑:装饰器通过包装目标函数,在函数执行前插入“请求审批”逻辑;若审批通过,执行原函数;若拒绝,抛出异常并将反馈传递给LLM。
参数配置:支持自定义审批接收人(如approvers=["team@example.com"])、通知渠道(如channel="slack")、审批超时时间(如timeout=3600秒)。
数据传递:审批请求会携带函数的完整参数(如send_email的to、subject、body),确保人类可全面评估操作合理性。
(2)人类作为工具(hl.human_as_tool())
实现逻辑:将“人类”封装为AI可调用的工具(符合LangChain/CrewAI等框架的工具规范),AI调用时会生成“咨询请求”(含问题描述与上下文),人类回复后以“工具输出”形式返回给AI。
使用场景:支持自由文本咨询(如“这个客户需求的优先级如何”)、选项选择(如“邮件发送时间选上午10点还是下午2点”),满足不同交互需求。
(3)多渠道通知
实现逻辑:HumanLayer通过“渠道适配器”模块支持不同平台的通知,例如Slack通过Slack API发送消息,Email通过SMTP协议发送邮件,CLI通过命令行输出提示。
一致性体验:不同渠道的请求内容格式统一(含操作类型、参数、反馈入口),人类无需适应不同渠道的交互差异。

四、应用场景
HumanLayer的核心价值是“管控高风险操作、提升AI可靠性”,适用于各类需要AI与人类协同的业务场景,以下为典型场景示例:
1. 客户沟通自动化
场景描述:企业使用AI智能体自动处理客户沟通(如新客户欢迎邮件、售后问题回复、活动通知),但邮件内容需符合品牌调性,避免表述不当。
HumanLayer应用方式:
用@hl.require_approval()装饰send_email()函数,AI生成邮件后自动发送审批请求给客服团队;
客服通过Slack查看邮件内容,点击“通过”则AI发送邮件,或添加反馈(如“需补充售后联系方式”)让AI修改;
若客户回复邮件,AI可调用hl.human_as_tool()咨询客服:“客户提到的退款问题是否需要优先处理”。
价值:确保客户沟通内容准确,减少因AI生成低质量文本导致的客户投诉,同时降低客服团队的重复工作(仅需审批/反馈,无需手动写邮件)。
2. CRM数据管理
场景描述:AI智能体定期同步客户数据到CRM系统(如将网站注册用户添加到CRM、更新客户购买记录),但CRM数据错误可能影响销售决策,需避免AI误操作。
HumanLayer应用方式:
用@hl.require_approval()装饰update_crm_record()函数,AI修改数据前需经销售团队审批;
审批请求包含“原数据”“修改后数据”“修改原因”,销售通过Email确认是否允许修改;
若AI无法识别客户归属(如同一客户有两个账号),可调用hl.human_as_tool()向销售咨询:“客户A的两个账号是否需要合并”。
价值:防止AI因数据理解错误导致的CRM数据混乱,保障销售团队使用数据的准确性。
3. 社交媒体内容发布
场景描述:企业用AI智能体生成社交媒体内容(如LinkedIn产品动态、Twitter活动宣传),内容需符合合规要求(如不涉及虚假宣传),且需与品牌风格一致。
HumanLayer应用方式:
用@hl.require_approval()装饰post_social_media()函数,AI生成内容后发送给市场团队审批;
市场团队通过Discord查看内容,支持直接修改(如“将‘最先进’改为‘行业领先’”)并同步给AI;
AI可调用hl.human_as_tool()咨询:“这个产品动态是否需要添加客户案例”,获取市场团队建议。
价值:降低社交媒体内容的合规风险,确保内容符合品牌调性,同时提升内容生成效率。
4. 内部流程自动化
场景描述:企业用AI智能体处理内部流程(如员工报销审核、加班申请反馈),流程需符合公司制度,避免AI误判。
HumanLayer应用方式:
用@hl.require_approval()装饰approve_expense()函数,AI初步审核报销单后,需财务团队最终审批;
财务团队通过CLI(命令行)查看报销明细(如“金额是否超标、发票是否合规”),快速确认审批结果;
若AI无法判断报销类目(如“团建费用是否属于福利支出”),可调用hl.human_as_tool()向HR咨询。
价值:规范内部流程执行,减少AI因不熟悉公司制度导致的误判,提升流程处理效率。

五、使用方法
HumanLayer支持Python与TypeScript/JS两种语言,以下为详细使用步骤,包含环境准备、核心功能调用、框架集成示例:
1. 环境准备
(1)Python SDK(推荐Python 3.8+)
安装SDK:
pip install humanlayer
配置环境变量(可选,也可在代码中直接传入):
创建
.env文件,添加API密钥(需从HumanLayer官网获取):HUMANLAYER_API_KEY=your_api_key
初始化客户端:
from humanlayer import HumanLayer import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 初始化HumanLayer hl = HumanLayer(api_key=os.getenv("HUMANLAYER_API_KEY"))
(2)TypeScript/JS SDK(推荐Node.js 16+)
安装SDK:
npm install @humanlayer/sdk
配置环境变量:
创建
.env文件:HUMANLAYER_API_KEY=your_api_key
初始化客户端:
import { HumanLayer } from "@humanlayer/sdk"; import dotenv from "dotenv"; // 加载环境变量 dotenv.config(); // 初始化HumanLayer const hl = new HumanLayer({ apiKey: process.env.HUMANLAYER_API_KEY });
2. 核心功能使用示例
(1)函数审批(@hl.require_approval())
以“发送客户欢迎邮件”为例,Python代码如下:
from humanlayer import HumanLayer
import os
from dotenv import load_dotenv
load_dotenv()
hl = HumanLayer(api_key=os.getenv("HUMANLAYER_API_KEY"))
# 用装饰器标记需要审批的函数
@hl.require_approval(
approvers=["customer_support@example.com"], # 审批人邮箱
channel="slack" # 通知渠道(slack/email/cli)
)
def send_welcome_email(to: str, subject: str, body: str):
"""发送新客户欢迎邮件"""
# 实际发送邮件的逻辑(如使用smtplib或邮件API)
print(f"发送邮件给:{to},主题:{subject},内容:{body}")
return {"status": "success", "message": "邮件已发送"}
# 模拟AI调用函数(使用任意工具调用框架)
def run_ai_task():
# AI生成邮件内容
email_to = "danny@example.com"
email_subject = "欢迎加入我们的平台!"
email_body = """
亲爱的Danny:
很高兴您完成了注册!您只需再邀请1位团队成员,即可解锁全部功能。
如有疑问,可随时联系客服团队。
祝您使用愉快!
"""
# 调用需要审批的函数(会触发HumanLayer审批)
result = send_welcome_email(
to=email_to,
subject=email_subject,
body=email_body
)
print("函数执行结果:", result)
# 执行AI任务
if __name__ == "__main__":
run_ai_task()执行流程:
运行代码后,HumanLayer会向
customer_support@example.com的Slack账号发送审批通知;客服在Slack中查看邮件内容,点击“Approve”(通过)或“Reject”(拒绝);
若通过,send_welcome_email()函数执行,发送邮件;若拒绝,函数不执行,AI会收到拒绝反馈(如“邮件需添加客服电话”)。
(2)人类作为工具(hl.human_as_tool())
以“AI咨询邮件内容是否合适”为例,Python代码如下:
from humanlayer import HumanLayer
import os
from dotenv import load_dotenv
load_dotenv()
hl = HumanLayer(api_key=os.getenv("HUMANLAYER_API_KEY"))
# 创建“人类工具”
contact_support = hl.human_as_tool(
recipients=["customer_support@example.com"], # 接收咨询的人
channel="email" # 咨询渠道
)
# 发送邮件函数(无需强制审批,但需AI咨询建议)
def send_promotion_email(to: str, subject: str, body: str):
"""发送促销活动邮件"""
print(f"发送邮件给:{to},主题:{subject},内容:{body}")
return {"status": "success"}
# 模拟AI调用工具(集成LangChain框架)
from langchain.agents import initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI
def run_langchain_agent():
# 初始化LLM(OpenAI GPT-4o)
llm = ChatOpenAI(model="gpt-4o", api_key=os.getenv("OPENAI_API_KEY"))
# 注册工具(发送邮件+人类咨询)
tools = [
{
"name": "send_promotion_email",
"func": send_promotion_email,
"description": "发送促销活动邮件给客户,参数包括to(邮箱)、subject(主题)、body(内容)"
},
{
"name": "contact_support",
"func": contact_support,
"description": "咨询客服团队,获取邮件内容建议或操作指导"
}
]
# 初始化Agent
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 执行AI任务
agent.run("生成一封促销邮件,内容为‘夏季活动全场8折’,发送给客户lisa@example.com。先咨询客服团队内容是否合适,再决定是否发送。")
if __name__ == "__main__":
run_langchain_agent()执行流程:
AI生成促销邮件内容后,会调用contact_support工具,向客服发送咨询请求(含邮件内容);
客服通过Email回复建议(如“需添加活动时间:6月1日-6月30日”);
AI接收反馈后,修改邮件内容,再次调用contact_support确认(或直接发送,根据prompt逻辑)。
3. 框架集成示例(LangChain/CrewAI)
(1)LangChain集成
# 安装依赖
# pip install humanlayer langchain openai
from humanlayer import HumanLayer
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain.chat_models import ChatOpenAI
from langchain.tools import StructuredTool
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
import os
from dotenv import load_dotenv
load_dotenv()
hl = HumanLayer(api_key=os.getenv("HUMANLAYER_API_KEY"))
# 1. 定义需要审批的工具函数
@hl.require_approval(approvers=["finance@example.com"], channel="email")
def process_refund(customer_id: str, amount: float, reason: str) -> dict:
"""处理客户退款请求,需财务团队审批"""
return {
"status": "approved",
"customer_id": customer_id,
"amount": amount,
"message": f"退款{amount}元已处理,原因:{reason}"
}
# 2. 注册LangChain工具
tools = [
StructuredTool.from_function(process_refund)
]
# 3. 配置Prompt
prompt = ChatPromptTemplate.from_messages([
("system", "你是处理客户退款的AI助手,处理退款前必须通过财务团队审批。"),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# 4. 初始化Agent
llm = ChatOpenAI(model="gpt-4o", api_key=os.getenv("OPENAI_API_KEY"))
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 5. 执行任务
if __name__ == "__main__":
agent_executor.invoke({
"input": "处理客户ID为C12345的退款请求,金额500元,原因是产品质量问题。"
})(2)CrewAI集成
# 安装依赖
# pip install humanlayer crewai openai
from humanlayer import HumanLayer
from crewai import Agent, Task, Crew
from crewai_tools import tool
import os
from dotenv import load_dotenv
load_dotenv()
hl = HumanLayer(api_key=os.getenv("HUMANLAYER_API_KEY"))
# 1. 定义带审批的工具
@tool
@hl.require_approval(approvers=["marketing@example.com"], channel="slack")
def publish_blog_post(title: str, content: str, author: str) -> dict:
"""发布博客文章,需市场团队审批内容合规性"""
return {
"status": "published",
"title": title,
"author": author,
"message": "博客已发布到官网"
}
# 2. 定义Agent
content_writer = Agent(
role="内容 writer",
goal="生成高质量的产品博客文章,突出产品优势",
backstory="你是经验丰富的科技产品博客作者,擅长用通俗易懂的语言描述技术功能。",
llm=ChatOpenAI(model="gpt-4o", api_key=os.getenv("OPENAI_API_KEY")),
tools=[publish_blog_post]
)
# 3. 定义Task
task = Task(
description="生成一篇关于HumanLayer的博客文章,标题包含‘AI监督工具’,内容介绍核心功能与应用场景。生成后调用publish_blog_post工具发布,作者为‘技术团队’。",
agent=content_writer,
expected_output="博客文章发布成功的反馈结果"
)
# 4. 执行Crew
if __name__ == "__main__":
crew = Crew(agents=[content_writer], tasks=[task], verbose=True)
result = crew.kickoff()
print("任务结果:", result)
六、常见问题解答(FAQ)
1. HumanLayer需要部署服务器吗?
不需要。当前版本的HumanLayer SDK通过调用官方公共服务实现通知与审批管理,开发者无需部署独立服务器;未来将支持“自定义服务器”(Open Protocol for BYO server,见Roadmap),企业可部署私有服务以满足数据隐私需求。
2. 审批请求会过期吗?如果人类长时间不回复怎么办?
支持设置审批超时时间(通过timeout参数,单位:秒),例如@hl.require_approval(timeout=3600)表示1小时内未审批则自动拒绝。超时后,AI会收到“审批超时”反馈,可根据prompt逻辑重新发起请求或终止任务。
3. 如何自定义审批通知的内容格式?
当前支持通过message_template参数自定义通知内容,例如:
@hl.require_approval(
message_template="需要您审批【{function_name}】操作:\n参数:{parameters}\n请在1小时内处理。"
)
def send_email(to: str, subject: str, body: str):
...
其中{function_name}会自动替换为函数名(如send_email),{parameters}会自动替换为函数参数(如to: danny@example.com)。
4. HumanLayer支持多轮审批吗?(如“先部门审批,再公司审批”)
当前版本(Beta)暂不支持多轮审批,仅支持单级审批;未来将通过“Composite Contact Channels”(见Roadmap,当前Work in Progress)支持多轮审批,可配置“部门→公司”“初级审核→高级审核”等流程。
5. 免费使用有额度限制吗?
HumanLayer作为开源项目,SDK本身免费使用;官方公共服务的免费额度需参考官网说明(当前未公开具体额度),企业可通过部署自定义服务器(未来功能)实现无额度限制使用。
6. 如何查看审批历史记录?
当前可通过CLI命令查看审批记录(CLI功能已支持Beta),例如:
# Python CLI hl list_approvals --status approved # TypeScript CLI npx humanlayer list-approvals --status rejected
未来将支持Web控制台查看历史记录,方便团队追溯审批流程。
7. 若LLM生成的函数参数有误(如邮箱格式错误),HumanLayer能检测吗?
HumanLayer不直接检测参数格式错误,需开发者在函数内部添加参数校验逻辑,例如:
import re
from humanlayer import HumanLayer
hl = HumanLayer()
def is_valid_email(email: str) -> bool:
"""校验邮箱格式"""
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
return re.match(pattern, email) is not None
@hl.require_approval()
def send_email(to: str, subject: str, body: str):
if not is_valid_email(to):
raise ValueError(f"邮箱格式错误:{to}")
# 发送邮件逻辑
...参数校验失败时,函数会直接抛出异常,不触发审批请求。
8. 支持哪些编程语言之外的扩展?
当前仅支持Python与TypeScript/JS;未来计划通过社区贡献扩展其他语言(如Go、Java),开发者也可基于开源代码自行实现其他语言的SDK(遵循Apache 2 License)。
七、相关链接
八、总结
HumanLayer作为一款开源的AI智能体人类监督工具集,核心价值在于通过“审批拦截”与“人类工具”机制,解决LLM在高风险操作中的可靠性问题,实现AI与人类的高效协同;其支持主流LLM与框架,兼容多渠道交互,可无缝集成到现有AI工作流中,无需重构技术栈,降低企业使用门槛。从功能上看,当前Beta版本已覆盖“函数审批”“人类工具”“多渠道通知”等核心需求,同时通过Roadmap规划了多轮审批、自定义服务器等扩展功能,社区贡献可进一步丰富生态;从应用上看,其适用于客户沟通、数据管理、内容发布等多类场景,能帮助企业在享受AI自动化效率的同时,规避操作风险。整体而言,HumanLayer为“AI+人类”协同模式提供了轻量、灵活的解决方案,是企业落地AI智能体的重要安全工具。
版权及免责申明:本文由@AI工具箱原创发布。该文章观点仅代表作者本人,不代表本站立场。本站不承担任何相关法律责任。
如若转载,请注明出处:https://www.aipuzi.cn/ai-news/humanlayer.html

