LangChain封装自定义的LLM:从基础到实战
创作时间:
作者:
@小白创作中心
LangChain封装自定义的LLM:从基础到实战
引用
CSDN
1.
https://blog.csdn.net/hugo_lei/article/details/137411885
本文将介绍如何使用LangChain封装自定义的LLM(大语言模型)。通过一个简单的"hello world"示例,展示如何实现自定义的LLM类。
背景
想基于ChatGLM3-6B用LangChain做LLM应用,需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。
LangChain中对LLM的封装
继承关系:BaseLanguageModel——》BaseLLM——》LLM
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类
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."""
BaseLanguageModel类
和语言模型交互的基础抽象类。
"""Abstract base class for interfacing with language models.
All language model wrappers inherit from BaseLanguageModel.
"""
LangChain封装自定义的LLM
封装一个MyLLM类,继承自LLM类,实现最简单的hello world功能。
需要实现两个函数:
- _llm_type方法
- _call方法
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装饰的只读属性不能被随意篡改
- 相比于类的普通属性,@property装饰的只读属性可以添加逻辑语句,例如:
@property
def enable(self):
return self.age > 10
参考
- LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5-CSDN博客
- LLM大语言模型(七):部署ChatGLM3-6B并提供HTTP server能力
- LLM大语言模型(四):在ChatGLM3-6B中使用langchain_chatglm3-6b langchain-CSDN博客
- LLM大语言模型(一):ChatGLM3-6B本地部署-CSDN博客
热门推荐
如何高效出行?从合肥站到合肥南站的快速路线有哪些?
合肥多条公交线路拟调整
8种自重训练动作详解:在家就能练出肌肉
广州City Walk:永庆坊、广州塔、沙面,领略岭南文化与现代魅力
广州City Walk:探寻千年商都的历史足迹
广州地铁1号线City Walk攻略:网红打卡点与美食一网打尽!
外滩办公楼法拍成交释放积极信号,上海高端办公市场前景向好
老年人电动三轮车选购指南:稳赢神器!
干细胞治疗牛皮癣:从临床研究到未来展望
从正念到感恩:快乐心理学教你提升幸福感
水晶七星阵:最强风水吉祥物收藏指南
大乐透蓝球如何选?这些科学方法帮你提高中奖率
从心理学看大乐透选号:理性与非理性的较量
大乐透蓝区号码完全指南:12选2的概率游戏
大乐透预测真相:随机性难破,大数据产业才是机遇
美国本科留学全攻略:四年花费15-25万美元,这些省钱方法很实用
深圳蛇口邮轮&明华轮,双倍打卡攻略
明年起电动车摩托车上路须持双证,无证驾驶将被严罚
苏州古桥与运河:四座名桥承载千年水乡记忆
如何在金融行业中避免违约风险?违约风险的防范措施有哪些优缺点?
什么是中医整脊手法治疗?能治疗哪些腰痛?
腰痛的诊断流程
大乐透2025004期分析:第五位连续开出奇数,下期关注33
大乐透第五位号码走势分析:大号合数持续走强
从成都到拉萨:318国道秋季自驾景观攻略
安全玩转西藏:专业导游带你畅游布达拉宫和珠峰
冬季太极养生:科学证实助眠健脑,专家详解练习要点
舌尖上的山东:鲁菜争霸赛
山东美食之旅:打卡济南把子肉、泰安豆腐宴、青岛海鲜和烟台苹果
科学证实:太极拳可优化大脑结构,有效缓解焦虑