大语言模型应用开发框架LangChain
一、LangChain项目介绍
1、简介
对大语言模型的调用实际上是一次或多次上下文无关的独立事件,如果想要实现聊天、问答、API调用甚至一些更复杂的业务场景,直接去调用 API是无法实现的。需要在这个过程里面整合不同类型的业务代码逻辑。
LangChain 就是对这些通用逻辑做了封装,让使用者可以不用关注在与大模型之间的交互细节能够更专注在业务本身上,通过组合模块和能力抽象来扩展LLM 的能力,通过chain、agent、model等多种封装工具,提供了扩展 LLM 使用场景、便捷 LLM 调用方式的一系列功能。。
正如这张图所展示的,LangChain 主要具备的核心模块有:
模块 | 能力介绍 |
---|---|
Prompts | 模板化、动态选择和管理模型输入 |
Models | 通过通用接口调用语言模型 |
Parser | 标准化输出模型返回信息 |
Memory | 上下文信息存储功能 |
Chains | 将零散的功能逻辑串联成完整的业务流程 |
Agents | 工具类的合集,解决大模型处理不了的问题 |
通过这些能力,LangChain 能够解决的应用场景有:
- 问答机器人
- 摘要汇总
- 聊天机器人
- 数据查询
- 与接口交互
- 理解代码
其主要支持语言为:
- python
- js/ts
2、LangChain的价值
看到这里,可能很多人心存疑问,为什么开发者要用LangChain 而不是直接使用 OpenAl 所提供的方法呢?原因是目前的 GPT模型存在以下的缺点,在产品中集成与使用依然需要大量的成本
- Max Token 限制
- 私有化模型
- 没法查询数据库
- 数据截止 2021 年 Q3
- 不能调用第三方 API
- 无法联网
- 无法对接外部工具
- 游捏隐私
- 输出结果不稳定
所以就需要一个框架,作为大语言模型和应用产品之间的一个桥梁和媒介。LangChain 则很好的解决了以上的问题。
3、实战演练
环境准备
- 1.稳定的科学上网环境。
- 2.Python 环境。
- 3.API Token。
环境安装
- 注意: langchain的组件模块非常多,但是无需都安装,等讲到对应实战内容,则会另外给大家强调。
通过 pip 安装langchain:
pip install langchain
二、LangChain提示词+大语言模型应用
1、简介
在前文中提到,提示词是一种经常需要使用的元素,其中大部分内容通常是固定的,不需要变动。因此,为了提高效率和便捷性,通常会将这些提示词提炼成模板,以便用户反复使用。
1.1、提示词模板化的优点
模板化的提示词可以帮助用户更高效地进行对话或生成文本,节省时间和精力。通过使用模板用户可以快速构建对话或生成文本,而无需每次都重新编写或设计提示词,从而提高了工作效率。
此外,将提示词制作成模板还有助于保持内容的一致性和规范性。通过使用统一的模板,可以确保生成的对话或文本风格统一,增强了用户体验和信息传达的效果。
1.2、提示词模板+LLM 的应用
基于模板化的好处,LangChain 提供了预制的模板类,用户可以借助这些模板类来设计提示词生成自己所需的提示词模板。
这样,用户不需要从零开始设计和编写提示词,而是可以直接使用LangChain 提供的模板类,简化操作流程。
LangChain 提供提示词加 LLM 的应用形式,最常见的组合形式如下所示:
PromptTemplate /ChatPromptTemplate ->LLM /ChatModel / OutputParser
1.3、Prompt
Prompt是一个基础的提示模板,它接受包含模板变量的字典,并生成一个PromptValue,PromptValue 是一个完整提示的封装器,可以传递给大型语言模型(LLM)或聊天模型。
Prompt 可以与任何类型的语言模型一起使用,因为它定义了生成基础消息和字符串的逻辑,
LangChain 提供了三种组合形式,分别为:
- PromptTemplateTemplate+LLM:提示模板和 LLM 组合
- PromptTemplateTemplate+LLM+OutputParser:提示模板、LLM 和输出解析组合。
- Simplifying input:简化输入信息。
2、应用实战
最简单的组合是将“提示”与“模型”组合起来创建一个链,接受用户输入,将其添加到提示,并传递给模型,然后返回原始的模型输出。
环境准备
需要提前安装 langchain
和langchain-openai
安装命令:pip install --upgrade --quiet langchain langchain-openai
2.1、PromptTemplate + LLM
import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# token
# os.environ["OPENAI_API_KEY"] = "xxx"
# os.environ["OPENAI_API_KEY"] = "https://apitoken.ceba.ceshiren.com/openai/v1/"
"""
PromptTemplate + LLM
"""
# 1、提示词模板 ->PromptValue
prompt = ChatPromptTemplate.from_template("出给一个关于{goods}的广告宜传语")
# 2、ChatGPT模型调用对象
model = ChatOpenAI()
# 将两个对象使用顺序组合创建一个调用链,实现提示词组装,模型调用的功能
chain = prompt | model
# 输入提示词模版中的变量部分,调用链会自动完成后续的调用和解析
res = chain.invoke({"goods": "冰淇淋"})
print(res)
2.2、PromptTemplate + LLM + OutputParser
# 1、提示词模板 ->PromptValue
prompt = ChatPromptTemplate.from_template("出给一个关于{goods}的广告宜传语")
# 2、ChatGPT模型调用对象
model = ChatOpenAI()
# 创建调用链 包含输出解析器
chain = prompt | model | StrOutputParser()
# 输入提示词模版中的变量部分,调用链会自动完成后续的调用和解析
res = chain.invoke({"goods": "冰淇淋"})
print(res)