[LangChain]简介快速入门

news2024/11/17 3:56:12

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:人工智能。

目录

  • 1、简介
  • 2、快速入门
    • 2.1、LLMs
    • 2.2、聊天模型
    • 2.3、提示模板
    • 2.4、链
    • 2.5、代理
    • 2.6、内存

1、简介

LangChain 是一个基于语言模型开发应用程序的框架。它可以实现以下功能:
● 数据感知:将语言模型与其他数据源连接起来
● 主动性:允许语言模型与其环境进行交互
LangChain 的主要价值在于:

  1. 组件:用于处理语言模型的抽象,以及每个抽象的一系列实现。无论您是否使用 LangChain 框架的其他部分,组件都是模块化且易于使用的
  2. 现成的链式组装:用于完成特定高级任务的结构化组件组装
    现成的链式组装使得入门变得很容易。对于更复杂的应用程序和细致入微的用例,组件可以轻松自定义现有的链式组装或构建新的链式组装。

2、快速入门

构建应用程序:
现在我们可以开始构建我们的语言模型应用程序了。LangChain提供了许多可以用于构建语言模型应用程序的模块。这些模块可以作为简单应用程序中的独立模块使用,也可以组合在一起用于更复杂的用例。

2.1、LLMs

从语言模型获取预测结果:
LangChain的基本构建模块是LLM,它接受文本并生成更多的文本。
例如,假设我们正在构建一个根据公司描述生成公司名称的应用程序。为了做到这一点,我们需要初始化一个OpenAI模型封装器。在这种情况下,由于我们希望输出更随机,我们将使用较高的温度来初始化我们的模型。

现在我们可以传入文本并获得预测结果了!
在这里插入图片描述

2.2、聊天模型

聊天模型是语言模型的一种变体。
虽然聊天模型在内部使用语言模型,但其公开的接口略有不同:它们不是提供“文本输入,文本输出”的API,而是提供了一个“聊天消息”作为输入和输出的接口。
您可以通过将一个或多个消息传递给聊天模型来获取聊天补全。响应将是一条消息。
LangChain当前支持的消息类型有AIMessage、HumanMessage、SystemMessage和ChatMessage – ChatMessage接受一个任意的角色参数。
大多数情况下,只需要处理HumanMessage、AIMessage和SystemMessage。

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI(temperature=0)
chat.predict_messages([HumanMessage(content="Translate this sentence from English to French. I love programming.")])
# >> AIMessage(content="J'aime programmer.", additional_kwargs={})
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage,SystemMessage,AIMessage
chat = ChatOpenAI(temperature=.7,openai_api_key = openai_api_key)
chat(
    [
        SystemMessage(content="你是一个很棒的粤菜点餐的人工智能机器人,可以帮助用户在一个简短的句子中弄清楚该吃什么"),
        HumanMessage(content="我喜欢西红柿,我应该吃什么?")
    ]
)
chat(
    [
        SystemMessage(content="你是一个很好的 AI 机器人,可以帮助用户在一个简短的句子中找出去哪里旅行"),
        HumanMessage(content="我喜欢海滩,我应该去哪里?"),
        AIMessage(content="你应该去广东深圳"),
        HumanMessage(content="当我在那里时我还应该做什么?")
    ]
)

在这里插入图片描述

了解聊天模型与普通LLM的区别是有用的,但有时候能够将它们视为相同也很方便。 LangChain通过还提供了一个接口,通过该接口您可以像操作普通LLM一样与聊天模型进行交互。 您可以通过predict接口进行访问。

chat.predict("Translate this sentence from English to French. I love programming.")
>> J'aime programmer

2.3、提示模板

