[LangChain智能体本质论-07]如何在工具函数中注入各种运行时对象?

Grok 4.6赋能长时运行AI智能体:原理、挑战与LangChain实战 AI智能体作为能够感知环境、自主决策并执行行动的软件实体,其核心在于自主性、目标导向性和工具使用能力。其工作原理通常基于大语言模型进行任务规划与推理,并通过框架调用外部工具来扩展能力。这项技术的核心价值在于能够自动化处理多步骤、需状态保持的复杂任务,从而在数据分析、自动化客服和代码生成等场景中提升效率。然而,实现稳定可靠的智能体,尤其是长时运行智能体,面临记忆管理、任务分解与错误处理三大挑战。本文聚焦于如何利用Grok 4.6模型在长上下文和复杂推理方面的升级,并结合LangChain等流行开发框架,通过实 阅读详情

工具参数有两种来源,一种必需由外部提供,另一种则是由执行引擎根据约定自动注入,比如表示工具运行时的ToolRuntime。要理解参数注入的实现原理,需要从两个方面来看待:

  • 注入参数的识别:模型组件在为工具调用生成ToolCall对象时,它的args不应该包含注入参数,所以在为工具生成tool_call_schame时需要具有注入参数识别的能力;
  • 调用时注入:由于ToolCall的args并不包含注入参数,所以在调用工具函数时需要补充这些漏掉的注入参数。

1. 注入参数的识别

在定义工具函数时,参数具有如下两种注入形式:一种是直接注入,另一种被成为标记注入。

1.1 直接注入

继承自_DirectlyInjectedToolArg类型的参数会默认为注入参数,这是一个不具有任何成员定义的标记类型。表示工具运行时的ToolRuntime是它的继承者。我们知道作为LangChain执行引擎的Pregel具有一个名为Runtime的运行时对象,ToolRuntime可以认为是它的一个视图或者投影。ToolRuntime在Runtime基础增加了三个字段:表示状态的state、表示当前配置的config和表示工具调用ID的tool_call_id。

class _DirectlyInjectedToolArg

@dataclass
class ToolRuntime(_DirectlyInjectedToolArg, Generic[ContextT, StateT]):
    state: StateT
    context: ContextT
    config: RunnableConfig
    stream_writer: StreamWriter
    tool_call_id: str | None
    store: BaseStore | None

1.2 标记注入

标注在注入参数上的Annotated除了指定参数类型外,还可以标注一个继承自InjectedToolArg的类型指示具体注入的是什么。InjectedToolCallId、InjectedState和InjectedStore是InjectedToolArg的三个继承类型,分别用于针对工具调用ID、状态和表示长期存储的BaseStore的参数注入。在前面介绍“Agent的状态”时,我们已经演示过如何利用InjectedState向工具函数注入状态。

class InjectedToolArg

class InjectedToolCallId(InjectedToolArg)
class InjectedState(InjectedToolArg):
    def __init__(self, field: str | None = None) -> None:
        self.field = field
class InjectedStore(InjectedToolArg)

除了上面这两种类型的注入,我们在工具方法通过config参数引入的RunnableConfig也会被自动视为注入参数。

2. 调用时注入参数

所有的工具都被封装在一个类型为ToolNode的节点中,当ToolNode因branch:to:tools通道的变化被驱动执行时,它会根据最近返回的AIMessage中的ToolCall列表选择相应的工具并实施调用。换句话说,大部分参数的注入是由ToolNode完成的。在生成Schema时,针对注入参数的识别只需要考虑参数类型或者标注类型是否继承自_DirectlyInjectedToolArg或者InjectedToolArg,在正式实施注入时,ToolNode需要根据具体的类型判断最终应该注入怎样的对象。

ToolNode只能识别参数类型ToolRuntime和针对InjectedState与InjectedStore的标注,并完成对应的参数注入。基于InjectedToolCallId针对工具调用ID的注入,以及这对RunnableConfig对象的注入是在BaseTool对象中完成的。

