LangChain 是一种尖端且强大的工具,旨在利用大型语言模型 (LLM) 的力量。
这些 LLM 拥有卓越的能力,可以有效地处理各种各样的任务。 然而,重要的是要注意,他们的优势在于他们的一般性质,而不是深入的领域专业知识。 自 GPT-4 推出以来,它的受欢迎程度迅速增长。
虽然法学硕士擅长处理各种任务,但在提供具体答案或处理需要深厚领域知识的任务时,他们可能会面临局限性。 例如,考虑利用法学硕士在医学或法律等专业领域回答问题或执行任务。
虽然法学硕士当然可以回答有关这些领域的一般查询,但它可能难以提供需要专业知识或专业知识的更详细或细微的答案。
这是因为 LLM 接受过来自不同来源的大量文本数据的训练,使他们能够学习模式、理解上下文并生成连贯的响应。 但是,他们的培训通常不会像这些领域的人类专家那样涉及特定领域或专业知识的获取。
因此,虽然 LangChain 与 LLM 相结合,可以成为广泛任务的宝贵工具,但重要的是要认识到,在某些情况下,深厚的领域专业知识可能仍然是必要的。 具有专业知识的人类专家可以提供必要的深度、细致入微的理解和针对特定情境的见解,这可能超出了 LLM 本身的能力。
我们建议查看 LangChain 的文档或 GitHub上 存储库,以便更透彻地了解其典型用例。 强烈建议全面了解此捆绑包。
它是如何工作的?
为了理解 LangChain 的目的和工作,让我们考虑一个实际的例子。 我们知道 GPT-4 具有令人印象深刻的常识,可以为范围广泛的问题提供可靠的答案。
但是,如果我们想从自己的数据中获取特定信息,例如个人文档、书籍、PDF 文件或专有数据库,该怎么办?
LangChain 允许我们连接一个 大语言模型 比如 GPT-4 到我们自己的数据源。 它不仅仅是将一段文本粘贴到聊天界面。 相反,我们可以引用一个充满我们自己数据的整个数据库。
一旦我们获得了想要的信息,LangChain 就可以协助我们采取具体的行动。 例如,我们可以指示它发送包含特定详细信息的电子邮件。
为了实现这一目标,我们遵循使用 LangChain 的管道方法。 首先,我们获取我们想要的文档 语言模型 引用并将其分成更小的块。 然后将这些块存储为嵌入,即 矢量数据库中文本的矢量表示.
使用此设置,我们可以构建遵循标准管道的语言模型应用程序:用户提出初始问题,然后将其发送到语言模型。 问题的矢量表示用于在矢量数据库中执行相似性搜索,检索相关信息块。
然后将这些块反馈给语言模型,使其能够提供答案或采取所需的操作。
LangChain 促进了数据感知应用程序的开发,因为我们可以在向量存储中引用我们自己的数据,并且是真实的,因为它们可以采取超越回答问题的行动。 吨
他开辟了许多实际用例,特别是在个人协助方面,大型语言模型可以处理预订航班、转账或协助处理税务相关事宜等任务。
此外,学习新科目的意义重大,因为语言模型可以参考整个教学大纲并加快学习过程。 编码、数据分析和数据科学也有望受到这些进步的巨大影响。
最令人兴奋的前景之一是将大型语言模型连接到现有的公司数据,例如客户信息或营销数据。 这种与高级 API(如 Meta 的 API 或 Google 的 API)的集成有望在数据分析和数据科学方面取得指数级进展。
如何构建网页(演示)
目前,Langchain 可作为 Python 和 JavaScript 包使用。
我们可以使用 Streamlit、LangChain 和 OpenAI GPT-3 模型创建一个演示 Web 应用程序来实现 LangChain 概念。
但首先,我们必须安装一些依赖项,包括 Streamlit、LangChain 和 OpenAI。
先决条件
精简: 一个流行的 Python 包,用于创建与数据科学相关的 Web 应用程序
开放人工智能: 需要访问 OpenAI 的 GPT-3 语言模型。
要安装这些依赖项,请在 cmd 中使用以下命令:
pip install streamlit
pip install langchain
pip install openai
导入包
我们首先导入所需的包,例如 OpenAI、LangChain 和 Streamlit。 我们的语言模型链是使用 LangChain 中的三个类定义和执行的:LLMChain、SimpleSequentialChain 和 PromptTemplate。
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
基本设置
然后使用 Streamlit 语法建立了我们项目的结构基础。 我们为该应用程序命名为“什么是真实的:使用简单的顺序链”,并包含一个指向作为该应用程序灵感的 GitHub 存储库的降价链接。
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
前端小部件
我们使用简单的 Streamlit 语法使用少量相关信息设置应用程序:
# If an API key has been provided, create an OpenAI language model instance
if API:
llm = OpenAI(temperature=0.7, openai_api_key=API)
else:
# If an API key hasn't been provided, display a warning message
st.warning("Enter your OPENAI API-KEY. Get your OpenAI API key from [here](https://platform.openai.com/account/api-keys).\n")
添加前端小部件
此外,我们需要提供一个输入小部件以允许我们的用户输入任何问题。
# Add a text input box for the user's question
user_question = st.text_input(
"Enter Your Question : ",
placeholder = "Cyanobacteria can perform photosynthetsis , are they considered as plants?",
)
全做完了! 链条已启动并运行!
我们采用各种运营链 SimpleSequentialChain
以响应用户的查询。 当用户选择 "Tell me about it"
按钮:
if st.button("Tell me about it", type="primary"):
# Chain 1: Generating a rephrased version of the user's question
template = """{question}\n\n"""
prompt_template = PromptTemplate(input_variables=["question"], template=template)
question_chain = LLMChain(llm=llm, prompt=prompt_template)
# Chain 2: Generating assumptions made in the statement
template = """Here is a statement:
{statement}
Make a bullet point list of the assumptions you made when producing the above statement.\n\n"""
prompt_template = PromptTemplate(input_variables=["statement"], template=template)
assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
assumptions_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain], verbose=True
)
# Chain 3: Fact checking the assumptions
template = """Here is a bullet point list of assertions:
{assertions}
For each assertion, determine whether it is true or false. If it is false, explain why.\n\n"""
prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
fact_checker_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain], verbose=True
)
# Final Chain: Generating the final answer to the user's question based on the facts and assumptions
template = """In light of the above facts, how would you answer the question '{}'""".format(
user_question
)
template = """{facts}\n""" + template
prompt_template = PromptTemplate(input_variables=["facts"], template=template)
answer_chain = LLMChain(llm=llm, prompt=prompt_template)
overall_chain = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain, answer_chain],
verbose=True,
)
# Running all the chains on the user's question and displaying the final answer
st.success(overall_chain.run(user_question))
question_chain
:这是我们管道中的第一步,接收用户的问题作为输入和输出。 用户的查询作为链的模板。- 根据与问题相关的陈述,
assumptions_chain
使用来自的输出生成假设的要点列表question_chain
作为输入。 这LLMChain
和OpenAI
来自 LangChain 的模型被用来构建声明。 用户的任务是创建一个假设列表,这些假设是为了使用该链的模板生成语句。 - 基于从输出
question_chain
和assumptions_chain
是,fact_checker_chain
以要点的形式生成断言列表。 声明是使用OpenAI
模型和LLMChain
来自朗链。 用户的任务是确定每个声明是否准确或不正确,并为这些声明提供理由。 -
answer_chain
使用来自的输出question_chain
,assumptions_chain
及fact_checker_chain
作为输入,使用早期链产生的数据创建对用户问题的响应。 该链的模板要求用户使用创建的事实响应第一个查询。 - 为了根据早期链产生的信息对用户的查询提供最终的响应,我们将这些链整合到整体链中。 链完成后,我们使用
st.success()
向用户展示解决方案。
结论
我们可以简单地将不同的语言模型操作链接在一起,通过使用 SimpleSequentialChain
LangChain的模块。 对于各种各样的 NLP 应用程序,包括聊天机器人、问答系统和语言翻译工具,这可能会很有帮助。
LangChain 的卓越之处在于其抽象能力,这使用户能够专注于当前问题,而不是语言建模的细节。
LangChain 通过提供预训练模型和精选模板,使创建复杂语言模型的过程更加人性化。
它为您提供了使用自己的数据微调语言模型的选项,从而使自定义语言模型变得简单。 这使得能够开发更精确的、特定领域的模型,对于给定的工作,这些模型的性能优于经过训练的模型。
SimpleSequentialChain
LangChain 的模块和其他功能使其成为快速开发和部署复杂 NLP 系统的有效工具。
发表评论