赞
踩
本文主要介绍了 Langchain的概念,相关组件,以及大模型微调代码实现~
LangChain是一个平台,提供工具和API,用于构建由语言模型(LLM)驱动的应用程序。它简化了 LLM 与项目的集成,能够利用高级语言处理功能。
pip install langchain
conda install langchain -c conda-forge
有关导入有效使用 LLM 所需的必要库和依赖项的说明,本文主要是结合openai的chatgpt的实例。
- import langchain
- import openai
- import os
- import IPython
- from langchain.llms import OpenAI
- from dotenv import load_dotenv
- from langchain.chat_models import ChatOpenAI
- from langchain.schema import (
- AIMessage,
- HumanMessage,
- SystemMessage
- )
- from langchain.embeddings import OpenAIEmbeddings
- from langchain.chains import LLMChain
- from langchain.chains import RetrievalQA
- from langchain import ConversationChain
-
- load_dotenv()
- # API configuration
- openai.api_key = os.getenv("OPENAI_API_KEY")
使用 LangChain 与 LLM 交互涉及一系列步骤,利用预训练语言模型的强大功能来生成文本和理解任务。以下是每个部分的详细说明,以及代码实现。
要在LangChain中初始化LLM,首先需要导入必要的库和依赖。
- from langchain import LangModel
-
- # Specify the language model you want to use
- model_name = 'gpt3'
-
- # Initialize the LLM
- llm = LangModel(model_name)
初始化 LLM 后,可以输入提示以生成文本或获取响应。提示是语言模型生成文本的起点。可以根据需要提供单个提示或多个提示。下面是一个示例:
- # Input a single prompt
- prompt = "Once upon a time"
-
- # Generate text based on the prompt
- generated_text = llm.generate_text(prompt)
输入提示后,可以从 LLM 中检索生成的文本或响应。生成的文本或响应将基于提示提供的上下文和语言模型的功能。下面是一个示例:
- # Print the generated text
- print(generated_text)
-
- # Print the responses
- for response in responses:
- print(response)
LangChain提供了多样化的功能,关键组件包括 模型、提示、链、索引和内存,代理,并发现每个组件可以完成什么。
目前出现了许多新的LLM。LangChain为各种模型提供了简化的界面和集成。
LangChain的核心是强大的语言模型(LLM),使应用程序能够理解和生成类似人类的文本。借助LangChain,开发人员可以访问广泛的LLM集合,每个LLM都经过大量数据的训练,以在各种与语言相关的任务中表现出色。无论是理解用户查询、生成响应,还是执行复杂的语言任务,LangChain的模型都是语言处理能力的支柱。
- from langchain.llms import OpenAI
- llm = OpenAI(model_name="text-davinci-003")
-
- # The LLM takes a prompt as an input and outputs a completion
- prompt = "How many days are there in a month"
- completion = llm(prompt)
聊天模型
这将使用 ChatOpenAI 类在用户和 AI 聊天机器人之间建立对话。聊天机器人的初始化temperature为 0,这使得其响应更加集中和确定。对话以系统消息开始,说明机器人的用途,然后是表达食物偏好的人类消息。聊天机器人将根据给定的输入生成响应。
- chat = ChatOpenAI(temperature=0)
-
- chat(
- [
- SystemMessage(content="You are a nice AI bot that helps a user figure out
- what to eat in one short sentence"),
- HumanMessage(content="I like tomatoes, what should I eat?")
- ]
- )
文本输入由文本嵌入模型接收,然后输出以数字方式表示输入文本的嵌入列表。可以使用嵌入从文本中提取信息然后应用此信息,例如,确定两个文本的相似程度,例如电影摘要。
- embeddings = OpenAIEmbeddings()
-
- text = "Alice has a parrot. What animal is Alice's pet?"
- text_embedding = embeddings.embed_query(text)
尽管在自然语言中向 LLM 添加提示应该感觉很自然,但必须对提示进行重大更改,然后才能获得所需的结果。这称为提示工程
一旦有了好的提示,可能想把好提示用作其他事情的模板。因此,LangChain提供了PromptTemplates,它使能够从各种组件中构建提示。
- template = "What is a good name for a company that makes {product}?"
-
- prompt = PromptTemplate(
- input_variables=["product"],
- template=template,
- )
-
- prompt.format(product="colorful socks")
将LLM与其他组件组合在一起以创建应用程序的过程在LangChain中称为链接。示例包括:
- chain = LLMChain(llm = llm,
- prompt = prompt)
-
- chain.run("colorful socks")
缺乏上下文信息,例如访问特定文档或电子邮件是 LLM 的一个缺点。 授予 LLM 对特定外部数据的访问权限将帮助您避免这种情况。
准备好将外部数据存储为文档后,可以使用文本嵌入模型在名为 VectorStore 的矢量数据库中对其进行索引。
矢量存储现在将文档存储为嵌入。有了这些外部数据,可以执行许多操作。
将它用于基于信息检索器的问答任务。
- retriever = db.as_retriever()
-
- qa = RetrievalQA.from_chain_type(
- llm=llm,
- chain_type="stuff",
- retriever=retriever,
- return_source_documents=True)
-
- query = "What am I never going to do?"
- result = qa({"query": query})
-
- print(result['result'])
对于聊天机器人等程序来说,能够回忆起以前的对话至关重要。但是,除非输入聊天记录,否则默认情况下 LLM 缺乏任何长期记忆。
通过提供许多处理聊天记录的选项,LangChain通过保持所有对话,跟上最近的K对话,并总结所说的内容来解决这个问题。
- conversation = ConversationChain(llm=llm, verbose=True)
- conversation.predict(input="Alice has a parrot.")
- conversation.predict(input="Bob has two cats.")
- conversation.predict(input="How many pets do Alice and Bob have?")
要微调 LLM,请根据特定任务或领域定制数据集。首先收集或整理与目标应用程序一致的标记数据集。该数据集应包括输入输出对或适合微调过程的格式。
在LangChain界面中,开发人员可以指定所需的LLM架构,例如层数、模型大小和其他相关参数。这些配置定义了要训练的模型的架构和容量,使开发人员能够在性能和计算资源之间取得适当的平衡。
LangChain利用分布式计算资源来高效训练LLM。开发者发起训练流程,LangChain优化训练流水线,确保资源高效利用,收敛速度更快。在训练过程中,模型从提供的数据集中学习,调整其参数以捕获特定于目标任务或域的细微差别和模式。
一旦你准备好了数据集,你就可以开始使用LangChain进行微调过程。首先,导入必要的库和依赖项。然后,初始化预训练的 LLM 并在自定义数据集上对其进行微调。下面是一个示例:
- from langchain import LangModel
-
- # Initialize the pre-trained LLM
- pre_trained_model = LangModel('gpt3')
-
- # Load and preprocess your dataset
- dataset = load_dataset('your_dataset.txt')
- preprocessed_dataset = preprocess(dataset)
-
- # Fine-tune the LLM on your dataset
- fine_tuned_model = pre_trained_model.fine_tune(preprocessed_dataset,
- num_epochs=5, batch_size=16)
【1】Building LLM-Powered Applications with LangChain (analyticsvidhya.com)
【2】Generative AI Applications with LangChain and OpenAI API (analyticsvidhya.com)
【3】Revamp Data Analysis Using OpenAI, LangChain & LlamaIndex (analyticsvidhya.com)
【4】Mastering Prompt Engineering for LLM Applications with LangChain (analyticsvidhya.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。