langchain v0.3更新了什么?

版本改动

这是具体改动的链接
在这里插入图片描述
官方blog首先说明了:
所有软件包已在内部从 Pydantic 1 升级到 Pydantic 2。
所有软件包都完全支持在用户代码中使用 Pydantic 2,而无需使用 langchain_core.pydantic_v1 或 pydantic.v1 等桥接程序。
由于 Pydantic 1 已于 2024 年 6 月到期,因此将不再对其提供支持。
Python 3.8 的生命周期将于 2024 年 10 月结束,因此将不再对其提供支持。这是最大的改变!!

总结一下:就是从py38升级更高的版本把!

改变

包的改变

langchain-community包在0.3中已经被废弃,langchain-community中的内容已经相继搬到langchain-x包中了,包的引用改变需要多多注意下。具体可以看这个链接,目前该链接还停留在v0.2估计后续官方会做更新。

2.X工具的改变

官方在这篇文章里,说简化了工具的使用
具体怎么简化的,我们可以来看示例
在这里插入图片描述

from typing import List
from typing_extensions import TypedDictfrom langchain_anthropic import ChatAnthropicclass Address(TypedDict):street: strcity: strstate: str# 这个tool单纯的就是一个方法,并不像v0.2版本需要tool装饰器
def validate_user(user_id: int, addresses: List[Address]) -> bool:"""Validate user using historical addresses.Args:user_id: (int) the user ID.addresses: Previous addresses."""return Truellm = ChatAnthropic(model="claude-3-sonnet-20240229"
).bind_tools([validate_user])result = llm.invoke("Could you validate user 123? They previously lived at ""123 Fake St in Boston MA and 234 Pretend Boulevard in ""Houston TX."
)
result.tool_calls-------------------------
[{'name': 'validate_user','args': {'user_id': 123,'addresses': [{'street': '123 Fake St', 'city': 'Boston', 'state': 'MA'},{'street': '234 Pretend Boulevard', 'city': 'Houston', 'state': 'TX'}]},'id': 'toolu_011KnPwWqKuyQ3kMy6McdcYJ','type': 'tool_call'}]

在这之前,我们是怎么使用tools的

import osfrom langchain_community.chat_models import QianfanChatEndpoint
from typing import Annotated, Literal, TypedDict
from langchain_core.messages import HumanMessage
from langchain_core.tools import tool
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import END, StateGraph, MessagesState
from langgraph.prebuilt import ToolNode# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = ""
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
os.environ["LANGCHAIN_PROJECT"] = 'default'# 自定义工具给agent
@tool
def search(query: str):"""Call to surf the web."""print(query)if "武汉" in query.lower() or "武 汉" in query.lower():return ["25° 多云"]return ["35° 晴天"]tools = [search]
tool_node = ToolNode(tools)
# 定义模型
model = QianfanChatEndpoint(model="ERNIE-Bot-turbo",temperature=0.9
).bind_tools(tools)# 定义条件
def should_continue(state: MessagesState) -> Literal["tools", END]:print(state)messages = state['messages']last_message = messages[-1]print(last_message.tool_calls)if last_message.tool_calls:return "tools"return END# 定义执行
def call_model(state: MessagesState):messages = state['messages']response = model.invoke(messages)return {"messages": [response]}# 创建工作流
workflow = StateGraph(MessagesState)workflow.add_node("agent", call_model)
workflow.add_node("tools", tool_node)workflow.set_entry_point("agent")workflow.add_conditional_edges("agent",should_continue,
)workflow.add_edge("tools", 'agent')checkpointer = MemorySaver()app = workflow.compile(checkpointer=checkpointer)final_state = app.invoke({"messages": [HumanMessage(content="武汉今天多少度")]},config={"configurable": {"thread_id": 42}}
)print(final_state["messages"][-1].content)# 现在,当我们传递相同的thread_id时,对话上下文通过保存的状态(即存储的消息列表)保留"thread_id"
final_state = app.invoke({"messages": [HumanMessage(content="那北京情况如何呢?")]},config={"configurable": {"thread_id": 42}}
)print(final_state["messages"][-1].content)

相比之下,langchain 0.3之前使用tools看起来确实有点臃肿。

接下来看官方给的第二示例:

from typing import List, Literal
from typing_extensions import TypedDictfrom langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agentllm = ChatOpenAI(temperature=0)# validate_user就是上面代码中的tool,llm+tool=agent
user_info_agent = create_react_agent(llm, [validate_user])class Message(TypedDict):role: Literal["human"]content: str
# agent -> tool,对gent进行一次封装,设定tool的一些参数
# 也就是说问题通过agent可以转发到下层,或者二级代理
# 如果是0.2低版本,可能需要创建workflow加边啥的
# 整体上看,构建简单的链路确实更简单了
agent_tool = user_info_agent.as_tool(arg_types={"messages": List[Message]},name="user_info_agent",description="Ask questions about users.",
)agent = create_react_agent(llm, [agent_tool])

怎么升级 0.2 -——> 0.3

pip install langchain >=0.3
pip install langchain-community >=0.3
pip install langchain-text-splitters >=0.3
pip install langchain-core >=0.3
pip install langchain-experimental >=0.3
跟langchain相关的一些库也需要更新

langserve

升级后需要注意什么?
pydantic 版本升级
# v0.2x
from langchain_core.pydantic_v1 import BaseModel
# v0.3
from pydantic import BaseModel

Users using the following APIs:

BaseChatModel.bind_tools
BaseChatModel.with_structured_output
Tool.from_function
StructuredTool.from_function

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

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

相关文章

【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))

Host 表示服务器主机的地址和端口号 URL 里面不是已经有 Host 了吗,为什么还要写一次? 这里的 Host 和 URL 中的 IP 地址、端口什么的,绝大部分情况下是一样的,少数情况下可能不同当前我们经过某个代理进行转发。过程中&#xf…

2024年项目经理不能错过的开源项目管理系统大盘点:全面指南

在2024年,随着项目管理领域的不断发展,开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统,帮助项目经理们找到最佳选择,不容错过。 在项目管理日益复杂的今天,开源项…

腾讯云点播及声音上传

文章目录 1、开通腾讯云点播2、获取腾讯云API密钥3、完成声音上传3.1、引入依赖3.2、参考:接入点地域3.3、参考:任务流设置3.4、首先修改配置:3.4.1、 3.5、TrackInfoApiController --》 uploadTrack()3.6、VodServiceImpl --》 uploadTrack(…

SOLIDWORKS Flow Simulation对几何模型都有哪些要求?

SOLIDWORKS Flow Simulation 是一款集设计与仿真于一体的流体仿真软件(EFD,CFD),以其操作简便、建模快捷和快速收敛等优点,深受广大初学者的喜爱。 在模型建立方面,Flow Simulation 能够直接利用 SOLIDWOR…

项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持windows、linux、国产麒麟系统)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142454993 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、Op…

数据科学 - 字符文本处理

1. 字符串的基本操作 1.1 结构操作 1.1.1 拼接 • 字符串之间拼接 字符串之间的拼接使用进行字符串的拼接 a World b Hello print(b a) • 列表中的字符串拼接 将以分隔符‘,’为例子 str [apple,banana] print(,.join(str)); • 字符串中选择 通过索引进行切片操…

【网络安全】-访问控制-burp(1~6)

文章目录 前言   1.Lab: Unprotected admin functionality  2.Lab: Unprotected admin functionality with unpredictable URL   3.Lab: User role controlled by request parameter   4.Lab:User role can be modified in user profile  5.Lab: User ID controlled by…

Windows 10 系统安装 FFmpeg 查看、转换、编辑音频文件

1、FFmpeg官网:FFmpeg 点击下载 可以选择下载full版本 下载之后解压到指定目录,在系统环境变量 Path 里面新增环境变量 打开CMD终端运行 ffmpeg -version 查看是否安装成功。 2、基本命令 查看音频基本信息 ffprobe 1.mp3 ##输出 [mp3 000002ab334405…

LLM - 使用 XTuner 指令微调 多模态大语言模型(InternVL2) 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142528967 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 XTuner…

Spark-RDD持久化

一、Spark的三种持久化机制 1、cache 它是persist的一种简化方式,作用是将RDD缓存到内存中,以便后续快速访问,提高计算效率。cache操作是懒执行的,即执行action算子时才会触发。 2、persist 它提供了不同的存储级别&#xff0…

关于神经网络的一个介绍

这篇文章中,我将简单介绍下与神经网络有关的东西,包括它的基本模型,典型的算法以及与深度学习的联系等内容。 一、神经元 神经网络是由许多个神经元组成的,在生物的神经网络中,就是神经元间相互连接,传递…

高校竞赛管理系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大,容错率低&am…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序,所以摸索了一种 Ubuntu 系统下开机自启动的方法,开机自启动 .sh 脚本,加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

Leetcode - 周赛416

目录 一,3295. 举报垃圾信息 二,3296. 移山所需的最少秒数 三,3297. 统计重新排列后包含另一个字符串的子字符串数目 I 四,3298. 统计重新排列后包含另一个字符串的子字符串数目 II 一,3295. 举报垃圾信息 本题就是…

Linux 安装nginx

下载安装 https://nginx.org/en/download.html 解压 tar -zxvf nginx-1.26.2.tar.gz -C /opt chmod 777 -R /opt/nginx-1.26.2/编译 && 安装 # 安装到同目录以免乱套,一定要先创建目录 mkdir /opt/nginx-1.26.2/nginx/# 编译 make # 安装,大…

将Mixamo的模型和动画导入UE5

首先进入Mixamo的官网 , 点击 Character 选择一个模型 (当然你也可以自己上传模型/绑定动画) 然后点击下载 , 这个作为带骨骼的模型 选择FBX格式 , T Pose 直接下载 点击 Animations 选择动画 , 搜索 idle 默认站立动画 点击下载 , 格式选择 FBX , 不带模型只要骨骼 , 帧数选6…

MySQL_表_进阶(2/2)

上一章我们谈了排序子句,使用ORDER BY 字段 DESC/ASC。以及左右连接的多关系查询。 今天,没错,四张表最后两个需求 ✨涉及聚合函数查询与指定别名 四张表: 学院表:(testdb.dept) 课程表:(testdb.course) 选…

Rust编程的if选择语句

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 Rust语言实现选择结构时,根据某种条件的成立与否而采用不同的程序段进行…

基于nodejs+vue的农产品销售管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

FortiGate 无线组网

无线管理与配置 FortiAP 连接 internal 接口之后自动获得 ip 地址:192.168.1.xxx/24在 FortiGate 中创建 SSIDFortiGate 自动发现 FortiAP,将 FortiAP 添加到 FortiGate将 SSID 和 FortiAP 关联创建防火墙策略 下面我们就来一起看看在 FortiGate 中该如…