来,我们把LangChain了解一下

目录

LangChain简介

LangChain Experssion Language

常见API key申请


LangChain简介

最近要学的东西可太多了,好的,我们先来看看LangChain是什么东西,咱就是说开干吧:

pip install langchain

Get started吧:Get started | 🦜️🔗 Langchain:

LangChain is a framework for developing applications powered by language models. It enables applications that:

  • Are context-aware: connect a language model to sources of context (prompt instructions, few shot examples, content to ground its response in, etc.)
  • Reason: rely on a language model to reason (about how to answer based on provided context, what actions to take, etc.)

看起来呢,在这个框架里你可以搭建基于语言模型的有上下文感知能力且会一点推理的应用程序。这个框架呢,主要有以下四个部分构成:

  • LangChain Libraries:Python 和 JavaScript 库
  • LangChain Templates:一系列易于部署的参考架构,适用于各种任务
  • LangServe:用于将 LangChain 链部署为 REST API 的库(REST API也称为RESTful API,是遵循 REST 架构规范的应用编程接口API 或 Web API,支持与 RESTful Web 服务进行交互)
  • LangSmith:一个开发者平台,可调试、测试、评估和监控基于任何 LLM 框架构建的链,并与 LangChain 无缝集成

这些产品联通了整个应用程序生命周期:

  • 开发:在 LangChain/LangChain.js 中编写应用程序,使用模板作为参考开始运行。
  • 生产:使用 LangSmith 检查、测试和监控链,以便改进和部署。
  • 部署:使用 LangServe 将任何链转换为 API。

看一眼Model I/O图就大概知道这玩意儿的流程了:

用户的query可以以format的形式变成prompt去传递给大模型,然后预测阶段接LLM或ChatModel得到预测输出,结果进行parse后得到最后结构化的字符。

LangChain Experssion Language

大家直接看官网链接:LangChain Expression Language (LCEL) | 🦜️🔗 Langchain

