快速上手LangChain(一)

文章目录

  • LangChain
    • 一、背景
    • 二、什么是langchain
    • 三、Components 组件
      • Prompt templates 提示模板
      • Chat models 聊天模型
      • Messages 消息
      • Document loaders
      • Text Spltters 文本分割
      • Vectorstores 向量数据库
    • 四、langchain基础概念
      • Tool calling 工具调用
        • (1) 工具创建
        • (2) 工具绑定
        • (3) 工具调用
        • (4) 工具执行
        • tool-calling最佳实践
    • 五、langchain使用环境的搭建、安装
    • 参考资料
      • 视频学习资料整理

LangChain

一、背景

2024年12月20日,美国人工智能公司LangChain日前发布了《2024年人工智能全景报告》(State of AI Report 2024)。自2018年开始,LangChain团队已连续七年发布当年的《人工智能全景报告》,成为人工智能行业流行的风向标。在今年的报告中,通过深入探究大模型应用开发平台LangSmith产品的使用模式,LangChain团队揭示出人工智能生态系统以及人们构建大型语言模型应用的方式是如何演变的。

LangChain团队在报告中指出,随着用户在LangSmith中进行追踪、评估和迭代,他们观察到了几个显著的变化,其中包括开源模型采用率的急剧上升,以及从以检索工作流程为主转向具有多步骤、代理性工作流程的智能体应用。

二、什么是langchain

LangChain是一个开源的Python库,它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成,实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛,使得任何人都可以基于LLM构建自己的创意应用。

目前,它提供了 Python 和 JavaScript(确切地说是 TypeScript)的软件包。

如果您是一个 构建生产级应用的开发者,并且需要一个 灵活、以代码为中心的解决方案,LangChain 是您的最佳选择。它非常适合那些希望控制应用架构并且能舒适地编写代码来定义工作流程的开发者。

三、Components 组件

Prompt templates 提示模板

官方文档:https://python.langchain.com/docs/concepts/prompt_templates/

提示模板负责将用户输入的格式格式化为可传递给语言模型的格式。

Prompt Templates 将字典作为输入,其中每个键代表 Prompt 模板中要填写的变量

PromptTemplate 的常用方法如下所示:

from langchain_core.prompts import PromptTemplate

prompt_template = PromptTemplate.from_template("Tell me a joke about {topic}")

prompt_template.invoke({"topic": "cats"})

Chat models 聊天模型

官方文档:https://python.langchain.com/docs/integrations/chat/

聊天模型是较新的语言模型形式,用于接收消息并输出消息。

聊天模型是使用一系列消息作为输入并返回消息作为输出(而不是使用纯文本)的语言模型。这些通常是较新的型号。

Messages 消息

官方文档:https://python.langchain.com/docs/concepts/messages/

Messages are the input and output of chat models. They have some content and a role, which describes the source of the message.
消息是聊天模型的输入和输出。它们具有一些内容和一个角色,用于描述消息的来源。

Each message has a role (e.g., “user”, “assistant”) and content (e.g., text, multimodal data) with additional metadata that varies depending on the chat model provider.
每条消息都有一个角色(例如,“用户”、“助手”)和内容(例如,文本、多模态数据),以及根据聊天模型提供商而有所不同的附加元数据

LangChain 提供了可以跨聊天模型使用的统一消息格式,允许用户使用不同的聊天模型,而无需担心每个模型提供商使用的消息格式的具体细节。

Document loaders

官方文档:https://python.langchain.com/docs/integrations/document_loaders/

Document 文档
当使用loader加载器读取到数据源后,数据源需要转换成 Document 对象后,后续才能进行使用。

DocumentLoaders load data into the standard LangChain Document format.
DocumentLoader 将数据加载为标准的 LangChain Document 格式。

官方提供了超级的多的加载器供你使用

Text Spltters 文本分割