大多数LLM应用程序不会直接将用户输入传递给LLM。通常,它们会将用户输入添加到一个更大的文本片段中,称为提示模板,在特定任务上提供额外的上下文。
在前面的示例中,我们传递给模型的文本包含了生成公司名称的指令。对于我们的应用程序来说,如果用户只需要提供公司/产品的描述,而不必担心给模型提供指令,那就太好了。
LLMs:
使用PromptTemplates非常简单!在这种情况下,我们的模板将非常简单:
首先,我们需要安装他们的Python包: from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template(“What is a good name for a company that makes {product}?”) prompt.format(product=“colorful socks”)
Chat Models:
与LLMs类似,您可以使用MessagePromptTemplate来使用模板。您可以从一个或多个MessagePromptTemplate构建一个ChatPromptTemplate。您可以使用ChatPromptTemplate的format_messages方法来生成格式化的消息。
因为这是生成消息列表,所以它比普通的提示模板稍微复杂一些,普通的提示模板只生成一个字符串。请参阅有关提示的详细指南,了解此处可用的更多选项。
首先,我们需要安装他们的Python包: from langchain.prompts.chat import ( ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, ) 访问API需要一个API密钥。
在初始化OpenAI LLM类时直接通过 openai_api_key 命名参数传递密钥:
chat_prompt.format_messages(input_language=“English”, output_language=“French”, text=“I love programming.”)

[
    SystemMessage(content="You are a helpful assistant that translates English to French.", additional_kwargs={}),
    HumanMessage(content="I love programming.")
]

2.4、链

现在,我们已经有了一个模型和一个提示模板,我们将希望将两者结合起来。链提供了一种将多个原语(如模型、提示和其他链)链接(或链)在一起的方法。
LLMs:
最简单、最常见的链类型是LLMChain,它首先将输入传递给PromptTemplate,然后再传递给LLM。我们可以从现有的模型和提示模板构建一个LLM链。
使用这个我们可以替换

llm.predict("What would be a good company name for a company that makes colorful socks?")

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
chain.run("colorful socks")
Feetful of Fun

这就是我们的第一个链!理解这个简单链的工作原理将为您处理更复杂的链提供良好的基础。

Chat Models:
from langchain import LLMChain
要安装LangChain,请运行:
from langchain.prompts.chat import ( import Tabs from ‘@theme/Tabs’; import TabItem from ‘@theme/TabItem’; import CodeBlock from “@theme/CodeBlock”; )
pip install langchain
conda install langchain -c conda-forge
这将安装LangChain的最低要求。

2.5、代理

我们的第一个链运行了一个预定的步骤序列。为了处理复杂的工作流程,我们需要能够根据输入动态选择操作。
代理正是这样做的:它们使用语言模型来确定要采取的动作及其顺序。代理可以访问工具,并反复选择工具、运行工具并观察输出,直到得出最终答案。
要加载一个代理,您需要选择一个:
● LLM/Chat模型:为代理提供动力的语言模型。
● 工具:执行特定任务的函数。这可以是诸如:Google搜索、数据库查找、Python REPL、其他链等。有关预定义工具及其规范的列表,请参阅工具文档。
● 代理名称:一个字符串,用于引用支持的代理类。代理类主要由语言模型用于确定要采取的动作的提示参数化。因为本笔记本专注于最简单、最高级别的API,所以这只涵盖了使用标准支持的代理的情况。如果您想实现自定义代理,请参阅这里。有关支持的代理及其规范的列表,请参阅这里。
在本示例中,我们将使用SerpAPI来查询搜索引擎。
您需要安装SerpAPI Python包:
pip install google-search-results
并设置SERPAPI_API_KEY环境变量。

2.6、内存

到目前为止,我们所看到的链和代理都是无状态的,但对于许多应用程序来说,引用过去的交互是必要的。一个明显的例子是聊天机器人,你希望它能够在过去的消息上下文中理解新的消息。
内存模块提供了一种维护应用程序状态的方法。基本的内存接口很简单:它允许您根据最新的运行输入和输出更新状态,并使用存储的状态修改(或上下文化)下一个输入。
有许多内置的内存系统。其中最简单的是缓冲内存,它只是将最近的几个输入/输出添加到当前输入的前面 - 我们将在下面的示例中使用它。
LLMs:

from langchain import OpenAI, ConversationChain

llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True)

conversation.run("Hi there!")

这是在引擎盖下面发生的事情:

Entering new chain…
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Current conversation:
Human: Hi there!
AI:
Finished chain.
‘Hello! How are you today?’

现在,如果我们再次运行这个链:

conversation.run("I'm doing well! Just having a conversation with an AI.")

我们会看到传递给模型的完整提示包含了我们第一次交互的输入和输出,以及我们最新的输入:

