EmbedChain:比LangChain更加轻量化的LLM框架

news2024/9/25 17:19:18

一、前言

在之前的文章中,我们研究了如何使用LangChain结合大型语言模型(LLM)API来构建用户友好且直观的聊天机器人。现在,我们将探索一个新的Python包来进一步简化LangChain的实现。只需3-4行代码,我们就可以轻松地与任何外部数据进行通信!这个神奇的包叫Embedchain!⭐

这些库各有优点。我认为LangChain的性能更好,并且具备更多功能。另一方面,Embedchain则更容易使用,并且免费提供开源的语言模型。总之,这两个库都旨在为您创建专属的语言模型。

选择使用哪个库取决于你的具体需求。例如,如果您需要处理数据,在LangChain库中有20多种工具可供选择,比如与PDF文件互动或者从医疗网站Pubmed获取信息等等;同时还能够从YouTube下载视频并将其转换为文本进行对话等等——所有这些都是LangChain库所擅长的领域。而Embedchain也有其自身的优势。

综上所述,我的建议是掌握这两个库,并在不同情况下做出最佳选择。

二、EmbedChain 介绍

EmbedChain 是一个功能强大的框架,旨在简化使用任何数据集创建语言模型 (LLM) 支持的机器人的过程。它提供了一个抽象层,用于处理数据集加载、分块、嵌入创建以及矢量数据库中的存储。它使用LangChain、OpenAI的Ada嵌入模型、OpenAI的ChatGPT API和Chroma作为存储嵌入的向量数据库。

通过使用 .add.add_local 函数,您可以轻松地将单个或多个数据集添加到您的机器人中。然后,您可以利用 .query 函数从添加的数据集中检索答案。

如果你想创建一个包含 YouTube 视频、PDF 格式的书籍、两篇博客文章和问答对的 Naval Ravikant 机器人,你只需添加相应的链接即可。 Embedchain 将负责剩下的工作,为你创建一个机器人。

from embedchain import App

naval_bot = App()
# 添加在线数据
naval_bot.add("https://www.youtube.com/watch?v=3qHkcs3kG44")
naval_bot.add("https://navalmanack.s3.amazonaws.com/Eric-Jorgenson_The-Almanack-of-Naval-Ravikant_Final.pdf")
naval_bot.add("https://nav.al/feedback")
naval_bot.add("https://nav.al/agi")
naval_bot.add("The Meanings of Life", 'text', metadata={'chapter': 'philosphy'})

# 添加本地资源
naval_bot.add(("谁是海军拉维坎特?", "纳瓦尔·拉维坎特是一位印度裔美国企业家和投资者。"))

naval_bot.query("海军认为人类在理解解释或概念方面拥有哪些独特的能力?")
# 答:海军认为,人类拥有在这个物理现实中最大程度地理解解释或概念的独特能力。

2.1、基本原理

Embedchain 为你抽象出以下步骤,以轻松创建 LLM 支持的应用程序:

  1. 检测数据类型并加载数据

  2. 创建有意义的块

  3. 为每个块创建嵌入

  4. 将块存储在矢量数据库中

当用户提出查询时,会发生以下过程来查找答案:

  1. 为查询创建嵌入

  2. 从向量数据库中查找与查询相似的文档

  3. 将类似文档作为上下文传递给LLM以获得最终答案

加载数据集和查询的过程涉及多个步骤,每个步骤都有自己的细微差别:

  • 我应该如何对数据进行分块?什么是有意义的块大小?

  • 我应该如何为每个块创建嵌入?我应该使用哪种嵌入模型?

  • 我应该如何将块存储在矢量数据库中?我应该使用哪个矢量数据库?

  • 我应该将元数据与嵌入一起存储吗?

  • 我应该如何找到类似的查询文档?我应该使用哪种排名模型?

Embedchain 照顾所有这些细微差别,并提供一个简单的界面来在任何数据上创建应用程序。

