【AIGC】LangChain入门指南—第二章 LangChain入门指南

【AIGC】LangChain入门指南—第二章 LangChain入门指南

    正在检查是否收录...

第二章 LangChain入门指南

文章目录

第二章 LangChain入门指南 前言 一、主要内容 1、初识LangChain 1.1 为什么需要LangChain 1.2 LLM应用开发的最后1公里 1.3 LangChain的2个关键词 1.4 LangChain的3个场景 1.5 LangChain的6个模块 2、LangChain的开发流程 2.1 开发秘钥指南 2.2 编写一个取名程序 2.3 创建你的第一个聊天机器人 3、 LangChain表达式 二、总结

前言

前面一章我们了解了LangChain和一些大语言模型的基础知识。接下来我们继续跟随《LangChain入门指南》深入的了解LangChain的体系架构以及具体的应用场景,并且尝试使用LangChain构建第一个基于大语言模型的应用。

文章的结尾提供了一个基于LangChain开发的AIGC知识库平台,可以免费使用,有任何疑问欢迎提出。

一、主要内容

1、初识LangChain

1.1 为什么需要LangChain

我们在开发一款LLM的应用时,需要集成各种各样的大语言模型和一些基础的模块,在集成时需要对每个模型和模块进行了解,工作量很大。而LangChain就是一个集成框架,处理的就是一系列组件和工具的集成。并且它在开发者社区有着有高的关注度。

1.2 LLM应用开发的最后1公里

LangChain为LLM应用的开发者提供了很大的便利,包括模型的接口,常用的组件和大量常用的提示词。为那些准备进入LLM应用开发领域的人铺平了最后一公里的道路。

1.3 LangChain的2个关键词

LangChain有两个关键词,同时也是LangChain的核心,分别是”组件“和”链“。组件可以理解为一整条完整的流水线上的工作站,每个组件有各自的功能各司其职,而链就可以理解为把所有使用到的工作站串联起来的链条。

1) 组件。
我们在开发一个大语言模型应用时有很多的工作流程,每一项工作都有一个单元来负责完成,例如:数据加载、与大语言模型沟通、构建提示词等等工作都需要实例化LangChain提供的一些类来完成,这些类就称为组件。

2) 链。
当我们使用LangChain实例化了很多的组件之后,发现单个组件并不能完成一整个复杂的任务,需要有多个组件结合。这时链就是来充当将所有需要的组件根据顺序串联起来的角色,使得整个程序像流水线一样按照预设路径顺序执行。

1.4 LangChain的3个场景

LangChain有三个比较典型的应用场景。

1) 问答系统。LangChain可以轻松的与外部数据源进行交互,迅速提取关键信息,然后生成准确的回答。

2) 数据处理与管理。LangChin可以将每一个数据处理的流程都标准化,包括加载、分割、存储、检索。

3) 自动问答机器人。开发者可以使用LangChain构建实时响应用户查询的客服机器人。

1.5 LangChain的6个模块

LangChain是由6个模块组成。

1) 模型I/O。模块主要用于与大语言模型进行交互,并且其中已经包装好了很多与市面上大多数模型交互的类。

2) 数据增强。模块主要是对外部数据处理的一整套流程。

3) 链。模块主要用于将所有的组件组合起来形成一条完整的业务线。

4) 记忆。模块一用于存储对话期间的对话内容,使得大语言模型具有记忆能力。

5) Agent。模块是为AGI的基础,他使用LLM来完成思考然后根据思考的结果执行操作。

6) 回调处理器。模块是LangChain提供的一个回调系统,允许开发者在LLM应用的各个阶段进行干预。

2、LangChain的开发流程

2.1 开发秘钥指南

我们在开发大语言模型应用程序时,需要调用大语言模型的接口,而接口往往需要一个秘钥要验证我们的身份。当我们从平台拿到秘钥之后,常用的有三种方法使用秘钥。

1、直接把秘钥硬编码到代码中。
2、把秘钥放入环境变量中,使用时获取。
3、通过第三方模块在使用秘钥时由用户输入秘钥。

2.2 编写一个取名程序

我们尝试调用大语言模型完成第一个应用的开发,功能就是帮助公司起一个名字。

由于书上的LangChain版本和当前LangChain的版本存在差异,所以在模块应用和方法调用上有一些细微的区别,我们按照当前最新的版本来完成程序的编写,模型包装类与书上相同使用openai。使用openai需要配置自己的API秘钥openai_api_key和openai的地址openai_api_base。

引入LangChain模块和openai模块。

pip3 install langchain,openai,langchain-openai

编写取名程序

from langchain_openai import ChatOpenAI llm = ChatOpenAI(openai_api_base=config.openai_api_base, openai_api_key=config.openai_api_key, model_name=config.model_name) print(llm.invoke("我有一个人工智能的公司,帮我起一个好听又好记的名字")) 

2.3 创建你的第一个聊天机器人

在完成第一个demo的发开之后,我们将完成一个完整的程序:聊天机器人。深入体验LangChain的6大核心模块。

环境配置和秘钥设置

from langchain_openai import ChatOpenAI from langchain_core.messages import ( AIMessage, HumanMessage, SystemMessage ) llm = ChatOpenAI(openai_api_base=config.openai_api_base, openai_api_key=config.openai_api_key, model_name=config.model_name) print(llm.invoke([HumanMessage(content="请帮我将中文翻译成英语。 我爱你")])) 

提示词模版

