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

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 os

if 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_model

llm = 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 Annotated

user_to_pets = {
   }
@tool(parse_docstring=True)
def update_favorite_pets(
    pets: List[str], user_id: Annotated[

相关文章:

  • 删除重复数据,防止删除所有数据
  • 在 Ubuntu 下通过 Docker 部署 Mastodon 服务器的详细教程
  • 循环不变量原则——螺旋矩阵
  • 基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)
  • 综合章节:游戏网络化、模组化与深度扩展
  • Mysql深分页的解决方案
  • 再次理解 Spring 中的 IOC、DI、AOP 与多态
  • 【CF】Day14——Codeforces Round(Div2) 924 BC + 926 C + 934 C + 922 C
  • k8s的控制应用Helm
  • 【学习笔记】LLM推理与部署
  • Spring6:10 数据校验-Validation
  • 基于SpringBoot+Vue的在线拍卖管理系统+LW示例参考
  • JavaScript 赋值运算符
  • windows剪切板的内容无法拷贝到虚拟机virtualbox里的Rocky Linux中 --Draft
  • Unity图形学Shader快速回顾
  • C++ Json-Rpc框架-2框架(服务端模块 客户端模块 框架设计)
  • 【Python】【PyQt5】设置事件绑定(例为按钮点击显示提示框)
  • 生物信息复习笔记(2)——测序基本概念
  • xampp安装教程与配置
  • React Router使用方法
  • 山东滕州一车辆撞向公交站台致多人倒地,肇事者被控制,案件已移交刑警
  • 当一群杜克土木工程毕业生在三四十年后怀念大学的历史课……
  • 国内多景区实行一票游多日:从门票经济向多元化“链式经济”转型
  • 美国防部监察机构扩大“群聊门”事件调查范围
  • AI世界的年轻人|他用影像大模型解决看病难题,“要做的研究还有很多”
  • 韩国法院将重审李在明案,韩德洙入局能否为大选带来变数?