三、快速开始

快速安装 embedchain:

pip install --upgrade embedchain

创建应用程序涉及 3 个步骤:

# 导入应用实例
import os
from embedchain import App

os.environ["OPENAI_API_KEY"] = "xxx"
elon_bot = App()

# 添加不同的数据源
elon_bot.add("https://en.wikipedia.org/wiki/Elon_Musk")
elon_bot.add("https://www.forbes.com/profile/elon-musk")
# 你还可以添加本地数据源,例如pdf、csv文件等。
# elon_bot.add("/path/to/file.pdf")

# 查询你的数据并获得答案
response = elon_bot.query("埃隆·马斯克今天的净资产是多少?")
print(response)
# 答:埃隆·马斯克如今的净资产是2587亿美元。

四、大语言模型

Embedchain 内置了对各种流行的大型语言模型的支持。我们为你处理集成这些模型的复杂性,使你可以通过用户友好的界面轻松自定义语言模型交互。

4.1、OpenAI

要使用 OpenAI LLM 模型,您必须设置 OPENAI_API_KEY 环境变量。您可以从OpenAI平台获取OpenAI API密钥。

获得密钥后,您可以像这样使用它:

import os
from embedchain import App

os.environ['OPENAI_API_KEY'] = 'xxx'

app = App()
app.add("https://en.wikipedia.org/wiki/OpenAI")
app.query("What is OpenAI?")

如果您希望配置 LLM 的不同参数,可以通过使用 yaml 配置文件加载应用程序来实现。

import os
from embedchain import App

os.environ['OPENAI_API_KEY'] = 'xxx'

# load llm configuration from config.yaml file
app = App.from_config(yaml_path="config.yaml")

# config.yaml
llm:
  provider: openai
  config:
    model: 'gpt-3.5-turbo'
    temperature: 0.5
    max_tokens: 1000
    top_p: 1
    stream: false

4.2、Hugging Face

使用以下命令安装相关依赖:

pip install --upgrade 'embedchain[huggingface_hub]'

首先,在环境变量中设置 HUGGINGFACE_ACCESS_TOKEN ,您可以从他们的平台获取该环境变量。

获得令牌后,使用配置 yaml 文件加载应用程序:

import os
from embedchain import App

os.environ["HUGGINGFACE_ACCESS_TOKEN"] = "xxx"

# 从config. yaml文件加载llm配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
llm:
  provider: huggingface
  config:
    model: 'google/flan-t5-xxl'
    temperature: 0.5
    max_tokens: 1000
    top_p: 0.5
    stream: false

五、Embedding 模型

Embedchain 支持以下提供商的多种嵌入模型:

5.1、OpenAI

要使用OpenAI嵌入功能,您必须设置 OPENAI_API_KEY 环境变量。您可以从OpenAI平台获取OpenAI API密钥。

获得密钥后,您可以像这样使用它:

import os
from embedchain import App

os.environ['OPENAI_API_KEY'] = 'xxx'

# 从config. yaml文件加载嵌入模型配置
app = App.from_config(yaml_path="config.yaml")

app.add("https://en.wikipedia.org/wiki/OpenAI")
app.query("What is OpenAI?")

# config.yaml
embedder:
  provider: openai
  config:
    model: 'text-embedding-ada-002'

5.2、Hugging Face

Hugging Face 支持使用 Sentence Transformer 库生成任意长度的文本文档的嵌入。下面给出了如何使用拥抱脸生成嵌入的示例:

from embedchain import App

# 从config. yaml文件加载嵌入模型配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
llm:
  provider: huggingface
  config:
    model: 'google/flan-t5-xxl'
    temperature: 0.5
    max_tokens: 1000
    top_p: 0.5
    stream: false

embedder:
  provider: huggingface
  config:
    model: 'sentence-transformers/all-mpnet-base-v2'

六、向量数据库

