基于 LangChain 封装自定义 LLM 及讯飞星火接入示例
LangChain 提供了灵活的接口,允许开发者将各种大模型集成到自己的应用中。本文将介绍如何理解 LangChain 中的 LLM 抽象层,并演示如何通过继承基类实现自定义 LLM,最后提供基于讯飞星火 WebSocket API 的完整封装示例。
LangChain 与大模型交互的核心模型:LLM
在 LangChain 中,LLM(Large Language Model)是与各种大模型进行交互的核心抽象模型。它定义了一个能够处理语言输入和输出的黑盒接口。
- 输入:字符串,通常表示用户的请求或问题。
- 输出:字符串,表示模型的回答或结果。
通过这一抽象,开发者无需关心底层大模型的细节和复杂性,只需关注语言的逻辑和意义,即可利用大模型的能力构建应用。同时,这种设计允许开发者灵活地选择和切换不同的大模型,而无需修改核心业务代码。
如何自己封装一个 LLM
要实现自定义 LLM,主要需要继承 LangChain 提供的 LLM 基类,并实现以下两个核心部分:
_call方法:这是核心推理入口。它接受一个字符串作为输入(prompt),以及可选的停止词(stop_words),返回模型生成的字符串结果。_identifying_params属性:用于帮助打印类的信息,返回一个字典,包含描述该类配置的关键参数。
下面是一个简单的自定义 LLM 示例,它仅返回输入的前 n 个字符,用于演示结构:
from langchain.llm import LLM
class CustomLLM(LLM):
def __init__(self, n: int):
super().__init__()
self.n = n
def _call(self, input: str, stop: list[str] | None = None) -> str:
if stop:
words = input.split()
filtered_words = [w for w in words if w not in stop]
input = " ".join(filtered_words)
[:.n]
() -> :
{: .n}


