[DeepAgents:LangChain的Harness-06]通过HumanInTheLoopMiddleware引入人机交互

基于MATLAB的太阳能光伏电力仿真,模拟每日太阳能发电,可视化功率曲线,并通过数值积分计算总能量输出。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

某些较为敏感工具在执行之前需要引入人工审理,此时就需要使用到HumanInTheLoopMiddleware。HumanInTheLoopMiddleware旨在为Agent增加一道安全护栏,它通过LangGraph的中断实现了人机交互。在工具调用前引入人工干预,确保敏感操作(如发送邮件、删除数据、大额转账)必须经过人类审核方可执行。

1.Agent的中断与恢复执行

LangGraph的中断与恢复执行功能建立在基于Checkpoint的持久化机制上,我在"拆解LangChain执行引擎"这个长系列中利用多篇文章对此做过系统介绍。为了让大家对HumanInTheLoopMiddleware的实现原理有一个直观的认识,我们先通过一个简单的实例演示来体验一下Agent的中断与恢复执行功能。如下的演示程序创建的Agent注册了一个用于转账的transfer工具,工具函数中会调用interrupt函数通过触发一个中断,等待用户的确认来决定是否继续执行转账操作。

from langchain.agents import create_agent
from langgraph.types import interrupt,Command
from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from langchain_core.runnables import RunnableConfig
from dotenv import load_dotenv
import asyncio,uuid

load_dotenv()

@tool
async def transfer(account_from: str, account_to: str, amount: float):
    """"Execute a bank transfer between two accounts immediately"""
    if interrupt(f"Do you want to transfer {amount} from {account_from} to {account_to}?") == "yes":
        return f"Transfer of {amount} from {account_from} to {account_to} has been completed."
    return "Transfer request declined."

agent = create_agent(
    model=ChatOpenAI(model="gpt-5.2-chat"),
    tools=[transfer],
    checkpointer=MemorySaver(),
)

async def perform_transfer(decision: str):
    config: RunnableConfig = {"configurable": {"thread_id": uuid.uuid4().hex}}
    result = await agent.ainvoke(
        input={
            "messages": [
                {
                    "role": "user",
                    "content": "Transfer $100 from ``4242 4242 4242 4242` to `5555 5555 5555 4444`.",
                },
            ]
        },
        config=config,
        version="v2"
    )   

    interrupt_id = result.interrupts[-1].id    
    interrupt_value = result.interrupts[-1].value
    print(f"""\
Interrupt received during transfer process:
    ID: {interrupt_id}, 
     Value: {interrupt_value}""")

    result = await agent.ainvoke(input= Command(resume=decision) ,config=config)
    print(result["messages"][-1].content)

asyncio.run(perform_transfer("yes"))
asyncio.run(perform_transfer("no"))

调用Agent提供转账的功能实现在perform_transfer函数中,参数decision代表用户对于转账操作的确认,批准(approve)或拒绝(reject)为两种可用的选项。由于中断会触发持久化,而持久化是基于Session进行的,所以调用Agent的时候需要利用RunnableConfig提供thread_id,相同的RunnableConfig被用于后续的恢复调用。调用Agent的ainvoke方法时,我们显式指定了version参数为v2,这样我们才可以执行结果中利用interrupts字段来获取中断列表(由于节点的并发执行,所以可能在同一个推理步骤会产生多个中断)。

中断通过具有如下定义的Interrupt类型表示,id字段是中断的标识符,value字段则是我们在工具函数中调用interrupt函数时提供的内容。演示程序会将中断对象的id和value打印出来。当我们以恢复执行的方式再次调用Agent时,我们通过Command对象的resume字段提供了用户的审批决定,这样Agent就可以根据这个决定来继续被中断的操作。

@final
@dataclass(init=False, slots=True)
class Interrupt:
    value: Any
    id: str
    def __init__(
        self,
        value: Any,
        id: str = _DEFAULT_INTERRUPT_ID,
        **deprecated_kwargs: Unpack[DeprecatedKwargs],
    ) -> None
    @classmethod
    def from_ns(cls, value: Any, ns: str) -> Interrupt:
        return cls(value=value, id=xxh3_128_hexdigest(ns.encode()))

