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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 一日一技:在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]中找到。

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
关系型数据库 MySQL Apache
**ADB MySQL湖仓版能够平滑迁移到湖仓**,阿里云提供了相应的迁移工具和服务来简化这一过程。
**ADB MySQL湖仓版能够平滑迁移到湖仓**,阿里云提供了相应的迁移工具和服务来简化这一过程。
17 2
|
8月前
|
人工智能 缓存 安全
LangChain开发环境准备-实现私有大模型OpenAI标准接口封装
今天这节课我就将带领小伙伴们将这未完成的一步补全,实现私有大模型OpenAI标准接口封装,并完成LangChain对大模型的调用与测试
926 0
|
3天前
|
Cloud Native 关系型数据库 MySQL
云原生数据仓库产品使用合集之如何使用ADB MySQL湖仓版声纹特征提取服务
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
8天前
|
人工智能 流计算
【AI大模型应用开发】【LangChain系列】9. 实用技巧:大模型的流式输出在 OpenAI 和 LangChain 中的使用
【AI大模型应用开发】【LangChain系列】9. 实用技巧:大模型的流式输出在 OpenAI 和 LangChain 中的使用
26 0
|
8天前
|
人工智能 API 网络架构
【AI大模型应用开发】【LangChain系列】7. LangServe:轻松将你的LangChain程序部署成服务
【AI大模型应用开发】【LangChain系列】7. LangServe:轻松将你的LangChain程序部署成服务
18 0
|
4月前
|
JSON 人工智能 API
Azure Machine Learning - Azure OpenAI GPT 3.5 Turbo 微调教程
Azure Machine Learning - Azure OpenAI GPT 3.5 Turbo 微调教程
49 0
|
5月前
|
人工智能 机器人 API
使用 OpenAI、LangChain 和 LlamaIndex 构建 Knowledge
使用 OpenAI、LangChain 和 LlamaIndex 构建 Knowledge
488 0
|
5月前
|
存储 人工智能 机器人
通过 OpenAI 和 Langchain 构建 Arxiv 论文摘要 Twitter 机器人
通过 OpenAI 和 Langchain 构建 Arxiv 论文摘要 Twitter 机器人
58 0
|
5月前
|
机器学习/深度学习 存储 人工智能
Azure 机器学习:使用OpenAI GPT模型
Azure 机器学习:使用OpenAI GPT模型
107 0
|
5月前
|
机器学习/深度学习 存储 人工智能
Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型
Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型
107 0