我们真的需要Langchain吗?
目录
最近在思考一个问题, 在真正的产品应用中, 真的需要Langchain吗?
工业应用#
请求量级#
笔者之前在某家ChatBot工作, 可以提供的数据量级大概是这样的
QPS基本在5000左右, 目前看来这是业界中比较高的量级
如果考虑到需要额外的搭配的其他组件, 存储, MQ, Cache等等, 会有一些更大的扩散
请求特点#
一个需要特别注意的事情是, 在业务比较稳定的情况下, 实际上Prompt是比较稳定的, 在实际应用中主要有以下:
- RolePlay(单体角色扮演)
- Group RolePlay(群聊)
- Translate(翻译)
- Summarize(记忆总结)
可以看到的是, 用到的Prompt的特点是比较少的, 而且通常来说格式是固定的, 而且改动频率较低
Prompt#
以RolePlay作为例子, Prompt的结构类似于
{Role Play 角色扮演指令}
{Character Profile 角色信息}
{Context Messages 上下文消息}
{Jail Break 越狱指令}
{Language Instruction 语言指令}
其中只有角色信息以及, 上下文消息是需要动态拼接
而且由于请求量级非常大, 所以会单独的拆分一个包含存储/缓存的模块服务来提供Prompt的组织
Langchain#
很好, 如果是想要构建一个Demo来进行测试或者是进行演示, 那么毫无疑问, Langchain是非常好用的.
搭配上非常丰富的生态, 构建的速度确实非常快速, 而且现在Langchain hub是有很丰富的Prompt资源.
大部分情况下, 可以在30行的量级上就构建出一个Demo
一切看起来都很美好, 但是有这么几个问题
- LLM Client的负载能力没法拓展, 实际上在业务量级较大的情况下, 必须进行功能的拆分
- 如果只把Langchain作为组装Prompt的组件, 似乎这个组件又太重了
- 如果作为Prompt的来源, 一些业务又存在定制的问题
甚至我认为在必要的情况下, 如果你的业务不太复杂, 你完全不需要引入任何所谓的LLM框架
LLM 框架#
现在的LLM框架想要做太多的事情, 想要做LLM API Client, 想要做Prompt, 想好做memory, 想做index, RAG ….
太贪心了, 真的太贪心了
在产品实践之后, 我认为最重要的事情从来都不是把所有的事情都结合到一起, 最重要的事情是知道自己需要什么东西
就现在看来, 我完全不觉得现在这些LLM 框架有真正的生产价值, 依然需要工程师进行大量的适配工作
而这些适配的工作量可能要比使用LLM框架的成本更高
反例#
但是实际上还是有反例的, 如果我们还是以传统的轻客户端来看, 那么以上的批评是没有问题的, 如果是重客户端的话, 我认为是完全没有问题的
但是用python做客户端吗?NO,NO,NO
不过这倒是引入了另一个问题, 会有多少人原因用python来构建客户端呢?
总结#
好好学习构建Prompt要比学习使用这些LLM框架更有用
抛开这些名不副实的LLM框架吧, 用他们来做原型而不是做产品应用