一日一技:在LangChain中使用Azure OpenAI Embedding服务踩坑记录

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 一日一技:在LangChain中使用Azure OpenAI Embedding服务踩坑记录

如果大家深入使用过ChatGPT的API,或者用过听说过AutoGPT,那么可能会知道,它背后所依赖的语言框架LangChain[1]。LangChain能够让大语言模型具有访问互联网的能力,以及与其他各种API互动交互,甚至是执行系统命令的能力。

ChatGPT的prompt支持的Token数量是有限的,但是使用LangChain,能够很容易实现ChatPDF/ChatDoc的效果。即使一段文本有几百万字,也能让ChatGPT对其中的内容进行总结,也能让你针对文本中的内容进行提问。

Question Answering over Docs[2]这是LangChain官方文档给出的示例,如果你使用的是OpenAI官方的API,你只需要复制粘贴上面的代码,就可以实现针对大文本进行提问。

如果你使用的是Azure OpenAI提供的接口,那就比较麻烦,需要多一些设置。我们来看一下我在使用过程中所踩的坑。

我们首先复制如下4行代码:

from langchain.document_loaders import TextLoader 
from langchain.indexes import VectorstoreIndexCreator
loader = TextLoader('article.txt')
index = VectorstoreIndexCreator().from_loaders([loader])
print(index)

其中的article.txt,就是随便找了一篇我博客的文章,如下图所示:

现在直接运行肯定是会报错的,因为我们还没有配置API的相关信息:

由于我们使用的是微软Azure OpenAI提供的接口,因此通过环境变量设置接口信息时,需要额外设置一些参数:

设置完成以后,再次运行,会发现依然报错。说明它擅自使用chromadb作为向量数据库,甚至都不给我选择的机会。

按它的要求,安装一下这个chromadb,再次运行,发现还是报错:openai.error.InvalidRequestError: Resource not found。之所以会出现这种情况,是因为在LangChain的源代码中,代码会走到langchain.embeddings.openai.OpenAIEmbeddings._get_len_safe_embeddings这个位置,在如下图所示的地方:

本来应该再传入参数deploymentapi_typeapi_version。但是这里都漏掉了。导致里面的代码始终会以OpenAI官方的接口来请求URL,所以会找不到。

即便你修改源代码,在这里加上了这三个参数,你会发现还是有问题,继续报如下错误:

openai.error.InvalidRequestError: Too many inputs. The max number of inputs is 1.  We hope to increase the number of inputs per request soon. Please contact us through an Azure support request at: https://go.microsoft.com/fwlink/?linkid=2213926 for further questions.

这是因为Azure OpenAI服务提供的embedding模型,并发请求只有1.而在LangChain会以一个比较高的并发去请求,所以会报这个错误。

不要在去源代码上修改了。我们回到最开始的代码:

index = VectorstoreIndexCreator().from_loaders([loader])

来看一下VectorstoreIndexCreator这个类它的实现方式:

可以看到,这个类继承了pydantic.BaseModel,那就简单了。我们可以直接在初始化VectorstoreIndexCreator 时,传入embedding参数。如下图所示:

现在代码终于不报错了。代码中的chunk_size=1,限定了并发为1。那么我们继续把代码写完。运行效果如下图所示:

我们还可以通过主动传入参数的方式,使用其他的数据库而不是Chroma。这里以Redis为例:

不过要使用Redis来作为向量数据库,需要在Redis中安装Redis Stack模块。安装方法可以在Redis官方文档[3]中找到。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
人工智能 API
LangChain-14 Moderation OpenAI提供的功能:检测内容中是否有违反条例的内容
LangChain-14 Moderation OpenAI提供的功能:检测内容中是否有违反条例的内容
42 2
|
3月前
|
人工智能 Serverless API
一键服务化:从魔搭开源模型到OpenAI API服务
在多样化大模型的背后,OpenAI得益于在领域的先发优势,其API接口今天也成为了业界的一个事实标准。
一键服务化:从魔搭开源模型到OpenAI API服务
|
2月前
|
存储 人工智能 安全
LangChain-23 Vector stores 向量化存储 并附带一个实际案例 通过Loader加载 Embedding后持久化 LangChain ChatOpenAI ChatGLM3对话
LangChain-23 Vector stores 向量化存储 并附带一个实际案例 通过Loader加载 Embedding后持久化 LangChain ChatOpenAI ChatGLM3对话
85 0
|
2月前
|
机器学习/深度学习 存储 自然语言处理
LangChain-22 Text Embedding 续接21节 文本切分后 对文本进行embedding向量化处理 后续可保存到向量数据库后进行检索 从而扩展大模型的能力
LangChain-22 Text Embedding 续接21节 文本切分后 对文本进行embedding向量化处理 后续可保存到向量数据库后进行检索 从而扩展大模型的能力
50 0
|
7月前
|
Cloud Native 关系型数据库 MySQL
云原生数据仓库产品使用合集之如何使用ADB MySQL湖仓版声纹特征提取服务
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
4月前
|
Python
Langchain使用OpenAI报错AttributeError: module ‘openai‘ has no attribute ‘error 的解决方案
这篇文章描述了作者在使用Python的`openai`和`langchain`库时遇到的错误,错误的提示是`AttributeError: module 'openai' has no attribute 'error'`。文章通过分析环境和版本信息,发现问题出在`langchain`库的版本过旧。作者通过卸载旧版本并安装指定版本的`langchain`库解决了问题,并总结了在遇到此类问题时检查和更新依赖库的重要性。
478 1
|
4月前
|
SQL 分布式计算 Hadoop
ADBPG&Greenplum成本优化问题之ADB管控台中开通PXF服务如何解决
ADBPG&Greenplum成本优化问题之ADB管控台中开通PXF服务如何解决
53 0
|
4月前
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
52 0
|
5月前
|
数据采集 机器学习/深度学习 数据可视化
从零到一建设数据中台 - 数据服务开发
从零到一建设数据中台 - 数据服务开发
94 0
|
6月前
|
API 异构计算
开源模型破局OpenAI服务限制,15分钟灵活搭建RAG和Agent应用
今天,我们做了两个实验,目标在15分钟内,完成下载社区的开源模型,部署成API,替换LlamaIndex中RAG和LangChain中OpenAI接口Agent的最佳实践,并取得符合预期的结果。