什么是langchain

   随着aigc的火热,各大厂商开始提供他们自己的api服务,诸如openai、google、等,还有的直接开源出自己的模型,放到Huggingface提供使用,而LangChain就是一个基于语言模型开发应用程序的框架,它可以很方便的去调用不同公司的api,以及huggingface的资源,为人们提供统一的开发标准,降低开发难度。

langchain的宗旨和特色

   在以上的描述中,不管langchain调用了什么api,它也只能发挥api本身的功能,那langchain的最大特色是什么是?官方表示langchain的最大特色有两点:数据感知(Be data-aware)主动性(Be agentic)

数据感知(Be data-aware)

  将语言模型与其他数据源连接起来,使其能够利用外部数据来增强其知识和理解能力。语言模型可以通过访问和分析结构化数据、非结构化数据、实时数据流等来获取更多信息,以便更好地回答问题、提供准确的信息和指导。

主动性(Be agentic)

  赋予语言模型主动与其环境交互的能力。传统的语言模型通常是被动的,只在接收到输入时生成输出。但是,赋予语言模型主动性意味着它可以主动提出问题、请求进一步的信息或反馈,与用户或环境进行双向的对话和交互。这使得语言模型更加灵活和适应性强,能够更好地满足用户的需求。

lagnchain的组成特征

  以上的描述可以知道,langchain开发了一套统一的开发标注,它提供了三个大的基本功能:

  1. 第三方平台的语言模型的调用功能;
  2. 和其他数据源的交互功能;
  3. 主动发问的功能;

  为了提供以上的功能,langchain以组件化的形式来提供最基础的能力,然后通过链的方式来完成具体的业务实现。

组件

  LangChain提供了模块化抽象,用于处理与语言模型相关的组件。LangChain还提供了这些抽象的多种实现。这些组件其实和scikit-learn是很像的,每一个小组件就是一个独立的功能。我们先大致看一下langchain都有哪一些组件:
在这里插入图片描述

  • Schema :数据结构相关功能
  • Models :模型相关功能
  • Prompts :模型输入的数据结构功能
  • Indexes :与其他数据交互的功能
  • Memory :通过上下文保持,提供模型记忆功能
  • Chains :将多个组件组合起来,自动化实现某一个业务功能
  • Agents :langchain提供的主动性功能

黑色加粗的就是langchain的特色所在。

链(chains)

  链可以被视为以特定方式组装这些组件,类似于scikit-learn的pipline,他就是依据你具体想要解决的问题,将你想要的组件组装到一起。然后自动化的执行。这个功能是有chains来提供。

案例

下面我们就一步一步的来晚上一个机器人对话系统

# -*- coding: utf-8 -*-

"""
auther : leon
time   : 2023-06-26

"""
from langchain.llms import OpenAI

llm = OpenAI(openai_api_key="sk-9Sjd71sMuHHvKhqUSZmue6vJD",temperature=0.9)
end_pred = llm.predict("What would be a good company name for a company that makes colorful socks?")
print(end_pred)

上面的代码中

  1. 导入OpenAI的库,因为我们要调用chatgpt 的api
  2. 创建语言模型OpenAI的模型,这里最主要是就是指定openai_api_key的参数,这个key是你注册了openai之后,然后在https://platform.openai.com/account/api-keys去生成的一个key。
  3. 调用模型的predict方法

注:我的key已经被我删掉部分信息,你需要用你的key,同时要科学上网。

添加for循环

# -*- coding: utf-8 -*-

"""
auther : leon
time   : 2023-06-26

"""
from langchain.llms import OpenAI

llm = OpenAI(openai_api_key="sk-9Sjd71sMu7A8OSAHHqZmue6vJD", temperature=0.9)

while True:
    user_input = input("Enter your input (or 'q' to quit): ")
    if user_input.lower() == "q":
        break

    end_pred = llm.predict(user_input)
    print(end_pred)

这就是一个最初版的对话机器人,在这机器人中我们并没有用到prompt模块,也没用schema、chains、agent。后续再细细讲解。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