如下的程序演示了上述的几种针对工具函数的参数注入形式。在测试工具函数test_tool中,我们定义了五种自动注入的参数,分别表示当前执行配置、工具运行时、工具调用ID、状态和存储。方法利用断言对它们的值进行了验证,最后利用返回的Command对状态成员tool_result进行了设置。

from typing import Annotated, Any,Callable, Sequence, override
import builtins
from langchain.agents import create_agent
from langchain_core.language_models import BaseChatModel,LanguageModelInput
from langchain_core.messages import BaseMessage, AIMessage, ToolMessage, ToolCall
from langchain_core.callbacks import CallbackManagerForLLMRun
from langchain_core.outputs.chat_result import ChatResult, ChatGeneration
from langchain_core.tools import BaseTool,InjectedToolCallId
from langchain_core.runnables import Runnable, RunnableConfig
from langgraph.prebuilt import InjectedState, InjectedStore
from langchain.agents.middleware import AgentState
from langgraph.types import Command
from langgraph.prebuilt import ToolRuntime
from langgraph.store.base import BaseStore
from langgraph.store.memory import InMemoryStore
from langchain_core.messages import HumanMessage

def test_tool(
        config: RunnableConfig,
        runtime: ToolRuntime,
        tool_call_id:Annotated[str, InjectedToolCallId],
        state: Annotated[dict, InjectedState],
        store: Annotated[BaseStore, InjectedStore])-> Command:  
    """A test tool that validates the inputs and returns a success message."""

    assert config == runtime.config
    assert tool_call_id == "tool_call_001" == runtime.tool_call_id
    assert state["foo"] == "123"
    assert state["bar"] == "456"
    assert store == runtime.store
    assert isinstance(store, InMemoryStore)

    return Command(
        update={
            "messages":[ToolMessage("Test tool executed successfully!", tool_call_id=tool_call_id)],
            "tool_result": "success",
            },
    )

class ExtendedAgentState(AgentState):
    foo:str
    bar:str
    tool_result:str

class ModelSimulator(BaseChatModel):
    def _generate(
        self,
        messages: list[BaseMessage],
        stop: list[str] | None = None,
        run_manager: CallbackManagerForLLMRun | None = None,
        **kwargs: Any,
    ) -> ChatResult:
        
        if[message for message in messages if isinstance(message, ToolMessage)]:
             generation = ChatGeneration(message=AIMessage(""))
             return ChatResult(generations=[generation], llm_output={})
        
        tool_call: ToolCall = {
                "name": "test_tool",
                "args": {},
                "id": "tool_call_001",
            }            
        generation = ChatGeneration(message=AIMessage(content="", tool_calls=[tool_call]))
        return ChatResult(generations=[generation], llm_output={})

    @property
    def _llm_type(self) -> str:
        return "model-simulator"

    @override
    def bind_tools(
        self,
        tools: Sequence[builtins.dict[str, Any] | type | Callable | BaseTool],
        *,
        tool_choice: str | None = None,
        **kwargs: Any,
    ) -> Runnable[LanguageModelInput, AIMessage]:
        return self

agent = create_agent(
    model= ModelSimulator(),
    tools=[test_tool],
    store=InMemoryStore(),
    state_schema=ExtendedAgentState,
)

result = agent.invoke(input= {
    "messages": [HumanMessage(content="")], 
    "foo": "123", 
    "bar": "456"}) # type: ignore
assert result["tool_result"] == "success"

在调用create_agent函数创建Agent时,我们将model设置为用于模拟模型的ModelSimulator,它利用返回AIMessage中携带的ToolCall让Agent发起对工具test_tool的调用。除了注册test_tool工具外,我们还将state_schema设置成自定义的ExtendedAgentState对象,ExtendedAgentState在基类AgentState基础上添加了三个状态成员(foo、bar和tool_result)。我们还通过store参数设置了一个InMemoryStore对象作为Agent的长期存储。

在调用Agent时,我们指定了foo和bar两个状态成员。并从执行结果中提取并验证tool_result状态成员,用以确定test_tool函数确实作为工具被成功调用了。

