LangChain 大模型应用开发:自定义 LLM 封装指南
在构建基于大语言模型(LLM)的应用时,直接调用厂商 API 往往会导致代码耦合度高、切换模型困难以及性能损耗等问题。LangChain 框架提供了一套标准化的抽象接口,允许开发者将任意大模型封装为统一的 LLM 对象,从而实现业务逻辑与底层模型的解耦。
LangChain 与大模型交互的核心模型
LLM(Large Language Model)是 LangChain 平台与各种大模型进行交互的核心抽象类。它定义了一个黑盒接口,输入为字符串,输出也为字符串。通过继承 langchain.llms.base.LLM 基类,开发者可以隐藏不同模型 API 的差异(如 HTTP 请求、WebSocket 连接、鉴权方式等),专注于提示词工程和应用逻辑。
核心优势
- 统一接口:无论后端是 OpenAI、讯飞星火还是本地部署的模型,上层调用代码保持一致。
- 灵活切换:修改配置即可切换模型,无需重构业务代码。
- 扩展性强:支持自定义流式输出、缓存机制及回调处理。
自定义 LLM 的实现步骤
要实现一个自定义 LLM,主要需要实现以下两个核心部分:
_call方法:这是核心逻辑入口。接收用户输入的字符串(prompt),返回模型生成的文本。支持可选的停止词(stop words)和回调管理器(CallbackManager)。_identifying_params属性:用于描述该 LLM 实例的配置参数,便于调试和日志记录。
此外,通常还需要实现 _llm_type 属性以标识模型类型。
基础示例:简单字符截取
为了演示结构,我们首先实现一个仅返回输入前 N 个字符的简易 LLM:
from langchain.llm import LLM
from typing import Optional, List, Mapping, Any
class CustomLLM(LLM):
n: int = 10 # 返回字符数
@property
def _llm_type(self) -> str:
return "custom_simple"
def _call(
self,
prompt: str,
stop: Optional[List[]] = ,
run_manager=,
**kwargs: ,
) -> :
stop:
word stop:
prompt = prompt.replace(word, )
prompt[:.n]
() -> Mapping[, ]:
{: .n}