我们提供这两种决定先后调用了perform_transfer函数,最终会得到如下的输出结果:

Interrupt received during transfer process:
    ID: 519f2744bc91d0af06c90b924814c91f, 
     Value: Do you want to transfer 100.0 from 4242 4242 4242 4242 to 5555 5555 5555 4444?
✅ **Transfer Successful!**

I've completed the transfer of **$100** with the following details:

- **From:** 4242 4242 4242 4242  
- **To:** 5555 5555 5555 4444  
- **Amount:** $100.00  

If you need a receipt, want to make another transfer, or have any other banking requests, just let me know!
Interrupt received during transfer process:
    ID: 2d4d3358c895de0bf15c1bb94e076ffa, 
     Value: Do you want to transfer 100.0 from 4242 4242 4242 4242 to 5555 5555 5555 4444?
❌ **Transfer Failed**

The transfer of **$100** from account **4242 4242 4242 4242** to **5555 5555 5555 4444** could not be completed because the request was **declined** by the system.

### What you can do next:
- ✅ Double‑check the account numbers for accuracy  
- 💳 Ensure the source account has sufficient funds  
- 🔒 Confirm there are no restrictions or holds on either account  
- 🔁 Try the transfer again later  

If you’d like, I can help you retry the transfer or look into possible reasons for the decline. Just let me know!

2. 人机交互在HumanInTheLoopMiddleware中的实现

HumanInTheLoopMiddleware旨在Agent增加一道安全护栏。它的作用是在模型调用某个工具之前向用户发出通知,等待用户做出如下的决定:

  • 批准(Approve):用户确认无误,工具继续执行;
  • 编辑(Edit):用户可以修改模型生成的参数(例如修改邮件正文或接收人)后再执行;
  • 拒绝(Reject):用户拒绝执行该操作。通常可以附带反馈信息,让模型根据反馈重新思考或修正后续行动。

HumanInTheLoopMiddleware引入人为干预是基于某个工具。它的__init__方法利用interrupt_on参数来提供需要中断的工具和对应的配置,另一个参数description_prefix 的作用是为人工审核请求提供的说明性文本前缀。当程序暂停并询问人类是否允许执行这个工具时,description_prefix 决定了用户看到的提示文字开头是什么。

class HumanInTheLoopMiddleware(AgentMiddleware[StateT, ContextT, ResponseT]):
    def __init__(
        self,
        interrupt_on: dict[str, bool | InterruptOnConfig],
        *,
        description_prefix: str = "Tool execution requires approval",
    ) -> None

interrupt_on参数是一个字典,Key为工具名称,Value可以是一个布尔值或一个通过InterruptOnConfig对象表示的中断配置:

  • True: 代表对于这个工具的调用会被中断并等待用户的批准;
  • False: 代表对于这个工具的调用不会被中断;
  • InterruptOnConfig对象: 可以通过该对象提供更详细的配置,例如允许的决策类型、描述信息和参数模式等。InterruptOnConfig是一个具有如下定义的TypedDict类型:
class HumanInTheLoopMiddleware(AgentMiddleware[StateT, ContextT, ResponseT]):
    def __init__(
        self,
        interrupt_on: dict[str, bool | InterruptOnConfig],
        *,
        description_prefix: str = "Tool execution requires approval",
    ) -> None

class InterruptOnConfig(TypedDict):
    allowed_decisions: list[DecisionType]
    description: NotRequired[str | _DescriptionFactory]
    args_schema: NotRequired[dict[str, Any]]

DecisionType = Literal["approve", "edit", "reject"]

class _DescriptionFactory(Protocol):
    def __call__(self, tool_call: ToolCall, state: AgentState[Any], runtime: Runtime[ContextT]) -> str:
        ...

它提供了更详细的中断配置选项:

  • allowed_decisions:DecisionType类型的列表,代表允许的决策类型,可以是批准(approve)、**编辑(edit)或拒绝(reject)**中的一种或多种;
  • description:一个字符串或者返回字符串的函数,用于提供中断的描述信息;
  • args_schema:一个可选的字典,用于定义工具调用参数的Schema。当用户选择编辑决策时,这个参数模式可以被用来验证用户提供的修改后的参数是否符合预期的格式和要求。

