[langchain 内部数据传递层级]

news/2026/1/21 23:49:52/文章来源:https://www.cnblogs.com/shiyuzhahan/p/19514361
@dynamic_prompt
def dynamic_system_prompt(request: ModelRequest) -> str:user_name = request.runtime.context.user_name  system_prompt = f"You are a helpful assistant. Address the user as {user_name}."return system_prompt

官方 ⬆️

是的,完全正确!你的理解非常精准。

不同的函数(或装饰器)就像是系统中的不同职能部门,它们根据自己的职责,在数据结构树的不同层级进行介入和操作。

我们可以这样对应:

  1. @dynamic_prompt (总控层 - Request 级)

    • 介入层级request (最顶层)。
    • 原因:它不仅需要读数据(Runtime),还需要读/改当前的输入消息(Request.messages)来构造 Prompt。它需要看到“全貌”。
  2. @before_model / Tools (执行层 - Runtime 级)

    • 介入层级runtime (中间层)。
    • 原因:它不需要关心“这一次请求的消息是什么”,它只关心“我有多少资源可以用”(比如读写数据库 store、流式输出 stream_writer)。
  3. 业务逻辑 / 简单工具 (业务层 - Context 级)

    • 介入层级context (最底层)。
    • 原因:绝大多数简单的业务代码(比如你的 weather01.py)根本不关心数据库连接或流式写入器,它只关心“当前用户是谁 (user_id)”或者“当前偏好是什么”。

总结图示

Request (ModelRequest)  <-- @dynamic_prompt 在这里介入 (我要看全局,还要改消息)└── runtime (Runtime)  <-- @before_model / Tools 在这里介入 (我要用资源,存数据库)└── context        <-- 普通业务逻辑 在这里介入 (我只要知道用户是谁)

这就是为什么你会看到参数类型不一样,因为它们是在不同层级上工作的。这种设计让底层的业务代码保持干净(只依赖 Context),而上层的框架代码拥有更多权限(依赖 Runtime 或 Request)。

runtime 测试

from typing import Any
from langgraph.store.memory import InMemoryStore
from langchain.agents import create_agent
from langchain.tools import tool, ToolRuntime
from model_glm import model@tool
def test_runtime(runtime: ToolRuntime) -> str:"""Test runtime.看一下 runtime 下面有啥"""print(f"====> runtime type: {type(runtime)}")# 检测是否为 Pydantic 模型if hasattr(runtime, "model_dump"):print("---》It's a Pydantic v2 Model!")elif hasattr(runtime, "dict"):print("---》It's a Pydantic v1 Model!")# 检测是否为 Dataclassfrom dataclasses import is_dataclass, asdictif is_dataclass(runtime):print("---》It's a Dataclass!")# 转为字典以便遍历或序列化runtime_dict = vars(runtime)for key, value in runtime_dict.items():print(f"{key}")# print(f"====> runtime: {runtime}")return str(runtime)agent = create_agent(model,tools=[test_runtime],system_prompt="你是一个测试用的智能体, 需要调用 test_runtime 工具",
)agent.invoke({"messages": [{"role": "user", "content": "测试一下 test_runtime"}]
})
====> runtime type: <class 'langgraph.prebuilt.tool_node.ToolRuntime'>
---》It's a Dataclass!
state
context
config
stream_writer
tool_call_id
store
(langchain_py312) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32智能宠物喂食

目录 STM32智能宠物喂食系统概述核心功能硬件组成软件设计应用场景扩展功能 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32智能宠物喂食系统概述 STM32智能宠物喂食系统是一种基于STM32微控制器的自动化解决方案&#xff0c;通…

2026年选择敏捷咨询机构:从“工具应用”到“价值落地”的转型关键

在VUCA时代&#xff0c;企业对敏捷的需求早已超越Scrum会议、看板工具的表层应用&#xff0c;转向全价值链的效率提升与组织能力重塑。2026年&#xff0c;随着数字化转型进入深水区&#xff0c;敏捷咨询机构的核心价值不再是简单传授方法论&#xff0c;而是帮助企业破解“敏捷落…

2026年马年零食大礼盒推荐Top5:从年味到健康的“不踩雷”选型指南

2026年马年零食大礼盒推荐Top5:从年味到健康的“不踩雷”选型指南2026年马年春节临近,不少人已经进入“零食礼盒挑选关键期”——既要满足“贴春联、拜大年”的年味仪式感,又要兼顾老人怕甜、孩子爱脆、年轻人要健康…

论文降AI率必备!5款工具横向测评,到底哪款能帮你将AIGC率降低80%以上

上周答辩前夕&#xff0c;我室友差点崩溃——论文被导师退回来了&#xff0c;原因是"疑似大量使用AI生成内容"。她哭着说&#xff1a;"我明明自己改过好几遍啊&#xff0c;为什么还是被查出来了&#xff1f;" 这场景我太熟悉了。去年我自己也经历过&#…

Java计算机毕设之基于Java+springboot的隧道云视频监控管理信息平台设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

