起因
L是我远程工作的合作方CTO,前几天兴高采烈的对我说,他搞到azure openai账号了,来研究一下langchain
和向量库吧,很好玩的,于是我就两眼放光的上了贼船。
我先花了几天时间把langchainjs
跑通并且集成进现在的nodejs
项目中,然后问他用哪个向量库,他回答说,已经有人在研究pgvector
了,你就去搞zilliz
吧。好吧,我去搞zilliz
。
选型与进展
研究了一下官方文档,理解zilliz
就是一个商用版milvus
集群,所有api都是milvus
的,使用文档的话,直接用milvus
的文档就好了。
我第一个想法是,能不能用开源版的milvus
自行搭建一个向量库,这样我本地调试会方便很多。然而mbp
的docker desktop
太杀资源了,本机安装的想法不通。
接下来尝试装在自己平时测试用的ecs
上,但因为这个ecs
太小了,上面已经跑了两个Postgres
的docker
容器,没法再跑第三个docker
,更何况milvus
的docker
安装是docker-compose
,更跑不动。
于是我顺理成章的选择了zilliz cloud
,zilliz
新账号有30天的试用期,我盘算着30天做技术调研肯定够了,如果真的要集成到产品上,L肯定会搞个商用账号来用。
我先按照zilliz
官方的js示例,创建了collections
,一路趟下来倒也没什么问题。
出现问题
openai
跑通了,zilliz
也跑通了,下面自然而然的要将langchainjs
和zilliz
集成起来了。
按惯例,我从langchainjs官方文档 扒了几个集成milvus
的示例下来。配置好apikey
和zilliz
的参数,跑了一下,擦,报错:
Error: 13 INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Protocol error
是不是连接参数配错了?
一个参数一个参数的测试,继续报错,又改回去。见鬼了。
是不是langchainjs
的OpenAIEmbeddings
用的不对?
找了段文本,对其单独做了一次向量化:
embeddings.embedQuery('langchainjs怎么创建Embeddings');
没报错,嗯,OpenAIEmbeddings
是好的。
所以问题出在milvus
配置上。
不能吧?这么成熟的开源项目???
一定是我哪里没配对,嗯,需要milvus
方的技术支持~
解决
因为我使用的是zillizcloud
,虽说集成的全是milvus
库,但毕竟商用版的试用,理应拥有商用版的客服。
我求助L,请zilliz
的技术看看,能不能帮忙趟过去。
zilliz
的技术花了小半天时间,最后给我们的反馈是:他们自己去跑了demo,复现了问题,然后查源码,发现langchainjs
官方调milvus
的代码里面ssl
参数并未传递正确。他们提了一个pr 给langchainjs
,修复了这个bug。
wtf?!可能还从来没有人用langchainjs
集成过zillizcloud
。
那么我就只好等langchainjs
出下一个release
版本,才能继续推进了。
收获
无意中,碰到这种影响力的开源项目的一个bug,非常值得总结一下:
-
收获1,原来千锤百炼的开源工具也会出bug
-
收获2,原来开源项目的参与方式,可以是自己提pr的。提bug,然后自己fix,再提个pr,等官方出新版的时候收录。江湖规矩学到了。
-
收获3,原来Js 依赖库也是可以拉源码的。如果重来一遍,我可能会自己拉源码分析,而不是等官方来帮忙趟坑。
本作品由 IvyWooo 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付
本文总阅读量次