工具总是在LLM执行之后,并且其返回的AIMessage包含针对该工具的ToolCall对象情况下才会被调用。HumanInTheLoopMiddleware重写了wrap_model_call/awrap_model_call方法,它在模型调用结束后分析生成的AIMessage中的ToolCall列表,并根据配置的针对工具的中断规则,来实施中断以等待用户的审批结果。

class HumanInTheLoopMiddleware(AgentMiddleware[StateT, ContextT, ResponseT]):
    def after_model(self, state: AgentState[Any], runtime: Runtime[ContextT]) -> dict[str, Any] | None
    async def aafter_model(self, state: AgentState[Any], runtime: Runtime[ContextT]) -> dict[str, Any] | None

如果AIMessage中的ToolCall对象匹配了interrupt_on参数中配置的工具,HumanInTheLoopMiddleware会按照如下的逻辑来处理:

  • 如果配置的value为False,代表对于这个工具的调用不会被中断,HumanInTheLoopMiddleware会直接跳过,不进行任何处理;
  • 如果配置的value为True或InterruptOnConfig对象,代表对于这个工具的调用会被中断并等待用户的决策。HumanInTheLoopMiddleware会根据InterruptOnConfig中的allowed_decisions来确定允许的决策类型,并且利用description或描述工厂函数来生成展示给用户的描述信息。然后它会触发一个中断,等待用户做出批准、编辑或拒绝的决定;
  • 当用户做出决策后,HumanInTheLoopMiddleware会根据用户的决策来继续执行后续的操作:
    • 批准:原封不动地保留该工具调用;
    • 编辑:用用户修改后的edited_action(新参数或新工具名)替换掉模型原始的调用;
    • 拒绝:丢弃该调用,并伪造一个 ToolMessage(状态为error或自定义消息),告诉LLM这个操作被拒绝了;

HumanInTheLoopMiddleware调用interrupt函数指定的参数是一个HITLRequest对象,两个字段action_requests和review_configs分别返回一组ActionRequest和ReviewConfig列表。这几个TypedDict定义了人机交互(HITL)协议的数据结构。它们共同描述了Agent想干什么、人类能怎么审查以及整个请求包长什么样。ActionRequest描述了Agent想要执行的操作,包含操作名称、参数和可选的描述信息。ReviewConfig描述了针对某个操作的审查政策,包括允许的决策类型、参数模式和可选的描述信息。

class HITLRequest(TypedDict):
    action_requests: list[ActionRequest]
    review_configs: list[ReviewConfig]
class ActionRequest(TypedDict):
    name: str
    args: dict[str, Any]
    description: NotRequired[str]

class ReviewConfig(TypedDict):
    action_name: str
    allowed_decisions: list[DecisionType]
    args_schema: NotRequired[dict[str, Any]]

由于可能涉及多个工具的中断,所以在调用Agent恢复执行时,指定Command的resume字段需要提供一组按照中断排序的一组Decision,具体为一个{"decisions": [Decision]}字典。Decision是一个联合类型,具体类型可用是ApproveDecision、EditDecision或RejectDecision中的一种,它们分别代表批准、编辑和拒绝三种决策类型。这几个TypedDict利用公共字段type来区分不同的决策类型,RejectDecision进一步利用message字段提供拒绝的理由,EditDecision利用edited_action字段返回的Action对象修改调用的工具和参数。

Decision = ApproveDecision | EditDecision | RejectDecision
class ApproveDecision(TypedDict):
    type: Literal["approve"]

class EditDecision(TypedDict):
    type: Literal["edit"]
    edited_action: Action

class RejectDecision(TypedDict):
    type: Literal["reject"]
    message: NotRequired[str]

class Action(TypedDict):
    name: str
    args: dict[str, Any]

3. 利用HumanInTheLoopMiddleware重写前面演示的实例

在前面演示的实例中,我们在工具函数中调用interrupt函数来触发中断来引入人机交互。下面的引入HumanInTheLoopMiddleware的版本,两个版本基本是等效的。