将矢量数据库与 Embedchain 结合使用是一个无缝过程。你需要做的就是在 YAML 配置文件中配置它。我们为下面每个受支持的数据库提供了示例:

6.1、ChromaDB

from embedchain import App

# 从yaml文件加载色度配置
app = App.from_config(yaml_path="config1.yaml")

# config1.yaml
vectordb:
  provider: chroma
  config:
    collection_name: 'my-collection'
    dir: db
    allow_reset: true

# config2.yaml
vectordb:
  provider: chroma
  config:
    collection_name: 'my-collection'
    host: localhost
    port: 5200
    allow_reset: true

6.2、Elasticsearch

使用以下命令安装相关依赖:

pip install --upgrade 'embedchain[elasticsearch]'
from embedchain import App

# 从yaml文件加载elasticsearch配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
vectordb:
  provider: elasticsearch
  config:
    collection_name: 'es-index'
    es_url: http://localhost:9200
    allow_reset: true
    api_key: xxx

6.3、OpenSearch

使用以下命令安装相关依赖:

pip install --upgrade 'embedchain[opensearch]'
from embedchain import App

# 从yaml文件加载opensearch配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
vectordb:
  provider: opensearch
  config:
    opensearch_url: 'https://localhost:9200'
    http_auth:
      - admin
      - admin
    vector_dimension: 1536
    collection_name: 'my-app'
    use_ssl: false
    verify_certs: false

6.4、Milvus

使用以下命令安装相关依赖:

pip install --upgrade 'embedchain[milvus]'

设置 Zilliz 环境变量 ZILLIZ_CLOUD_URIZILLIZ_CLOUD_TOKEN ,您可以在其云平台上找到它。

import os
from embedchain import App

os.environ['ZILLIZ_CLOUD_URI'] = 'https://xxx.zillizcloud.com'
os.environ['ZILLIZ_CLOUD_TOKEN'] = 'xxx'# 从yaml文件加载zilliz配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
vectordb:
  provider: zilliz
  config:
    collection_name: 'zilliz-app'
    uri: https://xxxx.api.gcp-region.zillizcloud.com
    token: xxx
    vector_dim: 1536
    metric_type: L2

6.5、Pinecone

使用以下命令安装pinecone相关依赖项:

pip install --upgrade 'embedchain[pinecone]'

为了使用 Pinecone 作为矢量数据库,请设置环境变量 PINECONE_API_KEYPINECONE_ENV ,您可以在 Pinecone 仪表板上找到它们。

from embedchain import App

# 从yaml文件加载松果配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
vectordb:
  provider: pinecone
  config:
    metric: cosine
    vector_dimension: 1536
    collection_name: my-pinecone-index

6.6、Qdrant

为了将 Qdrant 用作矢量数据库,请设置环境变量 QDRANT_URLQDRANT_API_KEY ,您可以在 Qdrant Dashboard 上找到它们。

from embedchain import App

# 从yaml文件加载qdrant配置
app = App.from_config(yaml_path="config.yaml")

# config.yaml
vectordb:
  provider: qdrant
  config:
    collection_name: my_qdrant_index

七、数据源

Embedchain 内置了12种数据源的支持。我们处理从这些数据源加载非结构化数据的复杂性,使你可以通过用户友好的界面轻松自定义你的应用程序。

7.1、CSV 文档

要添加任何 csv 文件,请将 data_type 用作 csvcsv 允许远程 URL 和常规文件路径。每行都包含标题,因此如果你有 age 列,则 18 将添加为 age: 18 。例如:

from embedchain import App

app = App()
app.add('https://people.sc.fsu.edu/~jburkardt/data/csv/airtravel.csv', data_type="csv")
# 或者使用本地文件路径添加
# app.add('/path/to/file.csv', data_type="csv")

app.query("总结航空旅行数据")
# 答:航空旅行数据显示了1958年、1959年和1960年7月的航班数量。1958年7月有491个航班,1959年7月有548个航班,1960年7月有622个航班。

