【LangChain系列 1】 LangChain初探

原文链接:【LangChain系列 1】LangChain初探https://mp.weixin.qq.com/s/9UpbM84LlsHOaMS7cbRfeQ

本文速读:

  • LangChain是什么

  • LangChain初探

    • 环境准备

    • LLMs

    • Prompt Templates

    • Output Parser

    • 第一个LLMChain应用

01 LangChain是什么


LangChain是一个大语言模型的应用开发框架,在LangChain在基础上,我们可以快速开发AI应用。

02 LangChain初探


环境准备

  • openai api key

注册一个openai开发者帐号,然后可以生成key,获取key来调用open ai的接口,调用接口会消耗费用,帐号中有免费的5美金可以使用。

  • python开发环境

可以使用conda,也可以直接使用python 3,我使用的是python 3.8.9版本。

  • 安装openai和langchain

pip install openaipip install langchain

LLMs

LangChain中有LLMs和ChatModels两种语言模型:

  • LLMs:输入一个字符串,然后返回一个字符串。

  • ChatModels:输入一连串Message,比如说一连串对话,以此为上下评文,然后输入一条Message。

两者的区别是:LLMs偏向于问与答,ChatModel更偏向于对话的场景。

Message包含content和role两个部分,LangChain根据role在不同分为四种Message:

  • HumanMessage:代表人类/用户的message。

  • AIMessage:代表AI的message。

  • SystemMessage:代表系统的message。

  • FunctionMessage:代表函数调用的message。

下面我们看一个简单的例子怎么使用LLMs和ChatModels。

1. 输入一个字符串

from langchain.llms import OpenAIfrom langchain.chat_models import ChatOpenAI

text = "What would be a good company name for a company that makes colorful socks?"

llm = OpenAI()chat_model = ChatOpenAI()
llm.predict(text)
chat_model.predict(text)

2. 输入一个Message

from langchain.llms import OpenAIfrom langchain.chat_models import ChatOpenAI

text = "What would be a good company name for a company that makes colorful socks?"
messages = [HumanMessage(content=text)]

llm = OpenAI()
chat_model = ChatOpenAI()

llm.predict_messages(messages)
chat_model.predict_messages(messages)

Prompt Templates

一般来讲,我们不会将用户的输入或者问题直接传递给LLM应用,而是将它放到一个固定的上下文中,方便LLM应用理解提出的问题,从而给出更准确的回答,这段上下文就是我们所说在prompt templates。

例如:

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")

prompt templates的作用就是把product这个变量抽离出来,我们可以根据需要赋予它不同的值,这样就更加灵活。

prompt templates除了可以用于字符串,它还可以用于Message,例如:

from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate)

template = "You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

chat_prompt.format_messages(input_language="English", output_language="French", text="I love programming.")

上述chat_prompt相当于:

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

Output Parser

output parser的作用就是将LLMs的输出进行解析处理,最终返回给我们需要的格式,例如:

  • 将文本转换为json

  • 将Message转换为字符串

  • 将其它信息转换为字符串

下面这个例子就是将LLM返回的一个字符串转换为以逗号为分隔的列表。

from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""


    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

CommaSeparatedListOutputParser().parse("hi, bye")

第一个LangChain应用

介绍完LangChain应用所需要的最基础的组件后,我们可以开启Hello World之旅了,开始写第一个最简单的LangChain应用。

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""


    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
    llm=ChatOpenAI(),
    prompt=chat_prompt,
    output_parser=CommaSeparatedListOutputParser()
)
chain.run("fruits")

以上就是本篇的全部内容,我们下一篇再见。

 更多最新文章尽在公众号:大白爱爬山

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

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

相关文章

MongoDB快速上手

MongoDB快速上手 MongoDB用起来-快速上手&集群和安全系列 课程目标: 理解MongoDB的业务场景、熟悉MongoDB的简介、特点和体系结构、数据类型等能够在windows和linux下安装和启动MongoDB、图形化管理界面Compass的安装使用掌握MongoDB基本常用命令实现数据的C…

计算机毕业设计源码-基于java+springboot+vue开发的短视频播放系统-lw

参考源码 文章目录 前言一、项目运行环境配置二、主要技术javaMysql数据库JSP技术B/S结构 三、系统设计四、功能截图总结 前言 随着社会的不断发展与进步,21世纪的今天,人们对信息科学的认识已由低层次向高层次发展,从感性认识逐渐提高到理…

17.2 【Linux】通过 systemctl 管理服务

