如何写一个自定义的LLM包装器#

这个notebook将介绍如何创建一个自定义的LLM包装器,以便您可以使用自己的LLM或与LangChain支持的不同包装器。自定义LLM只需要实现一个必需的方法:

  1. _call 方法,它接受一个字符串输入和一个可选的停用词列表,并返回一个字符串结果。 也可以实现一个可选的方法:

  2. _identifying_params 属性,用于帮助打印该类。应返回一个字典。

我们来实现一个非常简单的自定义LLM,它只返回输入文本的前N个字符。

from langchain.llms.base import LLM
from typing import Optional, List, Mapping, Any
class CustomLLM(LLM):
    
    n: int
        
    @property
    def _llm_type(self) -> str:
        return "custom"
    
    def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        if stop is not None:
            raise ValueError("stop kwargs are not permitted.")
        return prompt[:self.n]
    
    @property
    def _identifying_params(self) -> Mapping[str, Any]:
        """Get the identifying parameters."""
        return {"n": self.n}

我们现在可以像使用任何其他LLM那样使用这个自定义的LLM了。

llm = CustomLLM(n=10)
llm("This is a foobar thing")
'This is a '

我们还可以打印这个LLM并查看自定义的打印效果。

print(llm)
CustomLLM
Params: {'n': 10}