顾名思义,文本分割就是用来分割文本的。为什么需要分割文本?因为我们每次不管是做把文本当作 prompt 发给 openai api ,还是还是使用 openai api embedding 功能都是有字符限制的。

比如我们将一份300页的 pdf 发给 openai api,让他进行总结,他肯定会报超过最大 Token 错。所以这里就需要使用文本分割器去分割我们 loader 进来的 Document。

Vectorstores 向量数据库

因为数据相关性搜索其实是向量运算。所以,不管我们是使用 openai api embedding 功能还是直接通过向量数据库直接查询,都需要将我们的加载进来的数据 Document 进行向量化,才能进行向量运算搜索。转换成向量也很简单,只需要我们把数据存储到对应的向量数据库中即可完成向量的转换。

官方也提供了很多的向量数据库供我们使用。

四、langchain基础概念

Tool calling 工具调用

官方文档:https://python.langchain.com/docs/concepts/tool_calling/

工具调用允许模型自主调用函数或外部资源,标志着更多的智能体行为,即模型决定何时采取行动。增加工具调用的使用可以增强智能体与外部系统交互的能力,并执行如写入数据库等任务。

您有时会听到术语 function calling。我们将此术语与工具调用互换使用。

请记住,虽然名称“工具调用”意味着模型正在直接执行某些操作,但实际上并非如此!该模型仅生成工具的参数,实际运行(或不运行)取决于用户

工具调用是一种从模型生成结构化输出的通用技术,即使您不打算调用任何工具,也可以使用它。一个示例用例是从非结构化文本中提取。

在这里插入图片描述
如果您想了解如何使用模型生成的工具调用来实际运行工具,请查看本指南。

Tool calling is not universal, but is supported by many popular LLM providers. You can find a list of all models that support tool calling here.
工具调用不是通用的,但许多流行的 LLM。您可以在此处找到支持工具调用的所有型号的列表。

(1) 工具创建:使用 @tool 装饰器创建工具。工具是函数与其架构之间的关联。
(2) 工具绑定:工具需要连接到支持工具调用的模型。这使模型能够识别工具以及工具所需的关联输入方案。
(3) 工具调用:在适当的时候,模型可以决定调用工具并确保其响应符合工具的输入模式。
(4) 工具执行:可以使用模型提供的参数执行工具。

(1) 工具创建

创建工具的推荐方法是使用 @tool 装饰器。

from langchain_core.tools import tool

@tool
def multiply(a: int, b: int) -> int:
    """Multiply a and b."""
    return a * b

延伸阅读
See our conceptual guide on tools for more details.
有关更多详细信息,请参阅我们的工具概念指南。
See our model integrations that support tool calling.
请参阅支持工具调用的模型集成。

(2) 工具绑定

许多模型提供程序都支持工具调用。

需要理解的核心概念是 LangChain 提供了一个标准化的接口,用于将工具连接到模型。.bind_tools() 方法可用于指定模型可以调用哪些工具

model_with_tools = model.bind_tools(tools_list)

As a specific example, let’s take a function multiply and bind it as a tool to a model that supports tool calling.
作为一个具体的例子,让我们以一个函数 multiply 为例,将其作为工具绑定到支持工具调用的模型。

(3) 工具调用

工具调用的一个关键原则是,模型根据输入的相关性决定何时使用工具。模型并不总是需要调用工具。例如,给定一个不相关的输入,模型不会调用该工具:

result = llm_with_tools.invoke("Hello world!")

结果将是一个 AIMessage,其中包含模型以自然语言的响应(例如,“Hello!”)。
但是,如果我们传递与工具相关的输入,模型应选择调用它:

result = llm_with_tools.invoke("What is 2 multiplied by 3?")

如果调用了该工具,则 result 将具有 tool_calls 属性。此属性包括执行工具所需的一切,包括工具名称和输入参数:

