langchain
概述
langchain是LLM与AI应用的粘合剂,是一个开源框架,旨在简化使用大型语言模型构建端到端应用程序过程,它也是ReAct(reason act)论文的落地实现。
上图中,左边是各种各样的大模型,右边是各种实际的应用,而langchain是它们之间连接的桥梁。
上图是langchain的工作方式
- 是解决大模型各种问题的提示词工程方案之一。
- 提供了与LLMs交互的各种组件,极大提升开发效率。
- 可以以文件方式加载提示词、链等,方便共享提示词和做提示词版本管理。
- 提供了丰富的链式工具箱。
- LLMs & Prompt,提供了目前市面上几乎所有的LLM的通用接口,同时还提供了提示词管理和优化能力,同时也提供了非常多的相关适用工具,以方便开发人员利用langchain与LLMs进行交互。
- chains,langchain把提示词、大语言模型、结果解析封装成chain,并提供标准的接口,以便允许不同的chain形成交互序列,为AI原生应用提供端到端的chain。
- Retrieval Augemented Generation,索引增强式是一种解决预训练语料数据无法及时更新带来的回答内容陈旧的方式。langchain提供了支持、检索增强式的chain,在使用时,这些chain会首先与外部数据源进行交互以获得对应数据,然后再利用获得的数据与LLMs进行交互。典型的应用场景如:基于特定数据源的问答机器人。
- Agent,对于一个任务,代理主要涉及让LLMs来对任务进行拆分、执行该行动,并观察执行结果,代理会重复执行这个过程,直到任务完成为止。langchain为代理提供了标准接口,可供选择的代理,以及一些端到端的代理的示例。
- Memory,指的是chain或agent调用之间的状态持久化。langchain为内存提供了标准接口,并提供了一系列的内存实现。
- Evaluation,langchain还提供了非常多的评估能力以允许我们可以更方便的对LLMs进行评估。
环境搭建
推荐 Python 3.10,具体参考乌班图安装 Pytorch、Tensorflow Cuda 环境 中的安装 Anaconda
代码语言:javascript复制conda create -n py10 python=3.10.12
conda activate py10
pip install langchain
pip install langchain_community
HelloWorld
这里我们使用智普的 GLM 大模型
代码语言:javascript复制pip install zhipuai
代码语言:javascript复制from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
import os
if __name__ == '__main__':
os.environ['ZHIPUAI_API_KEY'] = '******'
chat = ChatZhipuAI(model='glm-4', temperature=0.5)
messages = [AIMessage(content='Hi.'), SystemMessage(content='你的角色是一个诗人.'),
HumanMessage(content='用七言绝句的形式写一首关于AI的诗')]
response = chat.invoke(messages)
print(response.content)
这里的 ZHIPUAI_API_KEY 需要你自己去智普网站 https://open.bigmodel.cn 去注册就有,运行结果
代码语言:javascript复制智能助手显神通,
问答之间意无穷。
虽非血肉凡胎具,
情谊交流胜友朋。
国产 LLM
智普 GLM
- 流式输出
pip install httpx_sse
代码语言:javascript复制from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_core.callbacks.manager import CallbackManager
from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
import os
if __name__ == '__main__':
os.environ['ZHIPUAI_API_KEY'] = '******'
streaming_chat = ChatZhipuAI(model='glm-4', temperature=0.5, streaming=True,
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))
messages = [AIMessage(content='Hi.'), SystemMessage(content='你的角色是一个诗人.'),
HumanMessage(content='用七言绝句的形式写一首关于AI的诗')]
streaming_chat(messages)
运行结果
代码语言:javascript复制智能助手显神通,
问答之间意无穷。
虽无情感亦相随,
陪伴人间寂寞中。
这里跟之前不同的地方是之前是一次性输出结果,而这里是一个字一个字蹦出来的。