发布时间:2026-03-03 23:14:17编辑:123阅读(3)
LangChain 1.0-Agent中间件-实现闭环(批准-编辑-拒绝动作)
在自动化系统中,尤其是高风险任务(如数据库写入、财务操作、邮件发送)中,完全让大模型自主执行往往并不安全。LangChain 1.0 引入的Human-in-Loop Middleware (人类在环中间件)允许在关键节点暂停Agent执行,等待人类对模型的行为进行批准(approve)、编辑(edit)或者拒绝(reject),从而让智能体的行为真正符合企业安全、合规和伦理要求。
示例代码:
from langchain.agents import create_agent
from langchain.agents.middleware import HumanInTheLoopMiddleware
from langgraph.checkpoint.memory import InMemorySaver
import requests
from lxml import etree
from langchain.tools import tool
from langchain_ollama import ChatOllama
model = ChatOllama(
model="qwen3:8b",
temperature=0.2,
top_p=0.95,
)
@tool
def search_bing(keyword):
"""
搜索内容函数
:param keyword: 必要参数,字符串类型。用于表示搜索的具体关键词
:return: 返回搜索出来的结果,dict类型
"""
url = f'https://www.bing.com/search?q={keyword}'
# //li[@class='b_algo']/div[@class='b_caption']/p
headers = {
"sec-ch-ua": '"Not(A:Brand";v="8", "Chromium";v="144", "Google Chrome";v="144"',
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/144.0.0.0 Safari/537.36"
}
response = requests.get(url=url, headers=headers, timeout=10)
html = etree.HTML(response.text)
res = html.xpath("//li[@class='b_algo']/div[@class='b_caption']/p/text()")
ret = {}
for num, value in enumerate(res):
ret.setdefault(num, value)
print(f"搜索关键词:{keyword}, 搜索结果:{ret}")
return ret
# 创建Agent,接入HumanInTheLoopMiddleware
agent = create_agent(
model=model,
tools = [search_bing],
checkpointer=InMemorySaver(),
middleware=[
HumanInTheLoopMiddleware(
interrupt_on={
# 拦截 search_bing 搜索工具执行前,要求人工确认
"search_bing": {
"allowed_decisions": ["approve", "edit", "reject"],
"description":lambda tool_name,tool_input,state:(f"模型准备执行search_bing搜索:
{tool_input.get('query', '')}"
)
},
},
description_prefix="工具执行需要人工审批"
)
],
)
config = {
"configurable":{
"thread_id":"23"
}
}
for event in agent.stream(
{"messages": [{"role": "user", "content": "AI最新的新闻"}]},
config,
):
print(event)运行结果:
{'model': {'messages': [AIMessage(content='', additional_kwargs={}, response_metadata={'model': 'qwen3:8b', 'created_at': '2026-03-03T14:05:36.814844883Z', 'done': True, 'done_reason': 'stop', 'total_duration': 7591202321, 'load_duration': 77793223, 'prompt_eval_count': 157, 'prompt_eval_duration': 414795821, 'eval_count': 310, 'eval_duration': 7010172358, 'logprobs': None, 'model_name': 'qwen3:8b', 'model_provider': 'ollama'}, id='lc_run--019cb404-a505-7c70-8c11-c891c0dff8f5-0', tool_calls=[{'name': 'search_bing', 'args': {'keyword': 'AI最新新闻'}, 'id': '5026d20a-92c0-47f2-8f17-63efefb56bdc', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 157, 'output_tokens': 310, 'total_tokens': 467})]}}
{'__interrupt__': (Interrupt(value={'action_requests': [{'name': 'search_bing', 'args': {'keyword': 'AI最新新闻'}, 'description': '模型准备执行search_bing搜索:'}], 'review_configs': [{'action_name': 'search_bing', 'allowed_decisions': ['approve', 'edit', 'reject']}]}, id='888e33259764e1d8a7161d8f6ae033ed'),)}
在代码环境中,能看到有Interrupt这个打断动作,但是具体怎么续上后面的操作,需要到LangSmith或者线上环境中查看.
LangSmith环境搭建,可查看:LangChain1.0-Agent-部署/上线(开发人员必备)
langgraph.json 中添加一行新的"searchbot": "./theloop.py:agent"
{
"dependencies": ["./"],
"graphs": {
"chatbot": "./graph.py:agent",
"searchbot": "./theloop.py:agent"
},
"env": ".env"
}
启动 langgraph dev

访问Studio UI界面

可以看到在执行工具调用时触发了HumanInTheLoopMiddleware中间件

输入approve可以继续执行,调用搜索工具

可以看到调用了search_bing工具,返回了结果

上一篇: LangChain 1.0-Agent中间件-汇总消息
下一篇: 没有了
52184
52083
42263
39128
33623
30585
29265
24247
24134
22506
3°
43°
49°
43°
116°
286°
342°
337°
312°
360°