提示:学习使用Langchain的记录
前言
提示:主要是根据视频做的一个总结性的学习笔记
原始视频地址:有代码,有视频,讲的也不错
B站视频链接:清晰度比较低,但是有中文
Langchain中文网:视频中的部分内容(Agent之类)可能比较旧了,需要看文档比较好
可能需要的环境
pip install langchain
pip install langchain_community
pip install sentence-transformer
pip install sentence_transformers
pip install chromadb
一、准备可以用于Langchain的模型
这里需要我们继承一下
from langchain.llms.base import LLM
然后重写下这里的_call方法,一般来说取决你用的模型,推理方法可能不同,但是只要返回结果就可以。
from typing import Any, List, Optional
from langchain.llms.base import LLM
from langchain_core.callbacks import CallbackManagerForLLMRun
from pydantic import BaseModel, Field
from modelscope import AutoModelForCausalLM, AutoTokenizer
class QwenLLM(LLM):
##这部分是必须的
model: Any = Field(description="Qwen2-Model")
tokenizer: Any = Field(description="Qwen2-Tokenizer")
#generation_config: Any = Field(description="generation-config")
def __init__(self):
# 加载原模型
super().__init__()
model_name = "qwen/Qwen2-7B-Instruct"
#model_dir = snapshot_download('TongyiFinance/Tongyi-Finance-14B-Chat', cache_dir = model_path)
self.tokenizer = AutoTokenizer.from_pretrained(model_name,cache_dir = 'models')
self.model = AutoModelForCausalLM.from_pretrained(model_name,cache_dir = 'models',torch_dtype="auto",device_map="cuda")
@property
def _llm_type(self) -> str:
return "QwenLLM"
def _call(self, prompt: str, stop: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForLLMRun] = None, **kwargs: Any) -> str:
model_inputs = self.tokenizer([prompt], return_tensors="pt").to("cuda")
generated_ids = self.model.generate(model_inputs.input_ids,max_new_tokens=512,temperature=0.01)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
return response
实例化成一个llm,后面我们将用这个llm来实例化Langchain的方法
llm = Qwen()
二、PromptTemplate和Parser
想要模型输出的结果符合你的要求你就需要给自己的需求加上很多的Pormpt,在Langchain中,提供了许多关于Prompt的模板,这里我简单介绍以下最基本的PromptTemplate
##PromptTemplate 创建
from langchain import PromptTemplate
template = "请翻译下面这段话:{english}。"
prompt_template = PromptTemplate(input_variables=["english"], template=template