[Unreal shader]深度缓冲重建世界坐标

UE中通过深度缓冲重建世界空间坐标原理和Unity shader重建原理基本一致&#xff0c;但是UE中重建世界坐标的实现路径与Unity是不一致的 &#xff1a;• Unity中使用 SAMPLE_DEPTH_TEXTUR 采样的是原始深度值&#xff08;RawDepth&#xff09;&#xff0c;是一个范围[0&#xff…

【毕业设计】基于springboot的隧道云视频监控管理信息平台设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

logging库使用教程

logging日志模块 logging是python常用的日志模块,logging涉及三个概念:logger可以理解为记者,决定写什么 handler可以理解为发布渠道,决定发到哪里 formatter可以理解为文章格式,决定排版格式 Level可以理解为重要…

【课程设计/毕业设计】基于springboot的隧道云视频监控管理信息平台设计与实现隧道内事故、火灾、车辆滞留等问题监察【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

SpringBoot:封装 starter

01 Starter 核心机制 SpringBoot 核心思想是约定大于配置&#xff0c;而 Starter 正是这一思想的核心落地载体。 简单来说&#xff0c;Starter 把某一类功能的依赖管理、默认配置、自动装配逻辑打包成一个独立 Jar 包。 项目只需引入这个 Jar 包&#xff0c;就能直接使用对应功…

滴滴 wsgsig secdd-challenge

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由 此产生的一切后果均与作者无关&#xff01; 部分python代码 url "ota/re…

RabbitMQ 在大数据领域的故障排查与解决方案

RabbitMQ 在大数据领域的故障排查与解决方案 关键词:RabbitMQ、大数据、消息队列、故障排查、性能优化、高可用性、消息丢失 摘要:本文深入探讨RabbitMQ在大数据环境下的常见故障及其解决方案。我们将从RabbitMQ的核心架构出发,分析其在大数据场景下面临的挑战,详细介绍故障…

Linux 内核漏洞提权

一、 内核提权的核心原理Linux 采用权限分级机制&#xff08;root:0&#xff0c;普通用户&#xff1a;1-65535&#xff09;&#xff0c;内核运行在最高权限的内核态&#xff08;Ring 0&#xff09;&#xff0c;用户程序运行在用户态&#xff08;Ring 3&#xff09;。内核提权的…

连接 AI 的隐形纽带:深度解构 MCP 传输层——从 Stdio 到 SSE 的实战抉择与架构差异

文章目录 &#x1f6f0;️ 连接 AI 的隐形纽带&#xff1a;深度解构 MCP 传输层——从 Stdio 到 SSE 的实战抉择与架构差异 &#x1f4e1;&#x1f3d7;️ 第一章&#xff1a;协议与通道的解耦——MCP 通信的底层逻辑1.1 JSON-RPC 2.0&#xff1a;MCP 的通用语言1.2 传输层的两…

计算机毕业设计springboot基于农科所农作物信息管理系统的设计与实现 基于SpringBoot的农业科研院所作物数据智慧管理平台的设计与实现面向农科机构的SpringBoot作物全生命周期

计算机毕业设计springboot基于农科所农作物信息管理系统的设计与实现8h3n8w22 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在“互联网农业”快速渗透的今天&#xff0c;农科所…

测试转网络安全如何弯道超车?

目录&#x1f62d; 测试的痛&#xff0c;谁懂&#xff1f;1. 重复劳动&#xff0c;永无止境2. 被动等待&#xff0c;毫无主动权3. 技术含量低&#xff0c;成长受限❓ 转行网安1. 测试经验&#xff0c;天然就是安全优势2. 技能高度重叠&#xff0c;转型零成本3. 工作模式更自由&…

Java计算机毕设之基于springboot的智慧医疗网上预约系统智慧医疗服务-智慧医疗服务平台(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

微服务架构演进实战 从单体到微服务的拆分原则与DDD入门

目录 &#x1f4a1; 先说说我经历的微服务"车祸现场" ✨ 摘要 1. 为什么需要从单体转向微服务&#xff1f; 1.1 单体的痛苦现实 1.2 微服务的核心优势 2. 领域驱动设计&#xff08;DDD&#xff09;核心概念 2.1 战略设计&#xff1a;划分业务边界 2.2 战术设…

python mqgg 发送 json 文件

pip install paho-mqtt 发送json&#xff0c;含有音频文件&#xff1b; import json, base64 import paho.mqtt.client as mqtt import timedef on_connect(client, userdata, flags, rc):if rc 0:print("[A] Connected to broker")client.subscribe(TOPIC_SUB)pri…

学习日记day64

Day64_0121专注时间&#xff1a;目标是&#xff1a;5h30~6h。实际&#xff1a;5h47min每日任务&#xff1a;饭后的休息&#xff08;25min&#xff09;&#xff0c;学习间歇的休息&#xff08;15min&#xff09;都用手表计时器来监督{step1}40min二刷1道力扣hot100昨天的题再做一…