systemd这个启动服务的机制,是通过一支名为systemctl的指令来处理的。跟以前 systemV 需要 service / chkconfig / setup / init 等指令来协助不同, systemd 就是仅有systemctl 这个指令来处理而已。 17.2.1 通过 systemctl 管理单一服务 (s…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

神仙般的css动画参考网址,使用animate.css

Animate.css | A cross-browser library of CSS animations.Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints.https://animate.style/这里面有很…

大语言模型微调实践——LoRA 微调细节

1. 引言 近年来人工智能领域不断进步,大语言模型的崛起引领了自然语言处理的革命。这些参数量巨大的预训练模型,凭借其在大规模数据上学习到的丰富语言表示,为我们带来了前所未有的文本理解和生成能力。然而,要使这些通用模型在特…

全流程R语言Meta分析核心技术应用

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

写之前的项目关于使用git remote -v 找不到项目地址的解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、报错解析1. 报错内容2. 报错翻译3. 报错解析(1)使用git branch来查看git仓库有几个分支(2)使用git remote -v&am…

商城-学习整理-高级-性能压测缓存问题(十一)

目录 一、基本介绍1、性能指标2、JMeter1、JMeter 安装2、JMeter 压测示例1、添加线程组2、添加 HTTP 请求3、添加监听器4、启动压测&查看分析结果 3、JMeter Address Already in use 错误解决 二、性能监控1、jvm 内存模型2、堆3、jconsole 与 jvisualvm1、jvisualvm 能干…

暴力递归汉诺塔问题

暴力递归 将问题转化为规模缩小了的同类问题的子问题。有明确的不需要继续递归的条件(base case)有当得到了子问题的结果之后的决策过程不记录每一个子问题的解 暴力递归的要点大致可以分为以上四条,但是总结起来就是一句话:不断…

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了,没用。删了依赖重装也没用。后面在issue中找到答案了 解决…

SpringBoot + Vue 微人事(十二)

职位批量删除实现 编写后端接口 PositionController DeleteMapping("/")public RespBean deletePositionByIds(Integer[] ids){if(positionsService.deletePositionsByIds(ids)ids.length){return RespBean.ok("删除成功");}return RespBean.err("删…

案例-基于MVC和三层架构实现商品表的增删改查

文章目录 0. 项目介绍1. 环境准备2. 查看所有2.1 编写BrandMapper接口2.2 编写服务类,创建BrandService,用于调用该方法2.5 编写Servlet2.4 编写brand.jsp页面2.5 测试 3.添加3.1 编写BrandMapper接口 添加方法3.2 编写服务3.3 改写Brand.jsp页面&#x…

item_search_img-按图搜索淘宝商品(拍立淘)

一、接口参数说明: item_search_img-按图搜索淘宝商品(拍立淘),点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_img 名称类型必须描…

学Pyhton静不下来,看了一堆资料还是很迷茫是为什么

一、前言 最近发现,身边很多的小伙伴学Python都会遇到一个问题,就是资料也看了很多,也花了很多时间去学习但还是很迷茫,时间长了又发现之前学的知识点很多都忘了,都萌生出了想半路放弃的想法。 让我们看看蚂蚁金服的大…

Elasticsearch(十三)搜索---搜索匹配功能④--Constant Score查询、Function Score查询

一、前言 之前我们学习了布尔查询,知道了filter查询只在乎查询条件和文档的匹配程度,但不会根据匹配程度对文档进行打分,而对于must、should这两个布尔查询会对文档进行打分,那如果我想在查询的时候同时不去在乎文档的打分&#…

01_Redis单线程与多线程

01——Redis单线程与多线程 一、Redis是单线程还是多线程 在谈Redis的单线程或多线程时,需要根据版本来区分。 在redis 3.x之前,redis是单线程的从redis 4.x开始,redis引入多线程。处理客户端请求时,使用单线程;在异…

Android app 打包发布之build.gradle 配置

配置描述:在build.gradle(:app)文件中配置 包含以下几个部分: plugins:引入的工具android:主要配置都在这个里面dependencies:依赖android.applicationVariants.all:打包输出路径和名称 看android配置&a…

基于Spring Boot的餐厅订餐网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的餐厅订餐网站的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java springbo…

稳定扩散ControlNet v1.1 权威指南

ControlNet 是一种稳定扩散模型,可让你从参考图像中复制构图或人体姿势。 经验丰富的稳定扩散用户知道生成想要的确切成分有多难。图像有点随机。你所能做的就是玩数字游戏:生成大量图像并选择你喜欢的图片。 借助 ControlNet,稳定扩散用户…
最新文章