result.tool_calls
{'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'xxx', 'type': 'tool_call'}
(4) 工具执行

工具实现了 Runnable 接口,这意味着它们可以直接调用(例如 tool.invoke(args))。

LangGraph 提供预构建的组件(例如 ToolNode),这些组件通常会代表用户调用该工具。

tool-calling最佳实践

Models that have explicit tool-calling APIs will be better at tool calling than non-fine-tuned models.
具有显式工具调用 API 的模型将比非微调模型更擅长工具调用。
Models will perform better if the tools have well-chosen names and descriptions.
如果工具具有精心选择的名称和描述,则模型的性能会更好。
Simple, narrowly scoped tools are easier for models to use than complex tools.
简单、范围狭窄的工具比复杂的工具更容易被模型使用。
Asking the model to select from a large list of tools poses challenges for the model.
要求模型从大量工具中进行选择会给模型带来挑战。

我的一些理解:
Models that have explicit tool-calling APIs will be better at tool calling than non-fine-tuned models. tool-calling 其实是模型的能力
大模型能tool call / function call,是因为在SFT阶段加入了function call的数据集对大模型进行微调。

五、langchain使用环境的搭建、安装

  • Python环境

  • Jupyter Notebook的安装与使用
    建议可以vscode 安装 jupyter插件,方便编码
    另外vscode配置默认python解释器
    Ctrl + Shift + p 打开命令行面板
    输入 Python:Select Interpreter 命令,配置默认的解释器

  • LangChain安装

pip install langchain

参考资料

视频学习资料整理

IBM技术团队:LangChain vs LangGraph,两个框架的故事
参考URL: https://www.bilibili.com/video/BV1MqmfYzEeT/
(超爽中英!) 2024公认最好的【吴恩达LangChain+RAG】教程!
视频链接: https://www.bilibili.com/video/BV1TJ4zemETf/
AI Agent智能体开发,一步步教你搭建agent开发环境
视频链接: https://www.bilibili.com/video/BV1Pyy6Y3EP3

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!DeepSeek-V3上线即开源;OpenAI 发布高级推理模型 o3https://mp.weixin.qq.com/s/9qU_zzIv9ibFdJZ5cTocOw?token47960959&langzh_CN 「青稞大模型Weekly」,持…

记录一下图像处理的基础知识

记录一下自己学习的图像处理的基础知识。 一、图像的文件格式以及常用的图像空间 1、文件格式 常见的图像文件格式有 jpg, png, bmp, gif (1)jpg:有损压缩算法,大幅减小文件大小,便于存储和传输,兼容性…

时间敏感网络中全面分析与调度的模型驱动方法

论文:A Model-Driven Approach for the Comprehensive Analysis and Scheduling in Time-Sensitive Networks》 背景与动机 TSN 的发展与应用领域:自 2012 年起,IEEE 802.1 TSN 任务组致力于开发通信标准,增强 IEEE 802 网络&…

QT---------GUI程序设计基础

代码UI化设计(QT) 实例功能概述 假设我们要创建一个简单的计算器应用程序。该应用程序具有以下功能: 包含数字按钮(0-9)、操作符按钮(、-、*、/)、等于按钮()和清除按…

大模型提示词初探

大模型提示词初探 在与大模型交互的过程中,提示词起着至关重要的作用,它犹如给模型下达的精准任务指令,直接影响着模型生成内容的准确性、高效性与合理性。合理运用提示词,能够有效减少模型出现错误和幻觉的情况,从而…

Navicat 连接 SQL Server 详尽指南

Navicat 是一款功能强大的数据库管理工具,它提供了直观的图形界面,使用户能够轻松地管理和操作各种类型的数据库,包括 SQL Server。本文将详尽介绍如何使用 Navicat 连接到 SQL Server 数据库,包括安装设置、连接配置、常见问题排…

【Linux】进程间通信-> 共享内存

共享内存原理 在C语言/C中,malloc也可以在物理内存申请空间,将申请的物理内存空间通过页表映射到进程地址空间,将内存空间的起始地址(虚拟地址)返回,进而进程可以使用虚拟地址通过页表映射到物理内存的方式…

高仿CSDN编辑器,前端博客模板

高仿CSDN编辑器纯前端模板,使用的js、html、vue、axios等技术,网络请求库已进行封装,可以按需调整界面,需要源码联系(4k左右)。 1.支持代码高亮 2.支持目录点击定位 3.支持文件上传、图片上传(需要自己写后端接口) 4.M…

国产低代码框架zdppy开发笔记002 标准的接口响应

前言 通过前面的学习, 我们已经知道了zdppy_api和zdppy_req的基本用法, 接下来我们会在学习中多次用到这两个框架. 我们已经知道了该如何响应一个字符串,但是我们该如何响应json数据呢? 在zdppy_api中,我们定义了一组规范的API响应, 我们慢慢来看看. 规范的响应 首先来看…

实用技巧:关于 AD修改原理图库如何同步更新到有原理图 的解决方法

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

牛客周赛 Round 74

D. 预知 题目链接 题意有点绕,简单来说是其中一堆牌,问最少预知几张才能保证任取两张都不会导致种类重复。一开始对每张牌种类不是已知的,已知的是每种牌的牌数。 思路就是相当于把其中一种明牌,保证任取两张都不会导致种类重复…

【linux学习指南】SIGCHLD信号

文章目录 📝SIGCHLD信号🚩总结 📝SIGCHLD信号 进程⼀章讲过⽤wait和waitpid函数清理僵⼫进程,⽗进程可以阻塞等待⼦进程结束,也可以⾮阻塞地查询是否有⼦进程结束等待清理(也就是轮询的⽅式)。采⽤第⼀种⽅式,⽗进程阻塞了就不能处理⾃⼰的⼯…

AI助力SEO优化的关键词策略解析

内容概要 在数字营销的快速发展中,人工智能(AI)正逐步成为提升搜索引擎优化(SEO)效果的重要工具。关键词策略是SEO成功的关键要素之一,而AI技术的应用使得这一过程更加高效和精准。在关键词研究中&#xf…

PHP-Casbin v4.0.0 发布,支持 ACL、RBAC、ABAC 等模型的访问控制框架

PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架,支持 ACL、RBAC、ABAC 多种模型。它采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等。 更新内容: http…

解决Git中没有小绿勾与红叉叉的问题

一、检查自己的软件 必须安装Git和Tortoisegit(也就是俗称的小乌龟)这两个软件。 Git的下载地址: CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-for-windows/ 寻找与自己电脑相配的软件版本就可以了。 Tor…

搭建跨境电商企业博客的指南

在跨境电商领域,企业博客不仅是展示品牌形象的窗口,也是连接全球客户的重要桥梁。一个精心搭建的企业博客能够提升品牌知名度、增强客户信任,并促进销售。 搭建企业博客的必要性 1. 建立品牌权威:通过高质量的内容,企…

渗透学习笔记(十一)Burp Suite 总结

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

课设CLion连接Ubuntu14makeQt项目出错解决汇总

在这之前需要注意以下几点: 1、需要 确保CLion能连接Ubuntu14 2、cmakelist.txt文件配置 3、知道部署路径: 问题一:/usr/bin/ld: cannot open output file GreedySnake: Is a directory 否则就会出现make以后应该生成一个可执行文件&…

【GO基础学习】gin的使用

文章目录 模版使用流程参数传递路由分组数据解析和绑定gin中间件 模版使用流程 package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {// 1.创建路由r : gin.Default()// 2.绑定路由规则,执行的函数// gin.Context&#x…

磁编码器(Magnetic Encoder)

磁编码器(Magnetic Encoder)是一种传感器,它通过检测磁性材料的磁场变化来测量旋转或线性位置。编写用于读取磁编码器数据的C语言程序时,您需要根据具体的硬件接口和编码器类型进行调整。以下是一个基本的框架,假设我们…