LangChain框架深度解析:LLM时代的可编程运行时环境 大语言模型(LLM)应用开发已从简单API调用迈向工程化、可编排、可运维的新阶段。LangChain并非普通Python库,而是面向LLM的运行时环境,通过模型抽象、检索增强(RAG)、链式编排(LCEL)与智能体(Agent)四大核心能力,实现语义级任务调度与多源能力协同。其设计强调解耦性、可组合性与可观测性,天然支持生产级扩展——如自定义LLM适配器、回调系统集成LangSmith、状态驱动的会话管理。尤其在政策解读、客服问答、法律分析等需高可信度与复杂流程的场景中,LangChain通过结构化提示、混 阅读详情

相关推荐

智能体开发全解析:从LangChain工具调用到Dify工程化落地

AI Agent是当前人工智能落地的前沿方向,其本质是大模型与规划、记忆、工具调用能力的深度融合。从一个简单的工具调用循环到复杂业务场景中的多智能体协作,开发者需要理解智能体如何拆解目标、调用外部工具并依据反馈调整策略。LangChain等代码框架提供了灵活的编排能力,Dify等低代码平台则大幅降低了搭建门槛,而知识库检索、评测体系、可观测性与权限控制等工程化实践,才是智能体从Demo走向可交付产品的关键。无论是刚接触Agent概念的新手,还是已有项目经验的工程师,系统掌握智能体的技术栈与避坑方法,都能更高

weixin_33853827的博客 405

LangChain1.0智能体开发:运行时(Runtime)

LangChain的create_agent本质上运行在LangGraph的运行时(Runtime)之上。上下文(Context):静态信息,例如用户ID、数据库连接或智能体调用所需的其他依赖项。存储(Store):一个用于长期记忆的BaseStore实例。流写入器(Stream writer):一个用于通过自定义流模式传输信息的对象。你可以在工具和中间件内部访问运行时信息。

m0_73571447的博客 466

企业级大模型智能体实战:从LangChain工具调用到生产部署

大语言模型(LLM)通过API调用已能完成多种任务,但其核心价值在于实现自主决策与执行复杂工作流,这正是智能体(Agent)技术的关键。智能体通过引入记忆(Memory)、工具(Tools)和规划(Planning)等核心组件,构建起感知、思考、行动、观察的决策循环,从而将大模型的认知能力与外部世界的执行能力相结合。在工程实践中,借助LangChain等框架可以高效构建具备任务分解与工具调用能力的智能体系统。这类系统尤其适用于需要多步骤推理、实时信息获取或与外部API交互的企业应用场景,例如智能客服、自动化

weixin_34268579的博客 308

LangChain 工具运行时参数传递与错误处理全攻略

python运行pets: List[str] = Field(..., description="宠物列表")user_id: Annotated[str, InjectedToolArg] = Field(..., description="用户ID")通过运行时参数注入与完善的错误处理机制,我们终于解决了智能体开发中的安全与稳定性难题。这些技术不仅能防止敏感信息泄露,还能大幅提升智能体的鲁棒性,使其在复杂业务场景中可靠运行。

佑瞻的博客 1293

从零构建AI智能体:基于LangChain的工程化实践指南

大语言模型(LLM)作为AI的核心大脑,赋予了机器强大的自然语言理解和生成能力。其工作原理是通过海量数据训练,学习语言的统计规律和语义关联,从而能够进行对话、推理和内容创作。这项技术的核心价值在于将非结构化的语言指令转化为结构化的任务理解和执行能力,极大地拓展了人机交互的边界。在工程实践中,如何让LLM超越单纯的对话,成为能够感知环境、规划任务并执行具体操作的自主系统,是当前AI应用落地的关键挑战。这便引入了**智能体(Agent)** 的概念,它通过集成工具调用、状态管理和规划反思等模块,构建了一个完整的

weixin_30628801的博客 485

LangChain智能体开发实战:从零构建可联网查询的AI助手

