langchain v0.3更新了什么?

news2024/9/27 20:20:49

版本改动

这是具体改动的链接
在这里插入图片描述
官方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 TypedDict

from langchain_anthropic import ChatAnthropic

class Address(TypedDict):
    street: str
    city: str
    state: 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 True

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

from 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 TypedDict

from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent


llm = 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.coloradmin.cn/o/2170935.html

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

相关文章

Django 配置邮箱服务,实现发送信息到指定邮箱

一、这里以qq邮箱为例,打开qq邮箱的SMTP服务 二、django项目目录设置setting.py 文件 setting.py 添加如下内容: # 发送邮件相关配置 EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend EMAIL_USE_TLS True EMAIL_HOST smtp.qq.com EMAIL…

18724 二叉树的遍历运算

### 思路 1. **递归构建树**: - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置,左边部分是左子树,右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**: - 递归生成左子树的…

《Python编程:从入门到实践》数据可视化

一、项目 数据可视化学习 二、库依赖 matplotlib,pygal, 三、生成数据 1.绘制简单的折线图 import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25] plt.plot(squares) plt.show() 模块pyplot包含很多用于生成图表的函数。 (1&am…

Excel求和为什么是0?结果不对的来跟着步骤排查

大家好,这里是效率办公指南! 🔢 Excel求和功能是日常工作中常用的工具,但有时我们可能会遇到求和结果意外地显示为0,这可能会让我们感到困惑。今天,我们就来具体分析一下可能导致Excel求和结果为0的原因&a…

100套顶刊配色方案!Matlab超绝配色包TheBestColor

两三年前,我刚开始研究制作Matlab配色包,那时Matlab几乎只能用自带的默认配色,选择极少。 时至今日,Matlab配色已不是问题。 实际体验下来,在某些层面,甚至比隔壁R、Python吃得还要好一些。 但吃得太好&…

TARA分析方法论——威胁分析和风险评估方法

一、什么是TARA分析方法论 威胁分析和风险评估(Threat Analysis and Risk Assessment) 通过识别整车/项目的网络安全资产,分析其中的潜在的安全威胁,综合考虑威胁攻击可行性、危害影响等因素,识别出整车/项目可能存在…

【技巧】移动云手机如何防止1小时自动关机

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 背景介绍 领的免费云手机,如果1或2小时内不登录,就会被自动关机,这非常影响使用。本方法可以实现自动刷新页面&…

西门子:觅最佳的生态伙伴,筑最好的数字平台|商业创新同行者

沧海桑田,时光变幻。 纵观全球,历经百年仍能保持基业长青的公司少之又少,而像西门子这样依旧矗立在顶峰的企业可谓凤毛麟角,成功的数字化转型更是为这家企业带来了持续不断的澎湃活力。 作为当代数字化时代的创新经济模式&#…

智能手机取证: 专家如何从被锁定设备中提取数据?

在数字取证领域,从被锁定的手机中检索数据的能力是决定调查成功与否的关键技能。由于智能手机往往是解决复杂案件的关键,智能手机取证已经成为打击犯罪和恐怖主义战争中的一个关键组成部分。通话记录、短信、电子邮件,甚至位置数据都可能被发…

【机器学习(十一)】机器学习分类案例之是否患糖尿病预测—XGBoost分类算法—Sentosa_DSML社区版

文章目录 一、XGBoost算法二、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入和统计分析(二)数据预处理(三)模型训练与评估(四)模型可视化 三、总结 一、XGBoost算法 关于集成学习中的XGBoost算法原理,已经进行了介绍与总结,相关内容可参考【…

代理IP获取工具:轻松获取可靠的代理IP

在网络世界中,代理IP是一个非常有用的工具。无论是为了提升隐私保护,还是为了访问特定的网络资源,代理IP都能提供极大的帮助。本文将介绍几种常见的代理IP获取工具,帮助你轻松获取可靠的代理IP。 什么是代理IP获取工具&#xff1…

c++反汇编逆向还原——for循环(笔记)

c反汇编逆向还原代码for循环的实现,for循环和while循环在逆向还原的区别 一、汇编 mov :将源操作数复制到目的操作数 lea :与mov类似 mov a,b 表示将b赋值给a 若是 mov a,[b] 这是将b的地址赋值给a,相…

RTMP播放器全解析

一、RTMP 播放器概述 (一)RTMP 播放器的定义与作用 RTMP 播放器是一种专门用于播放采用 RTMP(Real Time Messaging Protocol)协议的视频流的工具。在当今的流媒体播放领域中,它扮演着至关重要的角色。RTMP 播放器能够…

找不到d3dx9_43.dll怎么办,d3dx9_43.dll丢失的多种解决方法

在现代计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到d3dx9_43.dll,无法继续执行代码”。这个错误提示通常出现在运行某些游戏或应用程序时,它会导致程序无法正常运行。本文将针对这个问题进行原因分析,并提供…

Ubuntu18升级cmake和python

Ubuntu18升级cmake和python 1、升级cmake至3.22.12、升级python至3.82.1 安装依赖包2.2 添加deadsnakes PPA源2.3 安装python3.82.4 将python各版本添加到update-alternatives2.5 配置python3默认指向python3.82.6 测试python3版本2.7 配置python默认指向python32.8 测试python…

《面向对象是怎样工作的》笔记

6、1、在面向对象的世界中,我们需要事先为所有的行动准备好方法并通过消息传递来调用方法,这样事物才会开始运作。 2、实际上,类、继承和多态应该被明确定义为能提高软件的可维护性和可重用行的结构。类将变量和子程序汇总在一起&#xff0c…

叉车高位显示器无线摄影,安装更加便捷!

叉车叉货,基本功能,但货叉升降高度确不一定,普通的3米左右,高的十几米,特别是仓储车,仓库叉货空间小,环境昏暗,视线受阻严重,司机叉货升的那么高怎么准确无误的插到货呢&…

尊享免费博导实验指导、结果解读、一站式实验服务与论文润色,助力科研人员成就卓越

🌟 教授团队领衔,全方位服务! 🚀 从实验设计到论文发表,一站式解决方案! 📈 选择我们,加速您的科研进程,让成果不再等待! 📝 专业分析 定制服…

C高级(Day21)

一、学习内容 shell指令 学习回顾 mkdir 创建目录 cd 切换目录 cd \ cd . \ cd .. touch 、 vim 创建文件 rm 删除文件 rm -r 删除文件/删除目录 rmdir 只能删除空目录 cp 复制文件 mv 移动、重命名、剪切 cat 显示文件内容 ls 查看目录下的所有文件 ls -a 、ls -l pw…

kali的tplmap使用报错解决

问题 当我们直接使用kali下的tplmap时报错了。 Tplmap 0.5 Automatic Server-Side Template Injection Detection and Exploitation Tool Testing if GET parameter name is injectable Exiting: module collections has no attribute Mapping 这是因为tplmap要求的版本…