首页 > 其他分享 >教你迅速上手LangChain:十分钟入门到精通,一篇文章足矣!

教你迅速上手LangChain:十分钟入门到精通,一篇文章足矣!

时间:2024-08-26 14:25:57浏览次数:13  
标签:prompt template 模型 LangChain langchain LLM 上手 足矣

背景

快速入门的三部曲跟家里安装防盗门的步骤是类似的.
    1. 安装门
    1. 设密码
    1. 测试一下
对应到解决方案领域的快速入门的三部曲是什么?
    1. 安装 : Install
    1. 环境设置: Env
    1. 写DEMO: Demo
那对应到LangChain的快速入门上是什么呢?

前两个步骤没差异, 关键是写DEMO上.

了解本文详细内容前, 建议先看这篇通过类比, 十分钟快速掌握LangChain的架构[1], 了解了基本的架构内容后, 回头再写DEMO, 会快很多.

今日的DEMO也主要是从Model I/O的 提示模板 以及额外的LangChain表达式入手.

DEMO包含以下内容:

  • • 使用LangChain进行设置

  • • 使用LangChain最基本和最常用的组件: 提示模板、模型和输出解析器

  • • 使用LangChain表达式语言(LECL),这是LangChain构建的协议,有助于组件链接

Step1: 安装: Install

要安装LangChain,请运行:

Pip/Conda 二选一即可

  • • Pip 方式
 pip install langchain   

  • • Conda
 conda install langchain -c conda-forge   

官方详细安装指南[2]

Step2: 环境设置

使用LangChain通常需要与一个或多个模型提供者、数据存储、API等进行集成。本示例将使用OpenAI的模型API。

首先,我们需要安装他们的Python包:

pip install openai  

访问API需要一个API密钥,你可以通过创建一个帐户并前往这里[3]来获取。当我们获得了一个密钥之后,我们需要通过运行以下命令将其设置为环境变量:

export OPENAI\_API\_KEY="..."  

如果你不想设置环境变量,你可以在初始化OpenAI LLM类时直接通过openai_api_key命名参数传递密钥:

from langchain.llms import OpenAI    
    
llm = OpenAI(openai\_api\_key="...")  

构建应用程序

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

LangChain应用程序的核心构建模块是LLMChain。它结合了三个方面:

  • • LLM/ChatModel (大语言模型/聊天模型): 语言模型是核心推理引擎。要使用LangChain,您需要了解不同类型的语言模型以及如何使用它们。

  • • Prompt Templates: 提供语言模型的指令。这控制了语言模型的输出,因此了解如何构建提示和不同的提示策略至关重要。

  • • Output Parsers: 将LLM的原始响应转换为更易处理的格式,使得在下游使用输出变得容易。

在本入门中,我们将逐个介绍这三个组件,然后介绍将它们组合在一起的LLMChain。了解这些概念将使您能够很好地使用和定制LangChain应用程序。大多数LangChain应用程序允许您配置LLM和/或使用的提示,因此了解如何利用这一点将是一个很好的帮助。

LLM/ChatModel (大语言模型/聊天模型)

LangChain中有两种类型的语言模型,称为:

  • LLM: 这是一个以字符串作为输入并返回字符串的语言模型

  • ChatModels: 这是一个以消息列表作为输入并返回消息的语言模型

LLM的输入/输出简单易懂 - 都是字符串。但是ChatModels呢?这里的***输入是一个Message列表,输出是一个单独的Message***。

什么是Message? 基础的Message的接口的定义是BaseMessage. 他有两个必需的属性:

  • content: 消息的内容。

  • role: BaseMessage 的消息的角色。

LangChain提供了几个对象,用于方便地区分不同的角色:

  • HumanMessage: 来自人类/用户的BaseMessage

  • AIMessage: 来自AI/助手的BaseMessage

  • SystemMessage: 来自系统的BaseMessage

  • FunctionMessage/ToolMessage : 来自函数调用的BaseMessage

如果这些角色都不合适,还可以使用ChatMessage类手动指定角色。LangChain为两者提供了一个标准接口 .invoke(),所有LangChain表达式语言 (LCEL) 对象的通用同步调用方法:

  • LLM.invoke: 接受一个字符串,返回一个字符串

  • ChatModel.invoke: 接受一个BaseMessage 列表,返回一个BaseMessage