from langchain.agents import create_agent
from langgraph.types import interrupt,Command
from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from langchain.agents.middleware import HumanInTheLoopMiddleware,InterruptOnConfig
from langchain.agents.middleware.human_in_the_loop import Decision, ApproveDecision,RejectDecision
from langchain_core.runnables import RunnableConfig
from dotenv import load_dotenv
import asyncio,uuid

load_dotenv()

@tool
async def transfer(account_from: str, account_to: str, amount: float)-> str:
    """"Execute a bank transfer between two accounts immediately"""
    return f"Transfer of {amount} from {account_from} to {account_to} has been completed."

agent = create_agent(
    model=ChatOpenAI(model="gpt-5.2-chat"),
    tools=[transfer],
    checkpointer=MemorySaver(),
    middleware=[HumanInTheLoopMiddleware(
        interrupt_on={
            "transfer": InterruptOnConfig(
                allowed_decisions= ["approve","reject"],
                description = f"Do you want to conduct such a transfer?"
            )
        }
    )],
)

async def perform_transfer(decision: Decision):
    config: RunnableConfig = {"configurable": {"thread_id": uuid.uuid4().hex}}
    result = await agent.ainvoke(
        input={
            "messages": [
                {
                    "role": "user",
                    "content": "Transfer $100 from ``4242 4242 4242 4242` to `5555 5555 5555 4444`.",
                }
            ]
        },
        config=config,
        version="v2"
    )   

    interrupt_id = result.interrupts[-1].id    
    interrupt_value = result.interrupts[-1].value
    print(f"""\
Interrupt received during transfer process:
    ID: {interrupt_id}, 
     Value: {interrupt_value}""")

    result = await agent.ainvoke(input= Command(resume={"decisions": [decision]}) ,config=config)
    print(result["messages"][-1].content)

asyncio.run(perform_transfer(ApproveDecision(type="approve")))
asyncio.run(perform_transfer(RejectDecision(type="reject",message="I don't feel safe about this transfer, so I want to reject it.")))
【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例 内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。 立即下载

相关推荐

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

深入浅出 Deep Agents 的 Human-in-the-Loop 功能

Human-in-the-Loop 是一种工作流模式,允许人类在 AI 执行敏感操作前进行审批。Deep Agents 通过 LangGraph 的中断(interrupt)功能实现这一机制。AI 代理计划执行某个工具系统检查该工具是否需要人工审批如果需要,AI 暂停执行并等待人类决策人类可以选择批准、编辑、拒绝或直接回应AI 根据人类决策继续执行fill:#333;important;important;fill:none;color:#333;color:#333;

SunnyRivers 626

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

[DeepAgents:LangChain平台的Harness-01]LangChain、LangGraph和DeepAgents三者之间的关系

Deep Agents是LangChain团队推出的开源Agent框架,专注于处理复杂、长期的多步骤任务。相比传统浅层Agent,它集成了任务规划、文件系统、子Agent生成等功能。文章对比了LangChain、LangGraph和Deep Agents的关系:LangChain提供核心开发模块,LangGraph负责运行时执行,Deep Agents则构建于二者之上。技术实现上,LangGraph通过状态图编译生成Agent,LangChain使用create_agent函数创建基础Agent

JaydenAI的博客 793

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 462

[DeepAgents:LangChain的Harness-12]利用create_deep_agent整合所有的Harness中间件

create_deep_agent函数是Deep Agents的核心创建方法,它在create_agent基础上预注册了多种中间件。该函数支持丰富的参数配置,包括模型选择、工具集、系统提示词、子代理、技能、记忆系统等,并默认集成多个关键中间件如TodoListMiddleware和FilesystemMiddleware。函数会强制添加迭代次数限制和默认系统提示词,强调AI助手应保持专业客观、直接高效的工作风格,要求先理解任务再执行,并持续验证直至任务完成。未指定的子代理将继承主代理的模型

JaydenAI的博客 667

手把手教你安装 Vivado2019.2(附安装包)

Vivado 2019.2 作为 Xilinx 公司发布的一款设计套件版本,具有多个显著的优点,以下是对其优点的详细归纳

