赞
踩
想基于ChatGLM3-6B用LangChain做LLM应用,需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。
继承关系:BaseLanguageModel——》BaseLLM——》LLM
简化和LLM的交互
_call抽象方法定义
- @abstractmethod
- def _call(
- self,
- prompt: str,
- stop: Optional[List[str]] = None,
- run_manager: Optional[CallbackManagerForLLMRun] = None,
- **kwargs: Any,
- ) -> str:
- """Run the LLM on the given prompt and input."""
BaseLLM类其实有两个abstract方法:_generate方法和_llm_type方法
注意:LLM类仅实现了_generate方法,未实现_llm_type方法
- @abstractmethod
- def _generate(
- self,
- prompts: List[str],
- stop: Optional[List[str]] = None,
- run_manager: Optional[CallbackManagerForLLMRun] = None,
- **kwargs: Any,
- ) -> LLMResult:
- """Run the LLM on the given prompts."""
-
- @property
- @abstractmethod
- def _llm_type(self) -> str:
- """Return type of llm."""
和语言模型交互的基础抽象类。
"""Abstract base class for interfacing with language models.
All language model wrappers inherit from BaseLanguageModel.
"""
封装一个MyLLM类,继承自LLM类,实现最简单的hello world功能。
需要实现两个函数:
- from typing import Any, List, Optional
- from langchain.llms.base import LLM
- from langchain_core.callbacks import CallbackManagerForLLMRun
-
-
- class MyLLM(LLM):
-
- def __init__(self):
- super().__init__()
-
- @property
- def _llm_type(self) -> str:
- return "MyLLM"
-
- def _call(self, prompt: str, stop: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForLLMRun] = None, **kwargs: Any) -> str:
- if len(prompt) < 10:
- return prompt
- else:
- return prompt[:10]
-
- mllm = MyLLM()
- print(mllm._llm_type)
- # mllm._llm_type = "haha" _llm_type该属性是无法被修改的
- print(mllm("hello world!"))
@property常用在实例方法前,目的在于把该实例方法转换为同名的只读属性,方法可以像属性一样被访问。
@property的作用主要有两个:
相比于类的普通属性,@property装饰的只读属性可以添加逻辑语句,例如:
- @property
- def enable(self):
- return self.age > 10
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。