在AI应用开发中,大语言模型(LLM)的单次问答能力往往难以满足复杂业务需求。LangChain框架通过组件化设计解决了这一痛点,其核心原理是将模型、工具、记忆等模块组合成可编排的工作流。这种架构的技术价值在于提供了标准化的智能体(Agent)开发范式,支持多步推理、工具调用和状态管理。在实际应用场景中,开发者可以基于ReAct模式构建能够自动联网搜索、查询数据库的AI助手。本文以天气查询智能体为例,详细解析了从环境配置、提示工程到工具集成的完整实现流程,帮助读者掌握生产级AI应用的构建方法。

weixin_34252090的博客 358

LangChain运行时数据注入:从Context到Runnable的实战指南

在构建基于大语言模型的应用时,上下文管理和数据流设计是核心挑战。运行时数据注入技术解决了如何将动态、仅在执行时才能确定的信息(如用户输入、会话状态、实时API结果)精准传递给模型的问题。其原理在于通过标准化的接口(如Runnable)和数据结构(如字典)在组件间传递和组合数据,这直接决定了应用的灵活性、上下文感知能力和生产可用性。掌握运行时注入,对于开发智能客服、多轮对话Agent、实时数据分析等需要结合外部知识和用户状态的场景至关重要。本文以LangChain框架为例,深入剖析了如何利用RunnableB

weixin_31188927的博客 281

9.2 LangChain 高级特性(运行时环境)

LangChain Runtime 是构建在 LangGraph 之上的智能体运行环境,提供依赖注入和状态管理能力。其核心功能包括:通过Context对象传递静态配置(如用户ID),使用BaseStore实现长期记忆存储,以及Stream writer支持流式输出。开发者可以在工具和中间件中访问Runtime对象,实现动态提示、上下文感知等功能。通过context_schema定义运行时数据结构,在调用时注入具体配置,使工具更易测试和复用。典型应用场景包括个性化交互、状态跟踪和流式响应处理。

kjkdd的博客 241

LangChain多智能体之Skills

技能概念由 Claude Code 推广,本质上是基于提示词的:即针对特定业务任务的自包含专用指令单元。在 Claude Code 中,技能以文件系统中的目录形式存在,通过文件操作被发现。技能通过提示词引导行为,并可提供工具使用说明,或包含供编码智能体执行的示例代码。💡带有渐进式披露的技能可视为一种 RAG(检索增强生成) 形式,其中每项技能都是一个检索单元——尽管不一定依赖嵌入(embeddings)或关键词搜索,而是通过浏览内容的工具(如文件操作,或本教程中的直接查找)来实现。

SunnyRivers 3211

electron打包客户端在rk3588上支持h265硬解

前言我们的客户端程序是用electron打包的前端程序,其在rk3588主机上的linux环境运行。之前使用客户端查看h264编码的视频直播是没有问题的,但视频源更改为h265编码后就不能查看了,奇怪的是打包的windows客户端则可以正常查看,另外rk3588主机上的chromium浏览器也是支持播放h265编码的视频的,并且是硬件解码。

lxkj_2024的博客 2006

全网首发!Yolov8_obb旋转框训练、测试、推理手把手教学(DOTA1.0数据集map50已达80%)

其中,images/train和images/val放置原始图片文件,labels/train_original和labels/val_original分别放置原始的标签文件,labels/train和labels/val为空,然后运行步骤(3)的代码,运行结束转换后的标签会保存在labels/train和labels/val中,格式如下。(4)新建yolov8-obb.yaml,修改nc和scales,我使用的是yolov8n.(2)构建数据集,安装下面目录格式,其他test可为空,一定要对应。

小嘤熊的博客 2万+

[LangChain智能体本质论-09]中间件装饰器是如何将函数转换成AgentMiddleware的?

中间件除了可以通过定义继承自`AgentMiddleware`的类型来定义,还可以在某个满足签名条件的函数上应用相应的装饰器将其转换成`AgentMiddlewre`对象,那么背后的逻辑是怎样的呢?

JaydenAI的博客 936

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

[LangChain智能体本质论-04]Agent的状态即通道