让我们看看如何使用这些不同类型的模型和不同类型的输入。首先,让我们导入LLM和ChatModel。

from langchain.llms import OpenAI  
from langchain.chat_models import ChatOpenAI  
from langchain.schema import HumanMessage  
  
llm = OpenAI()  
chat_model = ChatOpenAI()  
  
text = "What would be a good company name for a company that makes colorful socks?"  
messages = [HumanMessage(content=text)]  
  
llm.invoke(text)  
# >> Feetful of Fun  
  
chat_model.invoke(messages)  
# >> AIMessage(content="Socks O'Color")  


OpenAIChatOpenAI对象基本上只是配置对象。您可以使用诸如temperature等参数对其进行初始化,并将其传递给其他对象。

Prompt template(提示模板)

大多数LLM应用程序不会直接将用户输入传递到LLM中。通常,它们会将用户输入添加到一个更大的文本片段中,称为提示模板,该模板提供了有关特定任务的附加上下文。

在前面的示例中,我们传递给模型的文本包含了生成公司名称的指令。对于我们的应用程序,如果用户只需提供公司/产品的描述而无需担心给出模型指令,那将非常好。

PromptTemplates正是为此而设计的!它们将用户输入转化为完全格式化的提示的所有逻辑绑定在一起。这可以从非常简单的开始 - 例如,产生上述字符串的提示只需是

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

What is a good name for a company that makes colorful socks?  

然而,使用这些而不是原始字符串格式化的优势有几个。您可以“部分”出变量 - 例如,您可以一次只格式化某些变量。您可以将它们组合在一起,轻松地将不同的模板组合成一个单独的提示。有关这些功能的说明,请参阅提示部分[4]以获取更多详细信息。

PromptTemplates还可以用于生成消息列表。在这种情况下,提示不仅包含有关内容的信息,还包含每个消息(其角色、其在列表中的位置等) 在这里,最常见的是ChatPromptTemplate是ChatMessageTemplate的列表。每个ChatMessageTemplate包含了格式化该ChatMessage的指令 - 其角色,以及其内容。让我们在下面看一下这个:

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

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

除了ChatMessageTemplate之外,ChatPromptTemplates还可以包括其他内容 - 有关更多详细信息,请参阅提示部分[5]。

Output parser(输出解析器)

OutputParsers将LLM的原始输出转换为可以在下游使用的格式。输出解析器有几种主要类型,包括:

  • • 将LLM的文本转换为结构化信息(例如JSON)

  • • 将ChatMessage转换为字符串

  • • 将除消息之外的其他信息(如OpenAI函数调用)转换为字符串。

有关此方面的详细信息,请参阅输出解析器部分[6]

在本入门指南中,我们将编写自己的输出解析器 - 将逗号分隔的列表转换为列表。

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")    
# >> ['hi', 'bye']  

用LECL进行链式调用(Composing with LCEL)

现在,我们可以将所有这些组合成一个链组件(LangChain的命名中, Chain的由来)。这个链组件将接收输入变量,将其传递给提示模板以创建提示,将提示传递给LLM,然后通过一个(可选的)输出解析器将输出传递出去。这是一种方便地将模块化逻辑捆绑在一起的方式。让我们看看它的作用!

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("colors")    
# >> ['red', 'blue', 'green', 'yellow', 'orange']  

参考资料

LangChain 中文文档 v0.0.291[7]
LangChain Introduction[8]

零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型实际应用案例分享

①智能客服:某科技公司员工在学习了大模型课程后,成功开发了一套基于自然语言处理的大模型智能客服系统。该系统不仅提高了客户服务效率,还显著降低了人工成本。
②医疗影像分析:一位医学研究人员通过学习大模型课程,掌握了深度学习技术在医疗影像分析中的应用。他开发的算法能够准确识别肿瘤等病变,为医生提供了有力的诊断辅助。
③金融风险管理:一位金融分析师利用大模型课程中学到的知识,开发了一套信用评分模型。该模型帮助银行更准确地评估贷款申请者的信用风险,降低了不良贷款率。
④智能推荐系统:一位电商平台的工程师在学习大模型课程后,优化了平台的商品推荐算法。新算法提高了用户满意度和购买转化率,为公司带来了显著的增长。

