LangChain组件Tools/Toolkits详解(6)——特殊类型注解Annotations

LangChain组件Tools/Toolkits详解(6)——特殊类型注解Annotations

  • 本篇摘要
  • 14. LangChain组件Tools/Toolkits详解
    • 14.6 特殊类型注解Annotations
      • 14.6.1 特殊类型注解分类
      • 14.6.1 InjectedToolArg构建运行时绑定值工具
      • 14.6.3 查看并传入参数
      • 14.6.4 在运行时注入参数
      • 14.6.5 其它特殊类型注解
    • 参考文献

本章目录如下:

  1. 《LangChain组件Tools/Toolkits详解(1)——Tools接口与创建工具概述》
  2. 《LangChain组件Tools/Toolkits详解(2)——装饰器@tool》
  3. 《LangChain组件Tools/Toolkits详解(3)——结构化工具StructuredTool》
  4. 《LangChain组件Tools/Toolkits详解(4)——处理Error》
  5. 《LangChain组件Tools/Toolkits详解(5)——返回产物artifact》
  6. 《LangChain组件Tools/Toolkits详解(6)——特殊类型注解》
  7. 《LangChain组件Tools/Toolkits详解(7)——工具调用与Toolkits》

本篇摘要

本章介绍LangChain组件Tools/Toolkits。

14. LangChain组件Tools/Toolkits详解

工具(Tools)是一种封装函数及其模式schema的方法,可以传递给聊天模型,使模型能够请求执行带有特定输入的工具函数,例如从数据库获取数据、发出API请求或运行自定义代码。LangChain中的tool抽象类将Python函数与定义函数名称、描述和预期参数的模式schema关联起来,以明确创建工具的作用及调用方式。本节将从Tools接口与创建工具概述、装饰器@tool、结构化工具StructuredTool、处理Error、返回产物artifact、特殊类型注解、工具调用和Toolkits等方面详细介绍工具。

14.6 特殊类型注解Annotations

在工具的函数签名中,可以使用一些特殊的类型注解(Special Type Annotations)来配置工具的运行时行为。本节将讲述其分类及使用方法。

14.6.1 特殊类型注解分类

常用的特殊类型注解有以下几种,下面注解将从工具的模式schema中移除相应的参数,这对于不应暴露给模型且模型不应控制的参数非常有用:

  • InjectedToolArg:值应在运行时使用.invoke或.ainvoke手动注入;
  • RunnableConfig:将RunnableConfig对象传递给工具;
  • InjectedState:将LangGraph图的整体状态传递给工具;
  • InjectedStore:将LangGraph存储对象传递给工具。

我们还可以使用Annotated类型与上面参数的字符串字面量(string literal)结合,为工具模式中暴露的相关参数提供描述,其调用格式为:

  • Annotated[type, “string literal”]:为参数添加描述,该描述将暴露在工具的模式中。

14.6.1 InjectedToolArg构建运行时绑定值工具

运行时绑定值:我们有时可能需要将仅在运行时已知的值绑定到工具,例如工具逻辑可能需要使用发起请求的用户ID。在大多数情况下,这些值不应由LLM(大语言模型)控制,因为允许LLM控制用户ID可能会导致安全风险,它们应由应用程序逻辑固定。为此我们使用InjectedToolArg注解来标记工具的某些参数,它允许从工具的模式中隐藏某些参数。下面将展示如何防止模型生成某些工具参数,并在运行时直接注入这些参数。

关于兼容性,本部分代码需要langchain-core >= 0.2.21,请确保已安装正确版本的包。另外对于LangGraph,请参考How to pass runtime values to tools,它讲述如何创建一个代理来跟踪给定用户最喜欢的宠物。

例如当工具需要在运行时动态注入user_id,首先以Anthropic为例创建LLM:

# !pip install -qU "langchain[anthropic]"
import getpass
import osif not os.environ.get("ANTHROPIC_API_KEY"):os.environ["ANTHROPIC_API_KEY"] = getpass.getpass("Enter API key for Anthropic: ")from langchain.chat_models import init_chat_modelllm = init_chat_model("claude-3-5-sonnet-latest", model_provider="anthropic")

然后通过使用InjectedToolArg注解user_id参数,告诉LangChain该参数不应作为工具模式的一部分暴露:

from typing import List
from langchain_core.tools import InjectedToolArg, tool
from typing_extensions import Annotateduser_to_pets = {}
@tool(parse_docstring=True)
def update_favorite_pets(pets: List[str], user_id: Annotated[

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

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

相关文章

openharmony中hilog实证记录说明(3.1和5.0版本)

每次用这个工具hilog都有一些小用法记不清,需要花一些时间去查去分析使用方法,为了给丰富多彩的生活留出更多的时间,所以汇总整理共享来了,它来了它来了~~~~~~~~~ 开始是想通过3.1来汇总的,但实际测试发现openharmony…

NVIDIA nvmath-python:高性能数学库的Python接口

NVIDIA nvmath-python:高性能数学库的Python接口 NVIDIA nvmath-python是一个高性能数学库的Python绑定,它为Python开发者提供了访问NVIDIA优化数学算法的能力。这个库特别适合需要高性能计算的科学计算、机器学习和数据分析应用。 文章目录 NVIDIA nv…

【euclid】20 2D包围盒模块(box2d.rs)

box2d.rs文件定义了一个二维轴对齐矩形(Box2D),使用最小和最大坐标来表示。矩形在坐标类型(T)和单位(U)上是泛型的。代码提供了多种方法来操作和查询矩形,包括求交集、并集、平移、缩…

ChatTTS 开源文本转语音模型本地部署 API 使用和搭建 WebUI 界面

ChatTTS(Chat Text To Speech),专为对话场景设计的文本生成语音(TTS)模型,适用于大型语言模型(LLM)助手的对话任务,以及诸如对话式音频和视频介绍等应用。支持中文和英文,还可以穿插笑声、说话间的停顿、以…

链表相关知识总结

1、数据结构 基本概念: 数据项:一个数据元素可以由若干个数据项组成数据对象:有相同性质的数据元素的集合,是数据的子集数据结构:是相互之间存在一种或多种特定关系的数据元素的集合 逻辑结构和物理结构&#xff1a…

蓝桥杯备考-》单词接龙

很明显,这道题是可以用DFS来做的,我们直接暴力搜索,但是这里有很多点是我们需要注意的。 1.我们如何确定两个单词能接上? 比如touch和choose 应该合成为touchoose 就是这样两个单词,我们让一个指针指着第一个字符串…

C语言-访问者模式详解与实践

C语言访问者模式详解与实践 - 传感器数据处理系统 1. 什么是访问者模式? 在嵌入式系统中,我们经常需要对不同传感器的数据进行多种处理,如数据校准、过滤、存储等。访问者模式允许我们在不修改传感器代码的情况下,添加新的数据处…

(UI自动化测试web端)第二篇:元素定位的方法_xpath路径定位

1、第一种xpath路径定位: 绝对路径:表达式是以 /html开头,元素的层级之间是以 / 分隔相同层级的元素可以使用下标,下标是从1开始的需要列出元素所经过的所有层级元素,工作当中一般不使用绝对路径 例:/html/…

设置GeoJSONVectorTileLayer中的line填充图片

设置GeoJSONVectorTileLayer中的line填充图片 关键:linePatternFile const style [{filter: true,renderPlugin: {dataConfig: {type: "line",},type: "line",},symbol: {linePatternFile: "http://examples.maptalks.com/resources/pat…

electron框架(4.0)electron-builde和electron Forge的打包方式

----使用electron-builder打包(需要魔法) --安装electron-builder: npm install electron-builder -D--package.json中进行相关配置: {"name": "video-tools","version": "1.0.0","main&quo…

让 MGR 不从 Primary 的节点克隆数据?

问题 MGR 中,新节点在加入时,为了与组内其它节点的数据保持一致,它会首先经历一个分布式恢复阶段。在这个阶段,新节点会随机选择组内一个节点(Donor)来同步差异数据。 在 MySQL 8.0.17 之前,同…

第三十二篇 深入解析Kimball维度建模:构建企业级数据仓库的完整框架

目录 一、维度建模设计原则深度剖析1.1 业务过程驱动设计1.2 星型模式VS雪花模式 二、维度建模五步法实战(附完整案例)2.1 业务需求映射2.2 模型详细设计2.3 缓慢变化维处理 三、高级建模技术解析3.1 渐变维度桥接表3.2 快照事实表设计 四、性能优化体系…

IntelliJ IDEA 中 Maven 的 `pom.xml` 变灰带横线?一文详解解决方法

前言 在使用 IntelliJ IDEA 进行 Java 开发时,如果你发现项目的 pom.xml 文件突然变成灰色并带有删除线,这可能是 Maven 的配置或项目结构出现了问题。 一、问题现象与原因分析 现象描述 文件变灰:pom.xml 在项目资源管理器中显示为灰色。…

缓存过期时间之逻辑过期

1. 物理不过期(Physical Non-Expiration) 定义:在Redis中不设置EXPIRE时间,缓存键永久存在(除非主动删除或内存淘汰)。目的:彻底规避因缓存自动过期导致的击穿(单热点失效&#xff…

基于WebAssembly的浏览器密码套件

目录 一、前言二、WebAssembly与浏览器密码套件2.1 WebAssembly技术概述2.2 浏览器密码套件的需求三、系统设计思路与架构3.1 核心模块3.2 系统整体架构图四、核心数学公式与算法证明4.1 AES-GCM加解密公式4.2 SHA-256哈希函数五、异步任务调度与GPU加速设计5.1 异步任务调度5.…

Qt的内存管理机制

在Qt中,显式使用new创建的对象通常不需要显式调用delete来释放内存,这是因为Qt提供了一种基于对象树(Object Tree)和父子关系(Parent-Child Relationship)的内存管理机制。这种机制可以自动管理对象的生命周期,确保在适当的时候释放内存&…

数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码

数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码 #include <stdio.h> #include <stdlib.h>typedef int ElemType;typedef struct node{ElemType data;struct node *next, *prev; }Node;//初化链表…

【Linux网络-五种IO模型与阻塞IO】

一、引入 网络通信的本质就是进程间的通信&#xff0c;进程间通信的本质就是IO&#xff08;Input&#xff0c;Output&#xff09; I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在冯诺依曼体系结构当中&#xff0c;将数据从输入设备拷贝到内存就叫作…

算法-最大公约数

1、约数&#xff1a; 1.1 试除法求约数 原理&#xff1a;只需要遍历最小的约数即可&#xff0c;较大的那个可以直接算出来。 import java.util.*; public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {int t sc.nextIn…

湖北楚大夫

品牌出海已成为众多企业拓展业务、提升竞争力的关键战略。楚大夫(chudafu.com)作为一家专注于品牌出海、海外网络营销推广以及外贸独立站搭建的公司&#xff0c;凭借其专业、高效、创新的服务模式&#xff0c;致力于成为中国企业走向国际市场的坚实后盾与得力伙伴。楚大夫通过综…