大概就是用简单的LCEL语法来搭建prompt+LLM的chain。文章给了一个示例(openai需要参数openai_key,申请地址:https://platform.openai.com/api-keys):

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 定义prompt, template直接写出来了
prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")

# 定义model,用chatopenai模型,需要openai的api key
model = ChatOpenAI(openai_api_key='你的open_api_key')

# 定义结果解析器
output_parser = StrOutputParser()

# 定义prompt+LLM的chain
chain = prompt | model | output_parser

# 通过invoke输入来运行定义好的chain
print(chain.invoke({"topic": "ice cream"}))

代码中的这个chain = prompt | model | output_parser,就是咱们的LCEL语法啦,原文是这么解释中间的个竖着的符号:

The | symbol is similar to a unix pipe operator, which chains together the different components feeds the output from one component as input into the next component.

In this chain the user input is passed to the prompt template, then the prompt template output is passed to the model, then the model output is passed to the output parser.

不同component之间的传递过程如下图所示:输入来了以后过prompt模版,然后输入到chatmodel里(也有LLM),然后得到的结果进行output parse转化成可以看懂的字符串的结果。

如果你不是仅仅让模型直接给你回复答案,而是需要从已有的文本数据里先做一步检索,并将检索到的结果作为模型的输入,那你请看以下官方代码:

from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings

# 把文本存储为vector
# 用openaiembeddings来进行embedding的转化
vectorstore = DocArrayInMemorySearch.from_texts(
    ["harrison worked at kensho", "bears like to eat honey"],
    embedding=OpenAIEmbeddings(openai_api_key='你的open_api_key'),
)
# 设置一个retriever来完成对已经存储好的vector进行检索
retriever = vectorstore.as_retriever()

# prompt的template定义
template = """Answer the question based only on the following context:
{context}

Question: {question}
"""

# 根据自定义的template定义prompt类
prompt = ChatPromptTemplate.from_template(template)

# 加载chatopenai模型
# 需要输入api的key
model = ChatOpenAI(openai_api_key='your api key')

# 定义结果输出的parser
output_parser = StrOutputParser()

# context是根据用户question检索得到的结果
# question通过RunnablePassthrough()函数传递
setup_and_retrieval = RunnableParallel(
    {"context": retriever, "question": RunnablePassthrough()}
)

# 定义chain
chain = setup_and_retrieval | prompt | model | output_parser

# 用户输入问题
print(chain.invoke("where did harrison work?"))

不同component的结果传递步骤如下图所示:

那么component有哪些类型呢?可见下表:

常见API key申请

✅ gpt系列,需要参数openai_api_key,申请地址:https://platform.openai.com/api-keys

记得Create new secret key以后需要把你的key在别的地方存一下,因为不会再能展示给你看了。

✅ anthropic也就是前几天发的Claude系列,需要参数anthropic_api_key,申请地址:App unavailable \ Anthropic

同样的记得Create key以后需要把你的key在别的地方存一下,因为不会再能展示给你看了!!!重要的事情说了两遍了。

✅ 这个key的申请,在国内的小伙伴或多或少需要翻墙之类的。目前这两家LLM都给了每个月5刀的免费使用额度。感觉是可以简单得自己玩玩试试。

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

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

相关文章

基于 EfficientNetV2 实现判别MNIST 手写模型分类

pytorch深度学习项目实战100例 的学习记录 我的环境: 白票大王: google colab 用其他的话,其实实现也行,但是让小白来重环境来开始安装的话,浪费时间 论文速读 EfficientNetV2是由 Google Research,Br…

(3)(3.3) MAVLink高延迟协议

文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中,每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求&#xff08…

Java常用类库:Math类

在Java编程语言中,java.lang.Math类提供了一系列用于执行基本数学运算的静态方法。这些方法允许你执行各种数学计算,如三角函数、指数函数、对数函数、取整函数等。在本教程中,我们将介绍Math类的常用方法及其用法。 常用方法 以下是Math类…

小迪安全33WEB 攻防-通用漏洞文件上传中间件解析漏洞编辑器安全

#知识点: 1、中间件安全问题 2、中间件文件上传解析 3、Web 应用编辑器上传 编辑器也就是第三方插件,一般都是文件上传漏洞 #详细点: 1、检测层面:前端,后端等 2、检测内容:文件头,完…

linux安装ngnix

一、将nginx-1.20.1.tar.gz上传至linux服务器目录下 二、将nginx安装包解压到/usr/local目录下 tar -zxvf /home/local/nginx-1.20.1.tar.gz -C /usr/local/三、预先安装依赖 yum -y install pcre-devel yum -y install openssl openssl-devel yum -y install gcc gcc-c auto…

部署LVS负载均衡架构

目录 一、ipvsadm 工具 二、NAT模式下部署LVS负载均衡 1、部署NFS共享存储服务器 1.1 安装NFS软件 1.2 新建共享目录和站点文件 1.3 设置共享策略 2、部署节点服务器1 2.1 安装并启动nginx软件 2.2 挂载共享目录到网页站点目录 2.3 修改网关 3、部署节点服务器2 3.…

Python算法100例-3.7 高次方数的尾数

1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序 1.问题描述 求13的13次方的最后三位数。 2.问题分析 许多初学者看到本题最容易想到的方法就是:将13累乘13次后截取最后三位即可。但是计算机中存储的整数是有一定范围的&#…

视频扩散模型介绍 Video Diffusion Models Introduction

视频扩散模型介绍 Video Diffusion Models Introduction Diffusion 扩散模型中的一些概念DDPMDDIMCLIPLatent DiffusionStable DiifusionLoRADreamBoothControlNet 视频生成评估标准图片层面视频层面 前人的工作Make-A-VideoAlign your Latents 开源视频生成模型ModelScopeT2V&…

vant van-field 密码输入框小程序里隐藏、显示密码bug总结

老规矩先上效果图: vant 输入框组件 密码的隐藏与显示功能: 注: 用password属性控制密码的显示与隐藏 不要用type属性,type属性在真机上有时会没有效果 1、当然如果只用typepassword 不需要切换显示、隐藏也可以使用。 2、如果用到了密码的显示与…

pandas数据合并

import pandas as pd import numpy as np# 随机生成两个df df1 pd.DataFrame(np.random.randn(3,4),columns [A,B,C,D]) df2 pd.DataFrame(np.random.randn(2,3),columns [A,B,D])print(打印df1\n,df1) print(打印df2\n,df2)# 默认纵向合并 qh_df_z pd.concat([df1,df2]) …

掌握Nodejs高级图片压缩技巧提升web优化

掌握Nodejs高级图片压缩技巧提升web优化 在当今的数字时代,图像在网络开发中发挥着至关重要的作用。它们增强视觉吸引力、传达信息并吸引用户。然而,高质量的图像通常有一个显着的缺点——较大的文件大小会减慢网页加载时间。为了应对这一挑战并确保快速加载网站,掌握 Node…

高中信息技术教资学习

一、几种排序方法的基本思想 1、直接插入排序(假设按照从小到大进行排序) 默认第一个元素是有序的,从有序的元素末尾开始,与要插入的元素进行比较,如果要插入的元素比有序的末尾元素小的话,就将有序末尾元…

ChatGPT高效提问——说明提示技巧

ChatGPT高效提问——说明提示技巧 现在,让我们开始体验“说明提示技巧”(IPT, Instructions Prompt Technique)和如何用它生成来自ChatGPT的高质量的文本。说明提示技巧是一个通过向ChatGPT提供需要依据的具体的模型的说明来指导ChatGPT输出…

图神经网络实战(4)——基于Node2Vec改进嵌入质量

图神经网络实战(4)——基于Node2Vec改进嵌入质量 0. 前言1. Node2Vec 架构1.2 定义邻居1.2 在随机游走中引入偏向性1.3 实现有偏随机游走 2. 实现 Node2Vec小结系列链接 0. 前言 Node2Vec 是一种基于 DeepWalk 的架构,DeepWalk 主要由随机游…

Vue源码系列讲解——过滤器篇【三】(解析过滤器)

目录 1. 前言 2. 在何处解析过滤器 3. parseFilters函数分析 4. 小结 1. 前言 在上篇文章中我们说了,无论用户是以什么方式使用过滤器,终归是将解析器写在模板中,既然是在模板中,那它肯定就会被解析编译,通过解析用…

【ESP32 IDF快速入门】点亮第一个LED灯与流水灯

文章目录 前言一、有哪些工作模式?1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、GPIO操作函数2.1 GPIO 汇总2.2 GPIO操作函数gpio_config配置引脚reset 引脚函数设置引脚电平选中对应引脚设置引脚的方向 2.3 点亮第一个灯 三、流水灯总结 前言 ESP32…

【Godot4.2】GDScript数组分类及类型化数组和紧缩数组概述

概述 GDScript的数组是一种很常用的数据类型。本文主要阐述一下GDScript数组分类,以及官方文档和大多数视频或教程较少提及的类型化数组和紧缩数组。 GDScript数组分类 通过反复查阅GDScript内置文档并进行细节比较,发现GDScript的数组,可…

Qt for WebAssembly : Application exit (SharedArrayBuffer is not defined)

用Qt开发 WebAssembly,放到nginx里面,用127.0.0.1访问没问题,用局域网IP访问就提示如下: 总结了以下两种解决办法: ①:配置 nginx http 头 [ 支持:WebAssembly Qt (single-threaded) ] ②&#…

关于 selinux 规则

1. 查看selinux状态 SELinux的状态: enforcing:强制,每个受限的进程都必然受限 permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志 disabled:禁用 相关命令&#xf…

ElevenLabs用AI为Sora文生视频模型配音 ,景联文科技提供高质量真人音频数据集助力生成逼真音效

随着Open AI公司推出的Sora文生视频模型惊艳亮相互联网,AI语音克隆创企ElevenLabs又为Sora的演示视频生成了配音,所有的音效均由AI创造,与视频内容完美融合。 ElevenLabs的语音克隆技术能够从一分钟的音频样本中创建逼真的声音。为了实现这一…