Entering new chain…
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Current conversation:
Human: Hi there!
AI: Hello! How are you today?
Human: I’m doing well! Just having a conversation with an AI.
AI:
Finished chain.
“That’s great! What would you like to talk about?”

Chat models:
您可以将内存与使用聊天模型初始化的链和代理一起使用。与用于LLM的内存不同之处在于,我们可以将它们保留为自己独特的内存对象,而不是尝试将所有先前的消息压缩成一个字符串。

from langchain.prompts import (
    ChatPromptTemplate,
    MessagesPlaceholder,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate
现在我们可以传入文本并获得预测结果了!
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory

prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(
        "The following is a friendly conversation between a human and an AI. The AI is talkative and "
        "provides lots of specific details from its context. If the AI does not know the answer to a "
        "question, it truthfully says it does not know."
    ),
    MessagesPlaceholder(variable_name="history"),
    HumanMessagePromptTemplate.from_template("{input}")
])

llm = ChatOpenAI(temperature=0)
memory = ConversationBufferMemory(return_messages=True)
conversation = ConversationChain(memory=memory, prompt=prompt, llm=llm)

conversation.predict(input="Hi there!")

Hello! How can I assist you today?

conversation.predict(input="I'm doing well! Just having a conversation with an AI.")

That sounds like fun! I’m happy to chat with you. Is there anything specific you’d like to talk about?

conversation.predict(input="Tell me about yourself.")

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

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

相关文章

1758_C语言通过预处理的eror输出异常信息

全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com) 这个功能我一直没有使用过,能够想到它完全是因为之前从某些代码中看了一眼。或许,这就是我跟这个小小知识点的缘分。 最近想处理一个可以适配多种情况的程序,…

领域驱动设计(DDD,Domain-Driven Design)

领域驱动设计 前言正文领域驱动设计基本概念什么是领域模型?什么是领域服务(Domain Service)?什么是领域事件? 秒杀项目中的领域分析一、秒杀活动领域设计秒杀活动领域模型领域服务领域事件 二、秒杀品领域设计领域模型…

开源自动化测试框架介绍

