第六届字节跳动青训营第一课 | LangChain扫盲

201 阅读6分钟

前言

真正有潜力且具有创新性的应用,不仅仅在于能通过API调用语言模型,更重要的是能够具备以下两个特性:

  • 数据感知: 能够将语言模型与其他数据源连接起来,从而实现对更丰富、更多样化数据的理解和利用。
  • 具有代理性: 能够让语言模型与其环境进行交互,使得模型能够对其环境有更深入的理解,并能够进行有效的响应。

什么是LangChain

LangChain 是个以大模型为引擎的全新应用开发框架,他是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,可以让开发者使用语言模型来实现各种复杂的任务。

作为一种专为开发基于语言模型的应用而设计的框架,通过LangChain,我们不仅可以通过API调用如 ChatGPT、GPT-4、Llama 2 等大型语言模型,还可以实现更高级的功能。

LangChain中的具体组件包括:

  • 模型(Models),包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts),使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes),构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory),通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。
  • 链(Chains),是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
  • 代理(Agents),是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主Agent成为可能!你的 App 将产生自驱力!

示例一,为情人节推销生成简短的宣传语

第一步,安装三个包,通过 pip install langchain 来安装LangChain,通过 pip install openai 来安装OpenAI,还需要通过 pip install langchain-openai 以便在 LangChain 中使用 OpenAI 模型。

第二步,你还需要在OpenAI网站注册属于自己的OpenAI Key。

第三步,导入了OpenAI的API Key,然后从LangChain中导入OpenAI的Text模型接口,并初始化这个大语言模型,把我们的需求作为提示信息,传递给大语言模型。 可以看到LangChain是一个开发架构,用于调用其他大模型。其中初始化大约需要1秒,输出大约需要4秒,每次输出的15条标语不重复,将问题修改成白玫瑰依然可以正常输出

示例二,为一张海报图片配文

解题思路,引入图像字幕生成模型并初始化,使用OpenAI大模型,启动LangChain,分别设置代理,图像字幕生成工具,大模型,并输入图片和需求。

(shims) ➜  LangChain-shizhanke COMMAND="cd /cloudide/workspace/LangChain-shizhanke/00_开篇词_奇点时刻 && export PYTHONPATH="/cloudide/workspace/.cloudide/extensions/ms-python.debugpy-2024.0.0-linux-x64/
bundled/libs:$PYTHONPATH"; python3 /cloudide/workspace/LangChain-shizhanke/00_开篇词_奇点时刻/02_PictureDescription.py" marscode-dev
正在初始化图像字幕生成模型...
preprocessor_config.json: 100%|█████████████████████████████████████| 445/445 [00:00<00:00, 4.38MB/s]
tokenizer_config.json: 527B [00:00, 3.85MB/s]                                                        
vocab.txt: 232kB [00:00, 1.15MB/s]
tokenizer.json: 711kB [00:00, 1.29MB/s]
special_tokens_map.json: 100%|██████████████████████████████████████| 125/125 [00:00<00:00, 1.55MB/s]
/home/cloudide/.local/lib/python3.12/site-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884
  warnings.warn(
config.json: 4.60kB [00:00, 31.0MB/s]                                                                
model.safetensors: 100%|████████████████████████████████████████| 1.88G/1.88G [00:19<00:00, 96.7MB/s]
初始化图像字幕生成模型成功
初始化大语言模型成功
/cloudide/workspace/LangChain-shizhanke/00_开篇词_奇点时刻/02_PictureDescription.py:62: LangChainDeprecationWarning: The function `initialize_agent` was deprecated in LangChain 0.1.0 and will be removed in 1.0. Use Use new agent constructor methods like create_react_agent, create_json_agent, create_structured_chat_agent, etc. instead.
  agent = initialize_agent(
​
> Entering new AgentExecutor chain...
我需要先了解这张图片的内容,然后才能创作合适的中文推广文案。我可以使用图像描述生成器来获取图片的描述。
Action: Image captioner
Action Input: https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/eec79e20058499.563190744f903.jpg
Observation: there is a picture of a picture of flowers with the word love
Thought:这张图片是一束鲜花,上面写着“爱”字。我可以创作一个与爱情相关的中文推广文案。
Final Answer: 爱,是生命中最美丽的风景。让这束鲜花为你传递爱的信息,让你的生活充满爱和温暖。
​
> Finished chain.
(shims) ➜  LangChain-shizhanke 

LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得极其简便。不论你在何时何地,都能利用它流畅地调用语言模型,并基于语言模型的“预测”或者说“推理”能力开发新的应用。

LangChain 的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。

对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

LangChain支持Python和JavaScript两个开发版本。

用下面两种方法,我们就可以在安装 LangChain 的方法时,引入大多数的依赖项。

安装LangChain时包括常用的开源LLM(大语言模型) 库:

pip install langchain[llms]

安装完成之后,还需要更新到 LangChain 的最新版本,这样才能使用较新的工具。

pip install --upgrade langchain

如果你想从源代码安装,可以克隆存储库并运行:

pip install -e

LangChain 的 GitHub 社区非常活跃,你可以在这里找到大量的教程和最佳实践,也可以和其他开发者分享自己的经验和观点。

LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。

因此,要了解LangChain的底层逻辑,需要了解大模型的API的基本设计思路。

而目前接口最完备的、同时也是最强大的大语言模型,当然是OpenAI提供的GPT家族模型。

Chat Model和Text Model这两类Model,是大语言模型的代表。当然,OpenAI还提供Image、Audio和其它类型的模型,目前它们不是LangChain所支持的重点,模型数量也比较少。

  • Chat Model,聊天模型,用于产生人类和AI之间的对话,代表模型当然是gpt-3.5-turbo(也就是ChatGPT)和GPT-4。
  • Text Model,文本模型,在ChatGPT出来之前,大家都使用这种模型的API来调用GPT-3,文本模型的代表作是text-davinci-003(基于GPT3)。