注意:csv 文件有一个大小限制,超过该限制可能会引发错误。该限制由LLM设定。请考虑将大型 csv 文件分成较小的 csv 文件。

7.2、代码文档

要将任何代码文档网站添加为加载程序,请使用 data_type 作为 docs_site 。例如:

from embedchain import App

app = App()
app.add("https://docs.embedchain.ai/", data_type="docs_site")
app.query("什么是 Embedchain?")
# 答:Embedchain是一个平台,它利用各种组件,包括付费/专有组件,来提供被认为是最好的配置。它使用LLM(语言模型)提供程序,如OpenAI、Anthproic、Vertex_AI、GPT4ALL、Azure_OpenAI、LLAMA2、JINA和COHere。嵌入式链允许用户为他们的应用程序导入和利用这些LLM提供程序。'

其他支持的数据源类型就不一一列举了,具体可以查阅官方文档,基本上差异就是指定 data_type 属性为文档的类型即可。同时 add 方法既支持传入在线URL地址,也支持传入本地文档地址。

data_type 可选值为:
csv
docs_site
docs
mdx
notion
pdf_file
qna_pair
sitemap
text
web_page
youtube_video

八、数据类型处理

8.1、自动数据类型检测

add 方法根据你对源参数的输入自动尝试检测 data_type。因此 app.add('https://www.youtube.com/watch?v=dQw4w9WgXcQ') 足以嵌入 YouTube 视频。

此检测适用于所有格式。它基于是否是 URL、本地文件、源数据类型等因素。

8.1.1、调试自动检测

在配置yaml中设置 log_level: DEBUG 来调试数据类型检测是否正确。否则,你将不知道何时将无效的文件路径解释为原始文本。

8.1.2、强制数据类型

要忽略数据类型检测的任何问题,你可以通过将 data_type 添加为 add 方法参数来强制使用它。下面的示例向你展示了强制相应 data_type 的关键字。

强制还可以用于边缘情况,例如将站点地图解释为网页,以读取其原始文本而不是跟随链接。

8.2、远程数据类型

在远程数据类型中使用本地文件

某些 data_types 适用于远程内容并且仅适用于 URL。你可以通过使用 file: URI 方案格式化路径来传递本地文件,例如 file:///info.pdf

8.3、重用向量数据库

默认情况下,会在./db目录中创建一个持久化的向量数据库。您可以将应用程序拆分为两个Python脚本:一个用于创建本地的向量数据库,另一个用于重用这个本地的持久化向量数据库。当您想要对数百个文档进行索引,并单独实现聊天界面时,这非常有用。

from embedchain import App

naval_chat_bot = App()
naval_chat_bot.add("https://www.youtube.com/watch?v=3qHkcs3kG44")
naval_chat_bot.add("https://navalmanack.s3.amazonaws.com/Eric-Jorgenson_The-Almanack-of-Naval-Ravikant_Final.pdf")

你可以使用相同的代码重用本地索引,但无需添加新文档:

from embedchain import App

naval_chat_bot = App()print(naval_chat_bot.query("海军认为人类在理解解释或概念方面拥有哪些独特的能力?"))

九、自定义配置

Embedchain 开箱即用。对于高级用户,还提供配置选项。这些配置选项都是可选的并且具有合理的默认值。

你可以通过 Embedchain 提供的简单 yaml 配置来配置应用程序的不同组件( llmembedding modelvector database )。以下是 yaml 配置的通用全栈示例:

app:
  config:
    id: 'full-stack-app'

llm:
  provider: openai
  config:
    model: 'gpt-3.5-turbo'
    temperature: 0.5
    max_tokens: 1000
    top_p: 1
    stream: false
    template: |
      最后使用以下上下文来回答查询。
      如果你不知道答案,就说你不知道,不要试图编造答案。

      $context

      Query: $query

      Helpful Answer:
    system_prompt: |
      扮演威廉·莎士比亚。以威廉·莎士比亚的风格回答以下问题。

