聊聊 LangChain
最近调研了下 LangChain 以及 LLM 相关的一些技术,简单记录一些想法:
-
如果想让 LLM 返回更符合应用需求的结果,可以分为两个大方向:
-
LLM 输入优化:
-
Prompt 工程:比如 Few-Shot Prompting(在 Prompt 中提供例子作为上下文)和 RAG(提前将文本向量化,保存到向量数据库,并在提问时根据问题检索相关文本,作为 Prompt 上下文)。针对更为复杂的任务,又有了 ReAct 等更高阶的 Prompt 范式。
-
LLM 参数调整:比如 temperature 参数可以调整 LLM 回答的随机程度。
-
-
LLM 调优:用训练数据通过 Fine-tuning 微调基础 LLM,比如 OpenAI 就提供了这样的能力。这种方法的成本更高,且只能满足特定需求(与训练数据相关)。
-
-
LangChain 中最让我兴奋的是 Agent 能力,可以让 LLM 作为应用的大脑(或引擎)。它最初提供了类似 ReAct 论文中基于纯粹的 prompt 驱动推理的实现;在 OpenAI 推出 Function Calling 能力后,LangChain 也支持了基于 Function Calling 的 Agent 实现,将 Tool 描述转换为 OpenAI API 中的 Function Calling 参数,是一种更标准化的实现。
-
我喜欢 LangChain 的另一个点是节点编排能力。由于各类组件都有一套基础的接口(包括 Prompt、ChatModel、Retriever,以及更底层的 Runnable),除了可以实现复杂的组件编排,还可以灵活地切换组件的底层实现(比如替换 LLM 或者替换向量数据库)。
-
LangChain 初版的发布时间很早(在 ChatGPT 推出之前),且一直在跟随 LLM 的技术更迭做调整。如果整体看 LangChain 的具体代码实现以及对外提供的接口,其实算不上优雅和简洁,但是作为一个 LLM 框架而言,功能已经足够丰富了。加上社区开发者贡献的各种接口实现,目前再造一个类似 LangChain 的轮子(或者实现一个其它编程语言的版本)的工作量会比较大,比如社区实现的 langchaingo 和官方 Python 版本相比还是比较简略。
-
目前 LLM 应用中间件的两个方向:
-
Dify 等平台产品:更易用,对非技术人员更友好,通过 API 请求可以不受编程语言限制,但可能有定制化的需求不能满足的情况(依赖平台的开放性,可能需要二次开发)。
-
LangChain 等基础代码库:对开发者来说更灵活,但有一定的开发成本,并且有编程语言限制,适合需要自己搭建后端的场景。
-
-
参考 LangChain 最近推出 LangSmith 平台,LangChain 可能还是会走产品化的方向来盈利。个人感觉一种思路是在 LangChain 框架中嵌入产品化的功能,比如做 trace 和数据分析;另一种思路是基于 LangChain 搭建产品化的平台,未来 LangChain 自身推出一个 LLM 应用搭建平台也不是没有可能。