我们不断在强调Agent本质上是一个Pregel对象,其状态完全利用通道来维护,所以作为状态的`AgentState`对象的数据成员会转换成对应的通道。当我们看到`AgentState`的三个字段定义的时候,是不是感到很熟悉:前面演示实例输出的通道就有三个与它们同名。

JaydenAI的博客 818

NVMe-MI --- Message Servicing Model(消息服务模型)

本文主要介绍NVMe-MI消息服务模型,两个主要类别是请求消息和响应消息。并介绍带外机制消息服务状态机。

智小星的博客 2009

LTspice元器件库导入与路径管理:符号、模型、子电路全解析

在电子电路仿真中,元器件库通常由符号、模型和子电路三层构成:符号定义引脚外观,模型描述电气行为,子电路封装多端子网络。理解三者职责边界,是解决 LTspice 元器件库导入报错的关键。许多导入失败并非软件问题,而是文件类型错配、路径引用不清或引脚顺序不一致。掌握 `.include` 指令、用户库搜索路径和自制符号绑定模型,可以提升第三方模型复用效率,降低跨项目迁移成本。该思路适用于运放、MOS 管、二极管等器件建模,尤其在 UA741 等经典运放导入场景中,需要先核对 `.subckt` 引脚顺序,再选择

weixin_29182481的博客 178

基于LangChain与OpenVINO™构建AI智能体

基于LLM构建的AI智能体,虽然无法做到面面俱到,但他却可以找到最合适的帮手一同完成任务。除了以上这些示例外,我们还可以利用Agent,RAG以及多模态模型等技术,创建更复杂的应用体系,例如将人类指令转化为机器臂的具体动作,或是根据用户请求绘制创建文本或音视频内容。 作为通过通用人工智能(AGI)的必经之路,Agent 就好比是一个能够感知环境、进行决策和执行动作的智能实体,像人一样感知世界,运用工具,与他人进行交互。相信在OpenVINO™的加持下,完全本地的AI智能体服务将成为可能。

英特尔开发人员专区 1867

在 NVIDIA DGX Spark 上运行 vLLM + Open WebUI

DGX Spark 和 GX10 都是性能强大的机器,但只有将它们视为交互式工作站而非精简版服务器,才能真正发挥它们的优势。合理利用共享资源,规划并发工作负载,并谨慎控制内存限制。做到这些,vLLM 与 Open WebUI 的结合就能成为可靠​​的日常工具,而不是脆弱的实验品。DGX平台本身价格不菲,但这并非体验此类硬件的唯一途径。多家厂商提供基于相同核心架构、价格更为亲民的系统,这些系统通常配备容量较小的固态硬盘或配置更为简化,但基本性能并未改变。

iCloudEnd的博客 1749

AgentRun CLI:面向智能体的声明式运行时契约工具