这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

标签:prompt,template,模型,LangChain,langchain,LLM,上手,足矣
From: https://blog.csdn.net/2401_85375186/article/details/141424068

相关文章

  • LangChain入门手册——附赠PDF版
    《LangChain入门指南》LangChain作为大模型集成框架鼎鼎大名,这本《LangChain入门指南》是一本很及时的书,值得推荐~01为什么需要LangChain首先想象一个开发者在构建一个LLM应用时的常见场景。当你开始构建一个新项目时,你可能会遇到许多API接口、数据格式和工具。对于一......
  • 【Pycharm2024.1.2安装使用教程】24年教程,小白轻松上手!(附安装包永久机火码+工具)
      今天给大家免费分享一个Pycharm2024.1.2版的安装使用教程,全文通过文字+图片的方式讲解,手把手教你如何安装使用Pycharm,只需要几分钟即可搞定!看之前先看这,所有机火码的机火是谐音(你们知道的谐音!)一、下载安装pycharm(支持mac、window、linux)1、建议直接在官网下载......
  • 10大秘籍!FL Studio24.1.1.4239中文版功能介绍,轻松上手音乐制作!
    FLStudio24.1.1.4239中文版是一款备受赞誉的数字音频工作站,它以其强大的功能和用户友好的界面赢得了音乐制作者的喜爱。在这篇文章中,我将向您介绍这款软件的主要特点和优势,以及如何利用它来创作出令人惊叹的音乐作品。FLStudio21汉化版下载网盘链接:https://pan.quark.cn/......
  • 【python】Python中小巧的异步web框架Sanic快速上手实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • Ant-Design-Vue快速上手指南+排坑
    AntDesignVue是一个基于AntDesign设计理念的Vue.jsUI组件库。它提供了一组高质量的可重用组件,能够帮助你快速构建美观且功能强大的用户界面。以下是AntDesignVue的快速上手指南、安装步骤、使用示例,以及在使用过程中可能遇到的一些常见问题及解决方案。1.环境准......
  • 【快速上手C语言】第十七章:安全编程与最佳实践 - C语言中的风险防范与防御性编程
            在嵌入式系统和底层开发中,安全性是至关重要的。C语言由于其灵活性和高效性,广泛应用于系统级编程。然而,C语言也容易导致各种安全问题,如缓冲区溢出、整数溢出等。这些问题如果不加以重视,可能会带来严重的安全隐患。本文将探讨C语言中的常见安全问题,介绍安全编码......
  • 告别项目管理混乱,‌这10款软件帮你快速上手
    国内外主流的10款项目管理软件对比:PingCode、Worktile、Asana、Trello、Basecamp、Jira、Monday.com、tower、Coding、飞书。在探索项目管理软件时,你是否曾因为市场上众多选择而感到困惑?选择合适的工具对于提高团队效率、确保项目按时完成至关重要,但在各种功能、支持和价格选......
  • 轻松上手:Docker部署Elasticsearch,高效构建搜索引擎环境
    我在前一段时间写了一个ES简介,博主建议大家先看完简介再来安装ES,那篇博文是:深入理解Elasticsearch:让搜索性能飞起来!-CSDN博客服务器开放9200和9300端口号:1.打开目录:cd/usr/local/docker/2.创建es目录:mkdires3.打开es目录:cdes/4.下载镜像:我在这里声明一下......
  • 手把手教你用 LangChain 实现大模型 Agent
    关于智能体(Agents)通常,大型语言模型(LLM)通常通过RAG(Retrieval-AugmentedGeneration)架构来增强其存储器能力。然而,LLM智能体(LLMAgents)不仅能增强存储器,还将推理、工具、答案和操作都集成到了其系统中。LLMS是一种人工智能技术,可以生成类似人类语言的文本,而LLM智能体则是一......
  • Summarization with Langchain
    教程链接—https://youtu.be/w6wOhSThnoo摘要是自然语言处理(NLP)的一个关键方面,它能够将大量文本浓缩成简洁的摘要。LangChain,作为NLP领域中的一个强大工具,提供了三种不同的摘要技术:stuff、map_reduce和refine。每种方法都有其独特的优点和局限性,使它们适用于不同的情况。本文深......