给langchain抓了一个bug

Posted by     "DD" on Wednesday, May 31, 2023 | 阅读 |,阅读约 3 分钟

起因

L是我远程工作的合作方CTO,前几天兴高采烈的对我说,他搞到azure openai账号了,来研究一下langchain和向量库吧,很好玩的,于是我就两眼放光的上了贼船。

我先花了几天时间把langchainjs跑通并且集成进现在的nodejs项目中,然后问他用哪个向量库,他回答说,已经有人在研究pgvector了,你就去搞zilliz吧。好吧,我去搞zilliz

选型与进展

研究了一下官方文档,理解zilliz就是一个商用版milvus集群,所有api都是milvus的,使用文档的话,直接用milvus的文档就好了。

我第一个想法是,能不能用开源版的milvus自行搭建一个向量库,这样我本地调试会方便很多。然而mbpdocker desktop太杀资源了,本机安装的想法不通。

接下来尝试装在自己平时测试用的ecs上,但因为这个ecs太小了,上面已经跑了两个Postgresdocker容器,没法再跑第三个docker,更何况milvusdocker安装是docker-compose,更跑不动。

于是我顺理成章的选择了zilliz cloudzilliz新账号有30天的试用期,我盘算着30天做技术调研肯定够了,如果真的要集成到产品上,L肯定会搞个商用账号来用。

我先按照zilliz官方的js示例,创建了collections,一路趟下来倒也没什么问题。

出现问题

openai跑通了,zilliz也跑通了,下面自然而然的要将langchainjszilliz集成起来了。

按惯例,我从langchainjs官方文档 扒了几个集成milvus的示例下来。配置好apikeyzilliz的参数,跑了一下,擦,报错:

Error: 13 INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Protocol error

是不是连接参数配错了?

一个参数一个参数的测试,继续报错,又改回去。见鬼了。

是不是langchainjsOpenAIEmbeddings用的不对?

找了段文本,对其单独做了一次向量化:

embeddings.embedQuery('langchainjs怎么创建Embeddings');

没报错,嗯,OpenAIEmbeddings是好的。

所以问题出在milvus配置上。

不能吧?这么成熟的开源项目???

一定是我哪里没配对,嗯,需要milvus方的技术支持~

解决

因为我使用的是zillizcloud,虽说集成的全是milvus库,但毕竟商用版的试用,理应拥有商用版的客服。

我求助L,请zilliz的技术看看,能不能帮忙趟过去。 zilliz的技术花了小半天时间,最后给我们的反馈是:他们自己去跑了demo,复现了问题,然后查源码,发现langchainjs官方调milvus的代码里面ssl参数并未传递正确。他们提了一个prlangchainjs,修复了这个bug。

wtf?!可能还从来没有人用langchainjs集成过zillizcloud

那么我就只好等langchainjs出下一个release版本,才能继续推进了。

收获

无意中,碰到这种影响力的开源项目的一个bug,非常值得总结一下:

  • 收获1,原来千锤百炼的开源工具也会出bug

  • 收获2,原来开源项目的参与方式,可以是自己提pr的。提bug,然后自己fix,再提个pr,等官方出新版的时候收录。江湖规矩学到了。

  • 收获3,原来Js 依赖库也是可以拉源码的。如果重来一遍,我可能会自己拉源码分析,而不是等官方来帮忙趟坑。


本作品由 IvyWooo 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。

本文链接

「真诚赞赏,手留余香」

猫猫和狗狗的小窝

真诚赞赏,手留余香

使用微信扫描二维码完成支付


本文总阅读量