vectordb:
  provider: chroma
  config:
    collection_name: 'full-stack-app'
    dir: db
    allow_reset: true

embedder:
  provider: openai
  config:
    model: 'text-embedding-ada-002'

针对上面 yaml 配置中每个键的含义解释如下:

app 部分:

  1.   config:

  2.     id (字符串):全栈应用程序的 ID 或名称。

llm 部分:

  1.   provider (字符串):语言模型的提供者,设置为“openai”。你可以在我们的文档中找到 llm 提供商的完整列表。

  2.   model (字符串):正在使用的特定型号,“gpt-3.5-turbo”。

  3.   config:

  4.     temperature (Float):控制模型输出的随机性。较高的值(接近 1)使输出更加随机。

  5.     max_tokens (整数):控制响应中使用的令牌数量。

  6.     top_p (Float):控制单词选择的多样性。较高的值(接近 1)使单词选择更加多样化。

  7.     stream (布尔值):控制是否将响应流式传输回用户(设置为 false)。

  8.     template (字符串):模型用于生成响应的提示的自定义模板。

  9.     system_prompt (字符串):模型在生成响应时遵循的系统提示,在本例中,它设置为莎士比亚的风格。

vectordb 部分:

  1.   provider (字符串):矢量数据库的提供者,设置为“色度”。你可以在我们的文档中找到矢量数据库提供商的完整列表。

  2.   config:

  3.     collection_name (字符串):数据库的初始集合名称,设置为“full-stack-app”。

  4.     dir (字符串):数据库的目录,设置为“db”。

  5.     allow_reset (布尔值):表示是否允许重置数据库,设置为true。

embedder 部分:

  1.   provider (字符串):嵌入器的提供者,设置为“openai”。你可以在我们的文档中找到嵌入模型提供程序的完整列表。

  2.   config:

  3.     model (字符串):用于文本嵌入的特定模型,“text-embedding-ada-002”。

十、References

[1]. Embedchain GitHub: https://github.com/embedchain/embedchain

[2]. Data Platform for LLMs: https://app.embedchain.ai/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1130980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Runner GoUI自动化测试发布

构建自动化测试体系是当下每个项目团队愿意去做的,自动化测试减少重复操作节省人力成本。 RunnerGo UI自动化平台 RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selen…

APUS入驻百度灵境矩阵,普惠AI大模型插件能力

10月17日,APUS出席百度世界大会2023。会上,百度公布了灵境矩阵业务进展,APUS作为灵境矩阵首批合作伙伴正与百度携手拓展大模型能力边界、构建大模型应用生态。 百度认为,大模型将繁荣AI应用生态,在生态搭建过程中&…

springboot maven项目环境搭建idea

springboot maven项目环境搭建idea 文章目录 springboot maven项目环境搭建idea用到的软件idea下载和安装java下载和安装maven下载和安装安装maven添加JAVA_HOME路径,增加JRE环境修改conf/settings.xml,请参考以下 项目idea配置打开现有项目run或build打…

uview 1 uni-app表单 number digit 的输入框有初始化赋值后,但是校验失败

背景: 在onReady初始化规则 onReady() { this.$refs.uForm.setRules(this.rules); }, 同时:ref,model,rules,props都要配置好。 报错 当input框限定type为number,digit类型有初始值不做修改动作,直接提交会报错,验…

仿美团外卖微信小程序源码/美团外卖优惠券领劵小程序-自带流量主模式

源码简介: 仿美团外卖微信小程序源码,它是美团外卖优惠券领劵小程序,还自带流量主模式。可以领取外卖优惠券的小程序。实用方便。 美团优惠券小程序带举牌小人带菜谱流量主模式,挺多外卖小程序的,但是都没有搭建教程…

Leetcode每日一题6.05:二叉树搜索树BST

