?️?LangChain-01:介绍
探索LangChain的特征和优势
LangChain提供一个统一界面,适用于各种用例,提供了一个标准化框架。假设您已经开发了一个定制的工作流,并希望进行类似的转换,但这次使用Hugging Face的语言模型而不是OpenAI。在这种情况下,LangChain通过简化这个过程,使它变得像调整一些变量一样简单。它是一个包装器,用于利用大型语言模型,如GPT-4,BLOOM,Flan-t5,并将它们连接到许多工具(如向量存储,数据库仓库,数据加载器)。
在本文中,我将演示如何开始使用LangChain。
为什么选择LangChain?
- 简化开发:LangChain提供了Python库,帮助开发人员获得必要的工具,以便无需对代码进行太多更改就能流畅地构建应用程序。这为开发人员节省了时间和精力,他们否则将不得不手动处理复杂的NLP任务。
- 多种工具的集成:
☁️ 云存储:LangChain集成Amazon、Google和Microsoft Azure云存储系统,使用户可以与存储在这些平台中的文件和数据交互。
? Few-Shot学习:LangChain提供有限样本学习场景下的提示生成支持,允许开发可以从有限例子中学习的模型。
? 语言模型:LangChain集成了来自OpenAI、Anthropic和Hugging Face的语言模型,提供强大的自然语言处理功能。
还有许多其他的功能,比如数据库支持、网页搜索、Google Drive集成等等...
3. 适用于多种用例的多功能性:LangChain的灵活性使其可以在不同的情况下使用,以适应特定应用的需求。它为在包括客户服务、知识管理和其他领域中使用LLM打开了可能性。
4. 开放源代码:LangChain是由Harrison Chase于2022年10月在机器学习初创企业Robust Intelligence工作期间作为开放源代码项目推出的。
LangChain 如何运作?
LangChain提供端到端的流程,从输入到模型选择再到提示创建再到输出生成。以下是LangChain的主要组成部分:
?️? 模型
LangChain 可以让您轻松地在模型之间进行交换。它可以访问来自不同提供商的预训练 LLMs 范围。下面的流程图显示了在 LangChain 中使用的不同模型类型及其提供商。
Hello World
This is an example of a HTML structure.
About Me:
My name is John Smith and I am 25 years old. I live in New York City and work as a software engineer.
My Hobbies:
- Playing basketball
- Watching movies
- Traveling
Contact Me:
Email: johnsmith@example.com
Phone: 123-456-7890
你好,世界
这是一个 HTML 结构的例子示例。
关于我:
我的名字是约翰•史密斯,今年25岁。我住在纽约市,是一名软件工程师。
我的爱好:
- 打篮球
- 看电影
- 旅行
联系我:
电子邮件: johnsmith@example.com
电话:123-456-7890
开放人工智能
通过集成“OPEN_AI_KEY”,可以直接连接OpenAI。默认模型为text-davinci-003。可以通过将model_name作为参数更改模型/引擎名称。
from langchain.llms import OpenAI
llm_openai = OpenAI(openai_api_key=OPEN_AI_KEY)
OR
llm_openai = OpenAI(openai_api_key=OPEN_AI_KEY,model_name= "text-davinci-003")
llm_openai("Lionel Messi, played for which club?")
## Lionel Messi has played for FC Barcelona since 2003.
HuggingFace Hub
通过集成“HUGGINGFACEHUB_API_TOKEN”,您可以直接连接到Huggingface Hub并下载Hub中提供的任何模型。我正在使用google/flan-t5-large模型。
from langchain import HuggingFaceHub
import os
os.environ["HUGGINGFACEHUB_API_TOKEN"]='YOUR_KEY'
llm_hugging=HuggingFaceHub(repo_id="google/flan-t5-large")
llm_hugging("Lionel Messi, played for which club?")
#fc barcelona
?️?提示
提示优信,无处不在…!!!“垃圾进,垃圾出”的概念表明,有缺陷或无意义的输入数据会导致无意义的输出。同样,对于提示,优质的提示工程至关重要,可以创建有意义和有效的结果。
提示是用户向AI模型提供的指令或讨论主题,以便做出回应。提示可以是问题、陈述或任何旨在激发创造力、反思或参与的刺激。
Lang-chain 提供了一种标准的接口用于字符串提示模板和消息 PromptTemplate。
注意:提示模板与任务无关,这意味着提示模板可轻松定制和修改以适应不同的任务和场景。通过在提示模板中使用变量和占位符,LangChain允许根据特定任务进行动态输入和定制。这种灵活性不仅节省时间,而且通过提供生成各种应用程序中提示的标准化方法来简化开发过程。
如何创建提示符模板?
- 零射示例
PromptTemplate类可以接受任意数量的输入变量,并且可以进行格式化以生成提示。
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
input_variables=["text"],
template="Translate given text in french {text}?",
)
print(prompt.format(text="Hi how are you"))
#Output : Translate given text in french Hi how are you?
2. 少样本示例
Langchain 提供 FewShotPromptTemplate 类,以传递少量示例以帮助语言模型生成更好的响应。
from langchain import PromptTemplate, FewShotPromptTemplate
# First, create the list of few shot examples.
examples = [
{"word": "happy", "antonym": "sad"},
{"word": "tall", "antonym": "short"},
]
# Next, we specify the template to format the examples we have provided.
# We use the `PromptTemplate` class for this.
example_formatter_template = """Word: {word}
Antonym: {antonym}
"""
example_prompt = PromptTemplate(
input_variables=["word", "antonym"],
template=example_formatter_template,
)
# Finally, we create the `FewShotPromptTemplate` object.
few_shot_prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix="Give the antonym of every input\n",
suffix="Word: {input}\nAntonym: ",
input_variables=["input"],
example_separator="\n",
)
print(few_shot_prompt.format(input="big"))
# -> Give the antonym of every input
# ->
# -> Word: happy
# -> Antonym: sad
# ->
# -> Word: tall
# -> Antonym: short
# ->
# -> Word: big
# -> Antonym:
3. 序列化提示模板
Langchain为您提供完整的提示生态系统。
??从LangChainHub加载提示模板,其中包含了您可以在项目中使用的一系列有用提示。
??从您的本地系统加载提示模板,它将通过文件扩展名自动推断文件格式。
#Save prompt file at local system
prompt_template.save("local_prompt.json")
#Load prompt file from local system
from langchain.prompts import load_prompt
loaded_prompt = load_prompt("local_prompt.json")
?️?链条
链是Langchain中“英雄?♂️”组件,作为强大的工具,它将多个模型和提示组合在一起,使它们能够在单个应用程序中无缝协同工作。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm_openai, prompt=prompt)
chain.run("Hi how are you")
?️?记忆
Chains和Agents是无状态的,这意味着它们独立处理每个传入的查询,在执行特定任务后,其会忘记先前的对话,与聊天机器人不同,后者跟踪对话非常重要。
例如:让我们为具有多个输入的问答聊天机器人系统添加记忆功能。
from langchain.memory import ConversationBufferMemory
from langchain import OpenAI, LLMChain, PromptTemplate
template = """You are a chatbot having a conversation with a human.
{chat_history}
Human: {human_input}
Chatbot:"""
prompt = PromptTemplate(
input_variables=["chat_history", "human_input"],
template=template
)
memory = ConversationBufferMemory(memory_key="chat_history")
链条连接一切——模型、提示、记忆
llm_chain = LLMChain(
llm=OpenAI(openai_api_key=OPEN_AI_KEY),
prompt=prompt,
verbose=True,
memory=memory,
)
让我们和聊天机器人对话吧:
# Run below chain sequentially
llm_chain.predict(human_input="Hi! I'm planning a trip to London on July 2023. Can you provide me with some information and recommendations?")
llm_chain.predict(human_input="I'm mainly interested in sightseeing spots and popular attractions.")
llm_chain.predict(human_input="That's great! I also need information about transportation within the city. ")
llm_chain.predict(human_input="Ohh I forgot the date ,When I was going to london could you plz tell me?")
. LLM能清晰地记得对话历史。让我们看看这个对话历史是如何被ConversationBufferMemory储存的。
?️?索引
- 文档加载器:第一步是将数据加载到文本加载器中。
- 文本分割器:接下来将文档分割成块。
- VectorStores:然后选择想要使用的嵌入并创建向量存储以用作索引。
- 搜寻器:创建链并在搜寻器界面中公开此索引,接收一个查询(一个字符串)并返回文档列表。请保持HTML结构。
我将在我的下一篇文章中详细解释如何使用Pinecone构建Langchain索引检索系统,用于问答任务。
?️?代理人
代理角色在需要与用户直接交互而不是预定系统链时起作用。代理可以访问各种工具。根据用户输入,代理可以决定调用哪个(如果有的话)工具。
建立代理人链时的3个重要事项
?️代理人:代理人会暴露一个接口,这个接口会接收用户输入和工具,以完成某种操作。
⚓工具:这些是代理人可以采取的操作。
⚒️工具包:这些是为特定用例而设计的工具组。
例如,从现有的load_tools创建计算器工具:
最佳的LangChain替代方案
LangChain 的缺点
- LangChain可能需要学习曲线,需要时间和精力来理解其功能。(可能需要更多的研发!?)
- LangChain的广泛能力可能感觉对简单任务来说过于复杂。
- 使用大型语言模型且整合工具可能会造成计算负担。
- LangChain 可能不支持所有平台或服务。
- 需要定期维护和更新以确保最佳性能和安全性。
最后的想法
我认为LangChain在自然语言处理领域是一款颠覆性的产品。其用户友好的设计和灵活的架构使其脱颖而出。但同时,适当的测试和验证对于保证生产环境部署的可扩展性、可靠性和基础设施支持至关重要。
谢谢阅读!?希望你觉得这篇文章既有趣又有用。
关注我的领英获取更多类似信息
参考文献:
- https://python.langchain.com/zh_CN/latest/
- https://www.pinecone.io/learn/langchain/
- 请注意:LangChain是虚构的品牌名称,不是一个真正存在的品牌。 LangChain是一个全新的区块链技术,致力于改善语言学习和翻译的过程。该技术涵盖了先进的人工智能、自然语言处理和分布式系统,以提供更快速、更准确的翻译服务。 LangChain的目标是打破语言壁垒,使全球人民更容易地进行交流和协作。