dpwkj的博客 1万+

3天从零到精通:Deepagents智能代理框架终极指南

想象一下,你有一个永不疲倦的AI助手,能够自主规划复杂任务、编写代码、进行深度研究,还能调用各种工具完成工作。这听起来像是科幻电影中的场景,但Deepagents让这一切成为现实。这个基于LangChain和LangGraph构建的"开箱即用"智能代理框架,正在重新定义AI自动化的边界。 Deepagents的核心优势在于其"电池全包"的设计哲学——你无需从零开始构建复杂的代理系统,所有核心功能

gitblog_01077的博客 811

Hadoop实战:用MapReduce分析YouTube视频数据集(附完整代码)

本文提供了一个完整的Hadoop MapReduce实战教程,指导读者使用MapReduce框架分析YouTube视频数据集,统计不同视频类别的数量分布。教程涵盖从数据获取、预处理、HDFS操作到Java代码编写、作业提交及结果可视化的全流程,并附有完整代码,帮助开发者深入理解分布式计算思想。

lilh34434的博客 198

ESP32锂电池电量检测实战:从引脚选择到低功耗优化(附完整电路图)

本文详细介绍了ESP32锂电池电量检测的实战方案,从ADC引脚选择到低功耗优化,提供完整的电路图和代码实现。通过MOS管智能开关和深度睡眠技术,显著降低静态功耗至0.5μA,提升设备续航能力。适合物联网开发者解决电量检测中的常见问题。

weixin_28731223的博客 462

用 Java 对齐 LangChain Deep Agents Harness (一)

如果你做过 LLM Agent,大概经历过这些坑:Deep Agents 的核心答案不是「再换一个更强的模型」,而是加一层 Harness(智能体套件):本项目是这套思想的 Java 实现:一个统筹 Agent + + (默认继承统筹工具),前端通过 SSE 看工具轨迹并处理审批卡片。 1.2 一次用户消息怎么走 智谱 MCPresearch-agentOrchestratorTools统筹 AgentExecutorExAssistantChatServiceAssistantController浏览器

qq_38363255的博客 196

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 219

[最新]LangChain Agent详细介绍

LangChain 官方 Agents 页面主要讲的是:如何使用 LangChain 构建基于 LLM + Tools 的智能 Agent,以及 Agent 在生产环境中的核心组成。核心入口是 create_agent()。

weixin_43294658的博客 469

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 378

【MATLAB】工业传送带速度闭环控制与张力联合仿真

本文基于MATLAB/Simulink平台,构建了工业传送带速度闭环控制与张力联合仿真系统。通过搭建驱动模块、机械传动模块、检测模块和控制模块,实现了速度与张力的协同控制。采用双PID调节器分别整定速度与张力参数,经联合调试后系统性能良好:速度跟踪误差小于±0.03m/s,张力波动控制在±30N内,负载扰动恢复时间仅0.3秒。研究提供了从建模到参数优化的完整工程方案,可直接应用于课程设计或工业实践,有效解决了传送带运行中速度偏差与张力波动的协同控制难题。

unber的博客 77

LangChain / Core components / Agents

本文档介绍了LangChain智能体的核心概念与组件。智能体本质上是模型在循环中调用工具以完成任务,其核心由模型和工具集(Harness)构成。`create_agent`函数提供了高度可配置的创建方式,支持设置模型、工具、系统提示和结构化输出。文档详细阐述了智能体的调用与流式传输机制,并重点介绍了通过中间件扩展智能体能力的多种模式,包括执行环境、上下文管理、任务规划与委托、容错处理、防护栏及人机协同引导,为构建生产级智能体应用提供了完整的技术方案。

记录 分享 成就 240

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

从“文档懂王”到“工程落地”:我用LangChain造了一个会写代码的Agent

这篇文章摘要了作者在使用LangChain、LangGraph和Deep Agents开发编码助手项目时的经验教训与解决方案: 理想与现实的落差:作者发现官方文档的示例与真实项目存在巨大差距,200万字学习笔记在实际开发中失效,遭遇了token消耗失控、路径解析错误和死循环等问题。 框架关系解析:文章拆解了langchain-core(接口标准)、langgraph(运行时引擎)、langchain(应用框架)和deepagents(工具链)之间的层级依赖关系,指出这是从抽象到具体的实现链条。 开发环境搭建

