当前位置: 首页 > news >正文

[langchain 内部数据传递层级]

@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.jsqmd.com/news/280682/

相关文章:

  • STM32智能宠物喂食
  • 2026年选择敏捷咨询机构:从“工具应用”到“价值落地”的转型关键
  • 论文降AI率必备!5款工具横向测评,到底哪款能帮你将AIGC率降低80%以上
  • 2026年马年零食大礼盒推荐Top5:从年味到健康的“不踩雷”选型指南
  • Java计算机毕设之基于Java+springboot的隧道云视频监控管理信息平台设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • [Unreal shader]深度缓冲重建世界坐标
  • logging库使用教程
  • 【毕业设计】基于springboot的隧道云视频监控管理信息平台设计与实现(源码+文档+远程调试,全bao定制等)
  • SpringBoot:封装 starter
  • 【课程设计/毕业设计】基于springboot的隧道云视频监控管理信息平台设计与实现隧道内事故、火灾、车辆滞留等问题监察【附源码、数据库、万字文档】
  • 滴滴 wsgsig secdd-challenge
  • RabbitMQ 在大数据领域的故障排查与解决方案
  • Linux 内核漏洞提权
  • 连接 AI 的隐形纽带:深度解构 MCP 传输层——从 Stdio 到 SSE 的实战抉择与架构差异
  • 计算机毕业设计springboot基于农科所农作物信息管理系统的设计与实现 基于SpringBoot的农业科研院所作物数据智慧管理平台的设计与实现面向农科机构的SpringBoot作物全生命周期
  • 测试转网络安全如何弯道超车?
  • Java计算机毕设之基于springboot的智慧医疗网上预约系统智慧医疗服务-智慧医疗服务平台(完整前后端代码+说明文档+LW,调试定制等)
  • 微服务架构演进实战 从单体到微服务的拆分原则与DDD入门
  • python mqgg 发送 json 文件
  • 学习日记day64
  • Java毕设项目:基于springboot的智慧医疗网上预约系统(源码+文档,讲解、调试运行,定制等)
  • GGUF、Safetensors、ONNX三种格式
  • springboot_ssm815大学生校园图书借阅购买管理系统--论文
  • #对象模型
  • 强烈安利8个AI论文平台,本科生搞定毕业论文!
  • springboot_ssm816大学运动场地预约器材租借管理系统--论文
  • springboot_ssm817学生信息管理系统--论文
  • leetcode 热题
  • [ACTF2020 新生赛]Upload 1(一句话木马加蚁剑)
  • 【深度测评】2026年护考刷题APP算法横评:为何“易小考”能成为护资备考首选?