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