我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
LangChain 是一个旨在简化使用大型语言模型(LLM)创建应用程序的框架。它提供了许多功能,使与LLM的合作变得更加容易,例如:
LangChain 是开源的,可在GitHub上获取(?GitHub - langchain-ai/langchain: ? Building applications with LLMs through composability ??)。它是使用LLM构建应用程序的流行框架,被许多公司和组织使用。
以下是使用LangChain的一些好处:
如果您有兴趣与LLM合作,我建议您查看 LangChain。它是一个功能强大的框架,可以让您更轻松地开始使用LLM并使用它们构建应用程序。让我们看一下一些额外的细节。
? LangChain提供了一个简单的API来加载和使用LLM。即使您不熟悉LLM,此 API 也能让您轻松? ? 入门。例如,您可以使用一行代码加载 LLM:
model = langchain.load( “bert-base-uncased” )
加载 LLM 后,您可以使用它来生成文本、翻译语言、编写不同类型的创意内容,并以翔实的方式回答您的问题。
? LangChain 提供了许多预训练的 LLM,可以开箱即用。这节省了培训过程中的时间和精力。例? ? 如,LangChain 为各种任务提供预训练的 LLM,例如:
LangChain提供了多种用于LLM微调的工具。这使您可以针对特定任务微调LLM。例如,您可以针对特定的聊天机器人应用程序或特定的问答数据集微调 LLM。
? 让我们看一个例子。下面的代码也可以在我的GitHub 存储库之一中找到。? 您还可以在Google Colab中使用此代码。
首先安装所需的库pip install -q transformers einops accelerate langchain bitsandbytes xformers
还运行nvidia-smi
命令。(NVIDIA System Management Interface)命令nvidia-smi
是NVIDIA提供的用于管理和监控NVIDIA GPU设备的工具。此工具提供有关系统中安装的 GPU 的详细信息,例如:
例如,当您简单地nvidia-smi
在终端中运行时,您将获得当前 GPU 状态的快照,包括 GPU ID、利用率、内存使用情况、温度、功耗等。
您还可以使用nvidia-smi
各种标志和选项来查询特定信息或更新 GPU 设置。例如,nvidia-smi -q
提供更详细的 GPU 状态报告。
对于那些使用 NVIDIA GPU 的人来说,这是一个非常有用的工具,特别是对于深度学习、科学计算或任何其他 GPU 密集型操作等任务来说,可以监控和管理 GPU 的运行状况和性能。
然后我们定义模型并使用 HuggingFacePipeline
from langchain import HuggingFacePipeline
from transformers import AutoTokenizer, pipeline
import torch
model = "tiiuae/falcon-7b-instruct" # You can also use the larger model falcon-40b-instruct
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
"text-generation", #task
model=model,
tokenizer=tokenizer,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto",
max_length=10000,
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id
)
上面的代码片段使用 Hugging Face Transformers 库设置文本生成管道。让我们逐步浏览一下代码以了解它的作用:
langchain
嗯,就是我们在本文中讨论的库;-)transformers
安装 Python 包。2. 从Transformers库导入所需模块:
AutoTokenizer
:此类用于自动加载指定预训练模型的分词器。pipeline
:该函数为各种 NLP 任务创建管道,例如文本生成、情感分析等。torch
:它导入 PyTorch 库。3. 设置模型和分词器:将
模型标识符“?tiiuae/falcon-7b-instruct?”(或较大模型的“?falcon-40b-instruct?”)分配给变量model。
AutoTokenizer.from_pretrained?()方法用于加载与指定模型关联的分词器。该分词器将用于预处理输入文本并将其转换为适合模型的输入格式。
4. 配置文本生成管道:使用参数“text- Generation”调用
该pipeline()
函数,表示该管道将用于文本生成。
参数model
、tokenizer
、 和torch_dtype
被传递到管道。trust_remote_code
设置为True,因为管道依赖于远程代码执行。device_map
设置为“auto”,表示管道将自动确定合适的硬件设备(CPU/GPU)进行推理。max_length
设置为 10000,这意味着生成的文本不应超过 10,000 个标记。do_sample
设置为True
,这允许模型在文本生成期间使用采样。top_k
设置为 10,这意味着模型在采样期间将考虑前 10 个最有可能的标记。num_return_sequences
设置为1,表示只会生成一个文本序列。eos_token_id
?设置为tokenizer.eos_token_id
,这可能是用于停止文本生成的序列结束标记 ID。
该代码使用指定的模型和分词器设置文本生成管道,允许您使用给定的模型生成文本。如果您向此管道提供输入文本,它将根据配置参数和所使用的语言模型的行为返回生成的文本。
注意:生成文本的具体行为和功能将取决于底层模型(例如,“tiiuae/falcon-7b-instruct”或“falcon-40b-instruct”或任何其他模型)以及训练它的数据。
现在让我们定义要使用的温度:
llm = HuggingFacePipeline(pipeline = pipeline, model_kwargs = {'temperature':0})
在 中model_kwargs = {'temperature':0}
,代码设置要在文本生成期间使用的特定于模型的关键字参数。在这种情况下,它将temperature
参数设置为0。该temperature
参数控制文本生成的随机性。较高的值(例如,1.0)使生成的文本更具创意和多样性,而较低的值(即本示例中的 0)使文本更具确定性和针对性。
现在,让我们创建一些代码来使用 LangChain 创建提示模板。
from langchain import PromptTemplate, LLMChain
template = """
You are an ethical hacker and programmer. Help the following question with brilliant answers.
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["question"])
llm_chain = LLMChain(prompt=prompt, llm=llm)
question = "Create a python script to send a DNS packet using scapy with a secret payload "
print(llm_chain.run(question))
让我们逐步分解提供的代码:
PromptTemplate
帮助创建文本提示模板的类。template
:template
是一个多行字符串,其中包含{question}
稍后插入的问题的占位符。它似乎是用于生成提示的预定义格式。PromptTemplate
对象:使用和 的列表PromptTemplate
调用该类,其中包含将在模板中用作占位符的变量名称。在本例中,只有一个变量 ,稍后将用实际问题替换。template
input_variables
"question"
LLMChain
对象:使用之前创建的对象和对象LLMChain
来调用该类,该对象似乎是之前使用 Hugging Face Transformers 库定义的语言模型管道 ( )。prompt
llm
llm
question
:用一个字符串值定义一个名为 的变量question
,该字符串值代表需要给出精彩答案的问题。问题涉及创建一个 Python 脚本,以使用带有秘密负载的 Scapy 发送 DNS 数据包。llm_chain.run(question)
调用该方法question
。此方法可能使用链式语言模型 (?llm
) 以及提供的提示来生成问题的响应。该llm_chain
对象似乎处理根据输入问题和预定义模板生成答案的过程。print(llm_chain.run(question))
。同样,代码示例也可以在我的GitHub 存储库之一中找到。您还可以在Google Colab中使用此代码。
在LangChain中,文档加载器提供了一种便捷的方式来从不同来源检索不同格式的数据,例如.txt、.csv、JSON、HTML和PDF。在这种情况下,文档是指一段文本及其关联的元数据。这些加载器在处理不同类型的数据源时提供灵活性和易用性。
例如,您可以使用文档加载器加载简单的 .txt 文件、提取任何网页的文本内容或获取 YouTube 视频的文字记录。
文档加载器提供两种基本方法:
load
:此方法用于从指定源获取数据并将其呈现为文档。它有效地处理将数据加载到内存的过程。lazy load
:除了常规加载方法之外,一些文档加载器还提供“延迟加载”功能。这意味着数据仅在需要时才加载到内存中,从而为大型数据集提供更高效的内存管理。通过利用LangChain中的文档加载器,用户可以轻松访问和处理不同的数据源,而无需担心底层格式。这一功能使 LangChain 成为以多功能且用户友好的方式处理基于文本的数据的强大工具。无论您是处理简单的文本文件、网页还是多媒体记录,文档加载器都可以简化数据检索过程并提高处理不同任务的整体效率。
您甚至可以集成第三方文档加载器。
Document loaders | 🦜?🔗 Langchain
正如您所看到的,LangChain 是一个多功能框架,旨在构建由语言模型驱动的应用程序。其主要功能是数据感知,支持与外部数据源无缝集成,以及基于代理的方法,允许语言模型与其环境动态交互。
该框架提供了强大的价值主张,包括一系列可简化语言模型使用的组件。这些组件是模块化的,使其易于独立使用或与 LangChain 的其余部分结合使用。此外,LangChain还为特定任务提供即用型、预组装的链,从而简化了应用程序开发流程。