网站页面好了怎么做后端,厦门网站建设外贸,建设网站前端,企业小程序制作的公司引言#xff1a;为什么你的 AI Agent 需要“交通警察”#xff1f;
在构建复杂 AI 应用时#xff0c;我们常常遇到这些问题#xff1a;
Agent 无限调用工具#xff0c;陷入死循环#xff1f;用户输入包含敏感信息#xff08;如手机号、身份证#xff09;#xff0c;…引言为什么你的 AI Agent 需要“交通警察”在构建复杂 AI 应用时我们常常遇到这些问题Agent 无限调用工具陷入死循环用户输入包含敏感信息如手机号、身份证却直接传给大模型想在关键步骤暂停让人工审核后再继续多轮对话上下文太长Token 超限大模型MCP工具调用时怎样动态修改参数?这些问题的根源在于Agent 缺乏运行时的“监管机制”。LangChain 的Middleware中间件正是为此而生——它就像 Agent 执行流程中的“交通警察”在关键时刻介入、检查、修改甚至终止流程让你对 AI 行为拥有完全掌控权。本文将带你从零理解 Middleware 原理并在数据问答场景实战一、整体架构概览LangChain 的Middleware机制基于Hook钩子模型在智能体执行流程的关键节点注入自定义逻辑实现对运行行为的精细干预。智能体在运行过程中会经历多个重要阶段——从接收输入、调用模型或工具到生成响应。LangChain 在这些节点开放了高度灵活的扩展点开发者可借此实现动态提示词调整、对话历史自动摘要、按需筛选工具、运行状态追踪以及敏感内容拦截等能力。二、核心模块拆解步骤 1认识内置 Middleware开箱即用LangChain 已提供多个高价值中间件中间件用途ShellToolMiddlewareShell工具中间件使Agent运行沙箱环境进行隔离如Docker容器隔离SummarizationMiddleware自动摘要长对话历史防止上下文溢出HumanInTheLoopMiddleware在关键操作前暂停等待人工审批需配合 CheckpointerAnthropicPromptCachingMiddleware缓存 Anthropic 模型的系统提示降低成本ModelCallLimitMiddleware限制模型调用次数防无限循环ToolCallLimitMiddleware限制特定工具或所有工具的调用次数ModelFallbackMiddleware主模型失败时自动切换备用模型PIIMiddleware检测并处理敏感信息如邮箱、信用卡号TodoListMiddleware为复杂任务添加待办事项管理能力LLMToolSelectorMiddleware用 LLM 动态筛选相关工具适合工具很多的场景ToolRetryMiddleware对失败的工具调用自动重试支持指数退避LLMToolEmulator用 LLM 模拟工具响应用于测试ContextEditingMiddleware清理或压缩对话上下文如清除旧的工具调用示例1: 运行Docker沙箱环境进行隔离操作from langchain.agents import create_agent# 假设 ShellToolMiddleware 和 DockerExecutionPolicy 定义在 your_module.py 中from your_module import ShellToolMiddleware, DockerExecutionPolicy# 配置执行策略以提高安全性execution_policy DockerExecutionPolicy( imagepython:3.11-slim, # 使用轻量级 Python Docker 镜像 read_only_rootTrue, # 设置根文件系统为只读模式增强安全性 user_remapTrue # 启用用户 ID 映射限制容器内操作权限)# 创建 Shell 工具中间件实例配置安全策略shell_middleware ShellToolMiddleware( execution_policyexecution_policy # 应用 Docker 策略来执行 shell 命令)# 创建代理自动包含由中间件提供的持久化 shell 工具agent create_agent( modelgpt-4o, # 指定使用的模型 tools[], # 其他自定义工具可以在此处添加 middleware[shell_middleware] # 注册我们的 shell 工具中间件)# 使用 agent 执行一个具体的任务下载一个网页并查找其中的关键字task_instructions 使用 curl 下载 https://example.com 并保存为 example.html然后使用 grep 查找页面中的 data science 关键字。response agent.run(task_instructions) # 执行任务并获取结果print(response)缺点: 目前没有Kubernetes策略支持、容器拉起慢,缺乏快速 attach 机制等示例2ModelFallbackMiddleware的作用是在主模型调用失败如超时、限流、API 错误等时自动降级到备用模型from langchain.agents import create_agentfrom langchain.agents.middleware import ModelFallbackMiddlewareagent create_agent( modelgpt-4o, # 主模型首选 tools[...], middleware[ ModelFallbackMiddleware( gpt-4o-mini, # 首选备用模型出错时首先尝试此模型 claude-3-5-sonnet-20241022, # 次选备用模型若上一个也失败则尝试此模型 ), ],)步骤 2自定义 Middleware —— 装饰器方式快速上手数据问答场景执行工具时动态修改mcp-server-chart图表渲染参数:wrap_tool_callasync def modify_args(request, handler): 动态修改mcp-server-chart 图表参数 :param request: :param handler: :return: if not (hasattr(request, tool_call) and request.tool_call is not None): return await handler(request) tool_call request.tool_call tool_name None if isinstance(tool_call, dict): tool_name tool_call.get(name) or tool_call.get(tool) else: tool_name getattr(tool_call, name, None) # 只有当工具名称包含 mcp-server-chart 时才修改 theme 值 if not (tool_name and mcp-server-chartin tool_name): return await handler(request) try: if isinstance(tool_call, dict): args tool_call.setdefault(args, {}) if not isinstance(args, dict): tool_call[args] {} args tool_call[args] args[theme] academy# 修改渲染的主题 academy学院风 dark 黑色 style args.setdefault(style, {}) if not isinstance(style, dict): args[style] {} style args[style] style[texture] rough except Exception as e: print(f[Warning] Failed to modify chart args: {e}) # 调用原始处理函数 return await handler(request)运行效果如下:学院派风格黑色风格支持的装饰器装饰器触发时机说明before_agentAgent 开始执行前可用于初始化状态、校验输入或加载上下文after_agentAgent 执行完成后适合保存结果、清理资源或记录日志before_model每次调用大模型之前可动态修改提示词、压缩消息历史等after_model每次大模型返回响应后可验证输出内容、应用安全过滤或格式化结果before_tool每次调用工具之前可校验参数、记录调用意图或拦截高危操作after_tool每次工具执行完成后可处理工具返回值、更新状态或记录执行结果wrap_model_call包裹整个模型调用过程支持完全拦截或替换模型调用逻辑如 mockwrap_tool_call包裹整个工具调用过程可实现重试、降级、模拟响应等高级控制步骤 3自定义 Middleware —— 类方式生产级根据当前状态或上下文动态筛选相关工具from langchain.agents import create_agentfrom langchain.agents.middleware import AgentMiddleware, ModelRequestfrom typing import Callableclass ToolSelectorMiddleware(AgentMiddleware): def wrap_model_call( self, request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse], ) - ModelResponse: 中间件根据当前状态或上下文动态筛选相关工具 # 基于请求的状态state和运行时上下文runtime # 从全部工具中选出一个精简且相关的子集 relevant_tools select_relevant_tools(request.state, request.runtime) request.tools relevant_tools # 替换为筛选后的工具列表 return handler(request) # 继续执行模型调用# 创建 agentagent create_agent( modelgpt-4o, toolsall_tools, # 需预先注册所有可用工具 # 中间件可在每次运行时动态选择与当前任务最相关的部分工具 # 避免将大量无关工具传给模型提升效率和准确性 middleware[ToolSelectorMiddleware()],)三、总结通过Middleware你不再只是“调用 AI”而是真正 驾驭 AI —— 让其更安全、更可靠、更符合业务需求。 推荐阅读LangChain 官方 Middleware 文档https://docs.langchain.com/oss/python/langchain/middleware#model-fallback 完整代码开源项目地址:https://github.com/apconw/sanic-web版本: v1.2.0 项目亮点✅ 集成 MCP 多智能体架构✅ 支持 Dify /LangChain1.0.x/ LlamaIndex / Ollama / vLLM /Neo4j✅ 前端采用 Vue3 TypeScript Vite5现代化交互体验✅ 内置 ECharts / AntV 图表问答 CSV 表格问答✅ 支持对接主流 RAG 系统 与 Text2SQL 引擎✅ 轻量级 Sanic 后端适合快速部署与二次开发✅项目已被蚂蚁官方推荐收录AntV运行效果:数据问答四、在大模型时代我们如何有效的去学习大模型现如今大模型岗位需求越来越大但是相关岗位人才难求薪资持续走高AI运营薪资平均值约18457元AI工程师薪资平均值约37336元大模型算法薪资平均值约39607元。掌握大模型技术你还能拥有更多可能性• 成为一名全栈大模型工程师包括PromptLangChainLoRA等技术开发、运营、产品等方向全栈工程• 能够拥有模型二次训练和微调能力带领大家完成智能对话、文生图等热门应用• 薪资上浮10%-20%覆盖更多高薪岗位这是一个高需求、高待遇的热门方向和领域• 更优质的项目可以为未来创新创业提供基石。一直在更新更多的大模型学习和面试资料已经上传带到CSDN的官方了有需要的朋友可以扫描下方二维码免费领取【保证100%免费】一、AGI大模型系统学习路线很多人学习大模型的时候没有方向东学一点西学一点像只无头苍蝇乱撞下面是我整理好的一套完整的学习路线希望能够帮助到你们学习AI大模型。第一阶段 从大模型系统设计入手讲解大模型的主要方法第二阶段 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用第三阶段 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统第四阶段 大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统第五阶段 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型第六阶段 以SD多模态大模型为主搭建了文生图小程序案例第七阶段 以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。三、AI大模型经典PDF书籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。四、AI大模型各大场景实战案例结语【一一AGI大模型学习 所有资源获取处无偿领取一一】所有资料 ⚡️ 朋友们如果有需要全套 《LLM大模型入门进阶学习资源包》扫码获取~