General_zy的博客 605

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

用 Java 对齐 LangChain Deep Agents Harness(二)

作用: 对齐 Python TodoListMiddleware 的提示词 作用: 单条待办结构 作用: pending / in_progress / completed 作用: 按 session 外置 todos(委托 TodoRepository) 作用: 沙箱 workspace 读写编辑 作用: 声明式文件权限规则(allow/deny/interrupt) 作用: 按 glob 求值文件操作是否允许 作用: 长期记忆(对齐 MemoryMiddleware) 作用: 技能渐进式

qq_38363255的博客 266

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

langchain AI应用框架研究【核心概念-篇一】

langchain新版本1.1.0 出来了,老板了的api看了一些,api写法看起来有些凌乱,特别是那个构造chain的地方,先后顺序感觉不好记忆,还是SpringAI相对好好记忆一些。不知到1.x版本的会好使一些不。我们先来看看新版的langchain、langgraph、deepagents。LangChain 是一个用于开发由大语言模型(LLM)驱动的应用程序的开源框架。它的核心目标是提供一个统一的抽象层,让开发者可以方便地组合各种组件,而无需关心底层与不同模型API对接的细节。

yanghuashuiyue的专栏 597

Deep Agents 框架-基础篇

DeepAgents是LangChain生态中的高级API,构建于LangChain核心智能体模块和LangGraph运行时之上,旨在简化复杂智能体的开发。它提供任务规划、文件系统管理、子智能体生成等内置功能,适用于长期运行的多步骤任务。然而,DeepAgents并非独立框架,仍需依赖LangChain和LangGraph,学习成本较高。文档详细介绍了其核心能力、与LangChain/LangGraph的差异、配置方法及最佳实践,强调其在处理复杂任务时的优势,但也指出工程化选择需谨慎考虑其依赖关系和实际需求

yanghuashuiyue的专栏 442

Harness DeepAgent 实战:长任务 Agent 的任务编排、中间件与 Demo 落地(TaoToken 配置骨架)

用 Harness DeepAgent 跑长任务 Agent,先配好 TaoToken 统一 Key 与 API 通道,再挂载任务编排与中间件,交付可复制的 settings.json 配置骨架和端到端 Demo 验证。官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_35757191的博客 12

Deep Agents 如何用 FilesystemPermission 规则限制代理的文件读写路径?

如果你用 Deep Agents 的 `create_deep_agent` 构建代理,它默认自带 `ls`、`read_file`、`write_file`、`edit_file`、`glob`、`grep` 和 `delete` 等文件系统工具。当代理接入包含敏感文件(密钥目录、备份目录、系统配置)的存储后端时,你需要在代码里明确限制它允许读写的路径范围。Deep Agents SDK 提供

gitblog_00565的博客 1016

Deep Agents

Deep Agents 是 LangChain 开源的 Agent 开发框架,适合构建能够拆解复杂任务、持续调用工具并自主推进工作的智能体。

qq_46658243的博客 214

Agent 跑起来停不住?LangGraph 中断机制实现 HITL 人机交互

LangGraph的动态中断机制允许用户在图执行过程中设置暂停点,等待外部输入后再继续执行,提供了人机交互接口。当中断触发时,LangGraph会通过持久化机制保存当前图状态,并无限期等待直到用户恢复执行。中断通过在任意图节点中调用 interrupt()函数实现,该函数可以接收任何可 JSON序列化的值,并将该值暴露给调用方。中断触发后,调用方根据 interrupt()暴露的信息生成反馈,重新调用图时通过 Command将反馈传递给计算图,恢复图的运行。

weixin_42289273的博客 360
上一篇: [DeepAgents:LangChain的Harness-05]通过SkillsMiddleware将Skill引入LangChain
下一篇: [DeepAgents:LangChain的Harness-07]利用PatchToolCallsMiddleware修复错乱的消息结构
JaydenAI
博客等级 码龄1年 242粉丝 323原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值