起因
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 国际许可协议 进行许可,转载请注明出处。
本文链接