开源自动化测试框架介绍 一、Junit(白盒测试、API自动化、UI自动化)【官网】【简介】【使用场景】 二、Selenium(Web自动化、爬虫)【官网】【简介】【使用场景】 三、TestNG(白盒测试、API自动化、UI自动化&#xff09…

Linux文件系统架构和共享文件方法

我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊 Linux文件系统架构和共享文件方法。 在Linux环境中使用文件和目录是工作中不可回避的环节。当然,在我的博客里成立windows程序员看linux这个专题,主要还是因为微软也发布了…

LwIP系列(4):ARP协详解

前言 对于应用程序而言,我们与其他设备、服务通信,主要通过域名、IP进行通信,而以太网底层驱动,最终是通过MAC地址来表示设备的唯一标识,即IP是逻辑地址,并不是物理地址。在上一篇文章中,我们也…

【ArcGIS Pro二次开发】(45):手搓一个工具执行进度框

我在之前做的工具中,UI这部分基本没怎么深入,都是直接用的现成的控件。 其中有一个问题比较突出,就是没有工具执行的进度框提示。曾经也用过系统自带的信息提示框和进度条,但太简陋,确实不好用。于是就想抄一个进度框…

Linux 读文件 - readahead预读算法

顺序读场景 intmain{charc[ 4096];intin -1;in open( "news.txt", O_RDONLY);intindex 0;while(read(in, &c, 4096) 4096){printf( "index: %d,len: %ld.\n",index, strlen(c));memset(c, 0, sizeof(c));index;} 数据结构 /** Track a single fi…

CentOS7 静默方式安装 Oracle19C

CentOS7 静默方式安装 Oracle19C 操作系统:CentOS7 Oracle: 19C 安装常用工具和依赖 yum -y install vim tar net-tools wget perl python3 readline* deltarpm python-deltarpm \zip unzip bc compat-libcap1* compat-libcap* binutils compat-libstdc…

最近的感悟与总结

目录 一、判别填鸭、与被填鸭的思考讲解人:听者: 二、最近感悟:三、再来三道数学题吧:四、总结 一、判别填鸭、与被填鸭的思考 讲解人: 1.是否在讲解过程中增加了知识认识的维度?(具体是什么,…

08_Linux按键输入

目录 Linux下按键驱动原理 修改设备树文件 添加KEY设备节点 按键驱动程序编写 编写测试APP 运行测试 Linux下按键驱动原理 按键驱动和LED驱动原理上来讲基本都是一样的,都是操作GPIO,只不过一个是读取GPIO 的高低电平,一个是从GPIO输出高低电平。实现按键输入,在驱动程序…

nginx的安装与自启动配置

1. nginx源码下载 nginx源码下载 2. nginx编译安装 2.1 解压安装包 tar -zxvf nginx-1.24.0.tar.gz2.2 编译安装 cd nginx-1.24.0 ./configure make make install执行./configure时可能出现如下的error,需要安装依赖库: 缺少pcre库 下载pcre安装包…

链码的安装、实例化、查询、调用

目录 1、首先保证网络已经处于启动状态 2、进入CLI容器 3、检查当前节点已经加入到哪些通道中(刚进来,默认是 peer0.example.com) 链码的安装 1、检查通道名称是否设置正确 2、使用install安装链码 3、实例化链码 4、查詢链码 发起交易 …

English Learning - L3 作业打卡 Lesson7 Day52 2023.6.27 周二

English Learning - L3 作业打卡 Lesson7 Day52 2023.6.27 周二 引言🍉句1: And that is when it dawned on me that I didn’t have to be 5,5 ft. anymore.成分划分弱读连读爆破语调 🍉句2: I could be as tall as I wanted, or as short as I wanted …

【电子学会】2023年05月图形化三级 -- 躲避陨石

文章目录 躲避陨石1. 准备工作2. 功能实现3. 设计思路与实现(1)角色、舞台背景设置a. 角色设置b. 舞台背景设置 (2)脚本编写a. 角色:Rocketshipb. 角色:Ball 4. 评分标准5. 知识块 躲避陨石 飞船在陨石乱飞…

MySQL数据库第一课 ---------安装

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com 目录 虚拟环境虚拟环境 安装虚拟机 自主安装 简易安装 ———————————————————————————————————————— 虚拟环境虚拟环境 我们现在运行代码的环境是在 PyCharm…

大型语言模型作为属性化训练数据生成器

大型语言模型作为属性化训练数据生成器,提出一种使用多样化属性提示的数据生成方法,可以生成具有多样性和属性的训练数据,从而提高了模型的性能和数据生成的效率。 动机:大型语言模型(LLM)最近被用作各种自然语言处理(NLP)任务的…

从零开始——腾讯云服务器安装运行部署教程

一、腾讯云 1、购买腾讯云服务器 现在腾讯云服务器有优惠活动(大家可以在网上搜索各个服务器的优惠活动,有很多) 活动链接:上云精选_云服务器秒杀_开发者上云推荐-腾讯云 (tencent.com) 这里我选2G/2核/4M/50G轻量级服务器 这…

Linux基础服务6——Apache

文章目录 一、基本了解1.1 自带工具1.2 服务配置文件1.3 访问控制法则1.4 web相关的命令1.4.1 curl命令1.4.2 httpd命令 二、安装配置2.1 安装服务2.2 访问网页2.3 虚拟主机配置2.3.1 相同ip,不同端口2.3.2 相同端口,不同ip2.3.3 域名访问 三、https3.1 …

深度剖析 Linux 伙伴系统的设计与实现

目录 伙伴系统的核心数据结构 总结: 到底什么是伙伴 伙伴系统的内存分配原理 伙伴系统的内存回收原理 伙伴系统的实现 从 CPU 高速缓存列表中获取内存页 伙伴系统的核心数据结构 如上图所示,内核会为 NUMA 节点中的每个物理内存区域 zone 分配一个…

《计算机网络--自顶向下方法》第四章--网络层:数据平面

4.1网络层概述 每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报;控制平面的主要作用是协调这些本地路由器转发动作,使得数据报沿着源和目的地主机之间的路由器路径进行端到端传送 路由器具有截断的协议栈,即没有网络层…