from langchain_core.prompts.chat import ( ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate ) template = "你是一个厉害的助手,你能把{input_language}翻译成{output_language}。" sys_prompt = SystemMessagePromptTemplate.from_template(template) human_prompt = HumanMessagePromptTemplate.from_template("{text}") chat_prompt = ChatPromptTemplate.from_messages([ sys_prompt, human_prompt ]) chat_prompt = chat_prompt.format_messages( input_language="中文", output_language="英语", text="我爱你" ) print(chat_prompt) 

创建第一个链

from langchain.chains import LLMChain from langchain_openai import ChatOpenAI from langchain_core.prompts import ( ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate ) template = "你是一个厉害的助手,你能把{input_language}翻译成{output_language}。" sys_prompt = SystemMessagePromptTemplate.from_template(template) human_prompt = HumanMessagePromptTemplate.from_template("{text}") chat_prompt = ChatPromptTemplate.from_messages([ sys_prompt, human_prompt ]) llm = ChatOpenAI(openai_api_base=config.openai_api_base, openai_api_key=config.openai_api_key, model_name=config.model_name) chain = LLMChain(llm=llm, prompt=chat_prompt) print(chain.invoke({"input_language": "中文", "output_language": "英语", "text": "我爱你"})) 

Agent
Agent需要搜索互联网数据,要安装Serpapi来进行谷歌搜索。
pip3 install google-search-results

import os from langchain.agents import load_tools, AgentType, initialize_agent from langchain_openai import ChatOpenAI, OpenAI os.environ['SERPAPI_API_KEY'] = '你的KEY' chat = ChatOpenAI(openai_api_base=config.openai_api_base, openai_api_key=config.openai_api_key, model_name=config.model_name) llm = OpenAI(openai_api_base=config.openai_api_base, openai_api_key=config.openai_api_key, model_name=config.model_name) tools = load_tools(["serpapi", "llm-math"], llm=llm) agent_executor = initialize_agent(tools, chat, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent_executor.invoke({"input": "今天昆明会下大雨吗"}) 

记忆组件

from langchain.chains.constitutional_ai.base import ConstitutionalChain, ConstitutionalPrinciple from langchain.chains.llm import LLMChain from langchain_core.prompts import ( ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate, MessagesPlaceholder ) from langchain.memory import ConversationBufferMemory from langchain_openai import ChatOpenAI prompt = ChatPromptTemplate.from_messages([ SystemMessagePromptTemplate.from_template("你是一个强大的人工智能助手。"), MessagesPlaceholder(variable_name="history"), HumanMessagePromptTemplate.from_template("{input}") ]) chat = ChatOpenAI(model_name=config.model_name, openai_api_key=config.openai_api_key, openai_api_base=config.openai_api_base) memory = ConversationBufferMemory(return_messages=True) qa_chain = LLMChain(prompt=prompt, llm=chat) chain = ConstitutionalChain.from_llm( llm=chat, chain=qa_chain, memory=memory, constitutional_principles=[ ConstitutionalPrinciple( critique_request="Tell if this answer is good.", revision_request="Give a better answer.", ) ] ) print(chain.invoke({"input": "你好,我是DoubleZ"})) 

3、 LangChain表达式

LangChain表达式是组合各个组件的一种简洁的表达方式,它使得开发者可以像说话一样的编写代码,完成应用程序的开发。

提示词模版+模型包装器

from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_template("给我讲一个关于{topic}的笑话") chat = ChatOpenAI(model_name=config.model_name, openai_api_key=config.openai_api_key, openai_api_base=config.openai_api_base) chain = prompt | chat print(chain.invoke({"topic": "狗"})) 

提示词模版+模型包装器+输出解释器

from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain.schema.output_parser import StrOutputParser prompt = ChatPromptTemplate.from_template("给我讲一个关于{topic}的笑话") chat = ChatOpenAI(model_name=config.model_name, openai_api_key=config.openai_api_key, openai_api_base=config.openai_api_base) chain = prompt | chat | StrOutputParser() print(chain.invoke({"topic": "熊"})) 

多功能组合链

from operator import itemgetter from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser chat = ChatOpenAI(model_name=config.model_name, openai_api_key=config.openai_api_key, openai_api_base=config.openai_api_base) prompt1 = ChatPromptTemplate.from_template("{person}来自哪个城市") prompt2 = ChatPromptTemplate.from_template("{city}这个城市属于哪个国家?用{language}回复我") chain1 = prompt1 | chat | StrOutputParser() chain2 = ( {"city": chain1, "language": itemgetter("language")} | prompt2 | chat | StrOutputParser() ) print(chain2.invoke({"person": "奥巴马", "language": "英语"})) 

二、总结

这一章主要介绍了LangChain的基础知识,两个关键词、六个主要的模块以及三个比较典型的应用场景。

从整体来看,链和组件是LangChain中最为关键的两个概念,一切皆是组件,所有组件都有链来串联执行。

从模块的角度来看,整个LangChain框架分为六大组件,核心为模型I/O组件,所有的任务都必须交由模型I/O组件来决策驱动,可以理解为模型I/O是大脑,其他的组件为四肢或其他器官,用于执行大脑的决策。

最后介绍了一下基于LangChain开发的流程,如何完成一个基础的基于大语言模型的应用程序和如何使用LangChain表达式来完成程序的便捷开发。

基于LangChin开发的AIGC知识库:免费使用

openailangchainpromptchatapillmptt语言模型大语言模型tpustemparseprompts开发者提示词机器人关键词erp应用程序数据处理
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-17728.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

Stable Diffusion本地化部署详细攻略

上一篇

AI写作新利器:Jasper AI揭秘与未来展望

下一篇
  • 复制图片
按住ctrl可打开默认菜单