智能体(Agent)作为大模型应用的关键范式,其核心挑战已从‘能否实现’转向‘如何可靠交付’。理解 Agent 运行时契约、声明式配置(YAML)、零环境依赖部署,是打通开发到生产链路的基础能力。AgentRun 通过标准化配置 Schema、运行时依赖预检、上下文注入机制,在不侵入 LangChain/LlamaIndex 等框架的前提下,将 Agent 封装为可版本控制、可 CI 验证、可一键启动的服务单元。它解决的不是模型调用问题,而是工程化落地中最真实的断点——让 `agentrun run -c

weixin_30357231的博客 403

基于 YOLO26 的车辆实时检测与计数系统

本文提出了一种基于YOLO26的车辆实时检测与计数系统。系统采用CSPDarknet53作为主干网络,结合特征金字塔和多尺度预测实现高精度车辆检测。通过DeepSORT算法进行目标跟踪,并统计车辆数量、行驶方向和交通流量。实验表明,该系统在保持实时性能的同时,检测精度达到92.3%,可有效应用于智能交通管理。系统采用Python实现,支持GPU加速,适用于多种交通场景下的车辆监测需求。

一键难忘的博客 907

用miniconda建立PyTorch、Keras、TensorFlow三个环境

如果还没有安装Miniconda,请从[Miniconda官网](https://docs.conda.io/en/latest/miniconda.html)下载合适的版本并进行安装。如果遇到问题,可以通过编辑`~/.condarc`文件来临时禁用某个源,或者通过`conda config --remove channels`命令来移除配置的镜像源。要切换到不同的环境,先使用`conda deactivate`命令退出当前环境,再用`conda activate 环境名称`命令激活另一个环境。

数字人生 2463

Langchain-07 Tool

工具:智能体可以调用的函数。它把一个普通 Python 函数连同"说明书"(名称、描述、参数说明)打包,让模型知道什么时候可以调用、怎么调用。工具让模型能接触外部世界:查数据库、调 API、读写文件、搜索网页……函数名不好看?# @tool 括号里传参:第一个是工具名,description 是详细描述@tool("web_search", description="在互联网上搜索最新信息。遇到时效性问题时使用。")"""搜索网页。

人之功成皆凭己为,何来侥幸之说! 218

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

本地LLM智能体运行时安全审计:从代码注入到沙箱逃逸的攻防实践

在软件安全领域,源代码审计(SAST)是识别潜在漏洞、防范攻击的关键实践,其核心原理在于分析数据从用户可控输入源流向危险函数(Sink)的路径是否缺乏充分验证。随着大语言模型(LLM)与智能体(Agent)技术的工程化落地,其运行时层(Agent Runtime)——负责解析指令、调用工具、执行代码的核心引擎——正成为新的关键攻击面。传统漏洞如命令注入、路径遍历、不安全的反序列化,在智能体动态执行环境中危害被显著放大,攻击者可利用提示词操纵模型输出,进而触发运行时层缺陷,实现越权访问或远程代码执行(RCE)

weixin_34199335的博客 402

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

[LangChain智能体本质论-06]赋予Agent执行力的工具是个什么东西?

在 LangChain框架中,工具是连接大语言模型与外部世界的桥梁。它们赋予了模型“行动”的能力,使其能够超越文本生成的范畴,去执行搜索、计算、运行代码或调用API等实际任务。工具本质上是带有名称 、描述 和Shema的函数。LLM并不直接运行工具(服务单工具除外),而是根据用户的查询,参考工具的描述来决定是否需要调用某个工具,并输出该工具所需的结构化参数。Agent接收到模型生成的参数后,在本地或服务器端执行该工具,并将结果返回给LLM,供其进行后续推理或总结。

JaydenAI的博客 719

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

从工具调用到智能体:基于LangChain构建本地AI助手的完整指南

函数调用作为大语言模型的核心能力,通过结构化输出实现对外部工具和API的调用,突破了模型的知识截止日期限制。其技术原理基于JSON Schema描述工具功能,模型根据用户请求生成结构化调用指令,系统执行后整合结果返回。这一机制为AI应用落地提供了关键支撑,广泛应用于计算、搜索、数据查询等场景。ReAct范式进一步融合思维链与行动步骤,推动语言模型向具备规划、执行和反思能力的智能体演进。本文以LangChain和LangGraph框架为例,结合本地Ollama模型,详细演示了如何构建一个能使用计算器和搜索工具

weixin_30682415的博客 378

[LangChain智能体本质论-01]两种视角看待Agent和ReAct循环

作为LangChain智能体的Agent采用一种被称为ReAct循环的执行流程(如下图所示),这是一种结合了“推理”(Reasoning)与“行动”(Acting)的交互模式,旨在让Agent能像人类一样通过逻辑思考来解决复杂问题。但是从底层的执行方式来看,Agent本质上是一个Pregel对象(我的系列文章“[拆解LangChain执行引擎](https://blog.youkuaiyun.com/jaydenai/category_13127051.html)”对Pregel具有系统的介绍),是一个通过节点和通道构

JaydenAI的博客 790
上一篇: [LangChain智能体本质论-06]赋予Agent执行力的工具是个什么东西?
下一篇: [LangChain智能体本质论-08]中间件是如何参与Agent、Model和Tool三者交互的?
JaydenAI
博客等级 码龄1年 241粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值