当前位置:   article > 正文

LLM大语言模型(九):LangChain封装自定义的LLM

LLM大语言模型(九):LangChain封装自定义的LLM

背景

想基于ChatGLM3-6B用LangChain做LLM应用,需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。

LangChain中对LLM的封装

继承关系:BaseLanguageModel——》BaseLLM——》LLM

LLM类

简化和LLM的交互

_call抽象方法定义

  1. @abstractmethod
  2. def _call(
  3. self,
  4. prompt: str,
  5. stop: Optional[List[str]] = None,
  6. run_manager: Optional[CallbackManagerForLLMRun] = None,
  7. **kwargs: Any,
  8. ) -> str:
  9. """Run the LLM on the given prompt and input."""

 BaseLLM类

BaseLLM类其实有两个abstract方法:_generate方法和_llm_type方法

注意:LLM类仅实现了_generate方法,未实现_llm_type方法

  1. @abstractmethod
  2. def _generate(
  3. self,
  4. prompts: List[str],
  5. stop: Optional[List[str]] = None,
  6. run_manager: Optional[CallbackManagerForLLMRun] = None,
  7. **kwargs: Any,
  8. ) -> LLMResult:
  9. """Run the LLM on the given prompts."""
  10. @property
  11. @abstractmethod
  12. def _llm_type(self) -> str:
  13. """Return type of llm."""

BaseLanguageModel类

和语言模型交互的基础抽象类。

    """Abstract base class for interfacing with language models.

    All language model wrappers inherit from BaseLanguageModel.

    """

 LangChain封装自定义的LLM

封装一个MyLLM类,继承自LLM类,实现最简单的hello world功能。

需要实现两个函数:

  1. _llm_type方法
  2. _call方法
  1. from typing import Any, List, Optional
  2. from langchain.llms.base import LLM
  3. from langchain_core.callbacks import CallbackManagerForLLMRun
  4. class MyLLM(LLM):
  5. def __init__(self):
  6. super().__init__()
  7. @property
  8. def _llm_type(self) -> str:
  9. return "MyLLM"
  10. def _call(self, prompt: str, stop: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForLLMRun] = None, **kwargs: Any) -> str:
  11. if len(prompt) < 10:
  12. return prompt
  13. else:
  14. return prompt[:10]
  15. mllm = MyLLM()
  16. print(mllm._llm_type)
  17. # mllm._llm_type = "haha" _llm_type该属性是无法被修改的
  18. print(mllm("hello world!"))

关于@property

@property常用在实例方法前,目的在于把该实例方法转换为同名的只读属性,方法可以像属性一样被访问。

@property的作用主要有两个:

  • @property装饰的只读属性不能被随意篡改
  • 相比于类的普通属性,@property装饰的只读属性可以添加逻辑语句,例如:

  1. @property
  2. def enable(self):
  3. return self.age > 10

 参考

  1. LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5-CSDN博客 
  2. LLM大语言模型(七):部署ChatGLM3-6B并提供HTTP server能力
  3. LLM大语言模型(四):在ChatGLM3-6B中使用langchain_chatglm3-6b langchain-CSDN博客
  4. LLM大语言模型(一):ChatGLM3-6B本地部署-CSDN博客
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/377189?site
推荐阅读
相关标签
  

闽ICP备14008679号