二叉搜索树(BST) 根节点大于等于左子树所有节点,小于等于右子树所有节点。 二叉搜索树中序遍历即为节点从小到大排序。 230. 二叉搜索树中第K小的元素 题目描述: 给定一个二叉搜索树的根节点 root ,和一个整数 k &a…

tcpdump 异常错误

tcpdump 进行抓包的时候,-w 提示 Permission denied: sudo tcpdump -w test1.log tcpdump: test1.log: Permission denied 开始以为是用户权限的问题,后来换用 root 账户还是不行,经搜索,是 AppArmor 的问题。 解决方…

一台服务器成了哆啦A梦的神奇口袋

如果我有一台服务器,那简直就像打开了哆啦A梦的神奇口袋!可以做的事情可太多啦,比如: 学习和探险 首先嘛,当然是用来学习和探险啦!我可以安装和配置各种操作系统、编程语言和工具,深入了解计…

优优嗨聚集团:美团外卖,让美好儿童餐计划触手可及

在当今这个快节奏的社会,父母们对于孩子的饮食健康越来越关注。如何让孩子吃得健康、吃得安心,是每一个家长都非常关心的问题。而美团外卖,作为中国最大的外卖平台之一,一直在积极推动美好儿童餐计划,让家长们能够更方…

docker(2)部署前后端分离springboot+vue项目

前置知识 虚拟网桥 docker容器需要在同一个网段才能通信,当启动一个容器时会自动连接一个docker中默认网桥段但此默认网桥段非本容器固定,当下次容器启动分配的ip会变,并且不可用名称直接访问。 自定义网段将需要互通的容器放入&#xff0c…

容联七陌入选沙利文2023中国AI技术变革典型企业

近日,全球增长咨询公司弗若斯特沙利文(Frost & Sullivan,简称“沙利文”)发布《2023年中国AI技术变革企业服务白皮书》,白皮书显示,容联七陌以大模型为支撑,通过生成式一体化智能客服全方位…

首枚开源社正式成员纪念徽章来啦

各位尊敬的开源社正式成员: 2023年10月16日,开源社刚过完第九个成立生日,开源社与您共同迎接第十年的到来! 首枚开源社正式成员纪念徽章,满载作为开源人的归属感和荣誉感,设计上我们采用开源社 logo 的经典…

【Java集合类面试十八】、ConcurrentHashMap是怎么分段分组的?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:ConcurrentHashMap是怎么…

使用BASE64实现编码和解码

系列文章目录 SpringBoot整合RabbitMQ并实现消息发送与接收 解析JSON格式参数 & 修改对象的key VUE整合Echarts实现简单的数据可视化 Java中运用BigDecimal对字符串的数值进行加减乘除等操作 List<HashMap<String,String>>实…

如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?

概述 京东作为中国最大的电商平台,为了保护其网站数据的安全性,采取了一系列的反爬虫机制。然而,作为开发者,我们可能需要使用爬虫工具来获取京东的数据。 正文 Puppeteer 是一个由 Google 开发的 Node.js 库,它提供…

【无标题】读书笔记之《智能化社会:未来人们如何生活、相爱和思考》

《智能化社会:未来人们如何生活、相爱和思考》:Digital vs Human_ how well live, love, and think in the future ,由中信出版社于2017年06月出版。作者是澳大利亚的理查德沃特森(Richard Watson)。Richard Watson在伦敦帝国理工学院从事未来…

国债1万亿,你该学点什么

what: 底层逻辑:国家信用向社会募资 why: ① 战争时代-筹措military purpose ② 平衡财政收支(大部分时期都是deficit的状态,一般方法有levy.taxing,print money,national debt,当taxing与print money都困难的时候&a…

【Java集合类面试二十】、请介绍LinkedHashMap的底层原理

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:请介绍LinkedHashMap的底…

什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

shopee商品链接获取shopee商品评论数据(用 Python实现shopee商品评论信息抓取)

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取shopee网站上的商品详情页面评论内容。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#…