使用LangChain掌握LLM应用程序的提示工程
LangChain提示LLM应用程序工程
介绍
在数字时代,基于语言的应用在我们的生活中发挥着至关重要的作用,驱动着诸如聊天机器人和虚拟助手等各种工具。通过使用LangChain,一种开源的Python框架,您可以掌握LLM应用程序的提示工程,该框架已经彻底改变了创造尖端LLM驱动应用程序的方式。本指南旨在为读者提供使用LangChain构建动态、上下文感知的语言应用程序所需的知识和工具。我们将探讨提示管理、利用额外的LLM和外部数据以及掌握链式技术以创建复杂的语言应用程序。无论您是开发人员还是人工智能爱好者,本指南都将帮助您释放语言的力量,并借助LangChain将您的LLM应用程序创意变为现实。
学习目标
- 了解LangChain及其应用的基本原理。
- 学习有效的提示工程技术,以增强LLM驱动的应用程序。
- 掌握链式技术,创建智能且上下文感知的语言应用程序。
- 使用LangChain创建现实世界的语言应用程序,并应用本指南中所学知识。
- 了解提示工程和LLM应用的最新进展和发展动态。
本文作为数据科学博文马拉松的一部分发表。
什么是大型语言模型(LLMs)?
大型语言模型是建立在深度学习架构上、经过大量数据训练的强大人工智能系统。这些模型能够理解复杂的语言模式、细微差别和上下文,使其能够熟练处理语言翻译、文本生成、摘要等任务。一个著名的LLM示例是OpenAI的GPT(生成预训练变压器)模型。
什么是LangChain?
LangChain是一个综合性的开源平台,提供一套工具、组件和接口,简化了构建由大型语言模型驱动的应用程序的过程。该平台的主要目标是使开发人员能够无缝地将语言处理能力整合到他们的应用程序中,而无需从头开始。LangChain提供了一种用户友好和高效的方法来管理与LLMs的交互,无缝地链接不同组件,并整合API和数据库等资源。
LangChain的应用
LangChain是一个旨在促进由大型语言模型(LLMs)驱动的应用程序开发的开源框架,为自然语言处理(NLP)和其他领域提供了许多潜在的应用。以下是LangChain的一些关键应用:
- 聊天机器人和虚拟助手:LangChain使开发人员能够创建智能聊天机器人和虚拟助手,与用户进行自然语言对话。这些聊天机器人可以协助用户完成各种任务,回答问题,提供客户支持,并提供个性化建议。
- 语言翻译工具:使用LangChain,开发人员可以构建语言翻译工具,促进不同语言之间的无缝沟通。用户可以输入一种语言的文本,应用程序可以生成他们所需目标语言的准确翻译。
- 情感分析工具:LangChain可用于开发情感分析应用,评估文本中表达的情感和观点。企业可以利用这些工具了解客户反馈、分析社交媒体情绪并监控品牌声誉。
- 文本摘要:开发人员可以利用LangChain创建文本摘要应用程序,自动生成较长文本的简洁摘要。这些摘要工具对于从大量文本中快速提取关键信息非常有价值。
- 内容生成:LangChain允许开发内容生成应用程序,根据预定义提示生成创意且连贯的文本。这在内容营销、创意写作和生成个性化消息方面非常有用。
在Python中设置LangChain和OpenAI
使用pip安装
pip install langchain
pip install openai
使用conda安装
conda install langchain -c conda-forge
conda install -c conda-forge openai
这将安装LangChain的必要组件。然而,只有当LangChain与各种模型提供商、数据存储和其他必要组件无缝集成时,LangChain的真正强大和多功能性才能得以实现。
如何在LangChain中构建语言模型应用程序?
LangChain提供了一个LLM类,用于与各种语言模型提供商(如OpenAI、Cohere和Hugging Face)进行接口交互。LLM的最基本功能是生成文本。
import os
os.environ["OPENAI_API_KEY"] = ""
- OpenAI API密钥是用于标识对OpenAI API的请求的唯一代码。它用于验证您的请求并控制您的API访问。
- 要使用OpenAI API,您必须创建一个帐户并生成一个API密钥。一旦您拥有API密钥,您就可以开始向API发送请求。
在LangChain中管理LLM的提示模板
OpenAI模块提供了一个可以用于访问OpenAI API的类。LLMChain模块提供了一个可以将多个语言模型链接在一起的类。
然后,代码创建了OpenAI类的实例,并将温度参数设置为0.7。温度参数控制OpenAI API生成的文本的创造性。较高的温度将产生更有创造性的文本,而较低的温度将产生更可预测的文本。
from langchain.llms import OpenAI
from langchain.chains import LLMChain
llm = OpenAI(temperature=0.7)
LangChain中的PromptTemplate允许您使用模板生成提示。当在多个地方使用相同的提示大纲但某些值改变时,这非常有用。
from langchain import PromptTemplate
提示模板1:扮演角色
我们已经设置了一个LLMChain,它可以充当财务顾问,能够解释用户指定的基本的所得税或其他财务概念。当执行时,该链将轻松解释财务概念。
template1 = '''我希望你能充当人们的一位行动财务顾问。
以简单的方式解释{financial_concept}的基础知识。'''
prompt1 = PromptTemplate(
input_variables = ['financial_concept'],
template = template1
)
prompt1.format(financial_concept='所得税')
chain1 = LLMChain(llm=llm,prompt=prompt1)
chain1.run('所得税')
chain1.run('GDP')
提示模板2:语言翻译
我们已经设置了一个LLMChain,它可以将英语句子翻译成印地语和法语。当执行时,该链将以句子“你好吗?”和目标语言“印地语”和“法语”作为输入,语言模型将生成印地语和法语的翻译输出作为响应。
template2='''以简单的方式将以下句子'{sentence}'翻译成{target_language}'''
language_prompt = PromptTemplate(
input_variables = ["sentence","target_language"],
template=template2
)
language_prompt.format(sentence="你好吗",target_language='印地语')
chain2 = LLMChain(llm=llm,prompt=language_prompt)
data = chain2({
'sentence':"你叫什么名字?",
'target_language':'印地语'
})
print("英语句子:", data['sentence'])
print("目标语言:", data['target_language'])
print("翻译文本:")
print(data['text'])
data = chain2({
'sentence':"你好吗?",
'target_language':'法语'
})
print("英语句子:", data['sentence'])
print("目标语言:", data['target_language'])
print("翻译文本:")
print(data['text'])
模板3:旅行指南
我们创建了一个基于语言模型的应用程序,为印度提供旅行建议。语言模型将根据提示模板中提供的输入,回答三个关于在印度旅行时可以做的具体事项。
template3 = """我要去{location}旅行。在那里我可以做的前三件事是什么。
请非常具体地用三个要点回答"""
travel_prompt = PromptTemplate(
input_variables=["location"],
template=template3,
)
travel_prompt = travel_prompt.format(location='巴黎')
print(f"LLM 输出: {llm(travel_prompt)}")
将LLM和提示组合在多步骤工作流中
名人搜索引擎
用户可以输入一个名人的名字,该应用程序将提供关于该名人的详细信息,包括他们的出生日期和该日期周围的重要事件。
# 链1:告诉我关于名人的信息
first_input_prompt = PromptTemplate(
input_variables = ['name'],
template = "告诉我关于名人{name}的信息"
)
chain1 = LLMChain(
llm=llm,
prompt=first_input_prompt,
output_key='person'
)
# 链2:名人的出生日期
second_input_prompt = PromptTemplate(
input_variables = ['person'],
template = "{person}是什么时候出生的"
)
chain2 = LLMChain(
llm=llm,
prompt=second_input_prompt,
output_key='dob'
)
# 链3:该日期发生的5个重大事件
third_input_prompt = PromptTemplate(
input_variables = ['dob'],
template = "提到{dob}这个日期周围发生的5个重大事件"
)
chain3 = LLMChain(
llm=llm,
prompt=third_input_prompt,
output_key='description'
)
#组合链条
from langchain.chains import SequentialChain
celebrity_chain = SequentialChain(
chains=[chain1,chain2,chain3],
input_variables=['name'],
output_variables=['person','dob','description']
)
data = celebrity_chain({'name':"MS Dhoni"})
print("名字:", data['name'])
print("出生日期:", data['dob'])
print("描述:")
print(data['person'])
print("历史事件:")
print(data['description'])
餐厅名称生成器
用户可以输入一种菜系,该应用程序将根据该菜系提供一个建议的餐厅名称,并列出推荐餐厅的菜单项。
# 链1:餐厅名称
prompt_template_name = PromptTemplate(
input_variables=['cuisine'],
template="我想开一家供应{cuisine}菜的餐厅。给我一个炫酷的名字建议。"
)
name_chain = LLMChain(llm=llm, prompt=prompt_template_name, output_key="restaurant_name")
# 链2:菜单项
prompt_template_items = PromptTemplate(
input_variables=['restaurant_name'],
template="为{restaurant_name}推荐一些菜单项。以逗号分隔的字符串形式返回"
)
food_items_chain = LLMChain(llm=llm, prompt=prompt_template_items, output_key="menu_items")
#组合链条
from langchain.chains import SequentialChain
restaurant_chain = SequentialChain(
chains=[name_chain, food_items_chain],
input_variables=['cuisine'],
output_variables=['restaurant_name', "menu_items"]
)
data = restaurant_chain({'cuisine':'印度'})
print("菜系:", data['cuisine'])
print("餐厅名称:", data['restaurant_name'])
print("菜单项:")
print(data['menu_items'])
结论
总而言之,LangChain已经彻底改变了语言模型的世界,为开发人员提供了一个开源的Python框架,可以轻松构建由大型语言模型(LLM)驱动的尖端应用程序。它与基础模型和外部数据源的无缝集成,以及对提示管理和模板的支持,简化了开发过程并培养了创造力。从聊天机器人到虚拟助手和语言翻译工具,LangChain提供了一个强大的平台,加速项目开发并推动自然语言处理领域的创新。
主要观点
- LangChain是一个开源的Python框架,使开发人员能够构建由大型语言模型(LLM)驱动的尖端应用程序。
- 与基础模型和外部数据源的无缝集成增强了语言应用的能力。
- 有效的提示工程技术使开发人员能够为特定任务量身定制LLMs,创建上下文感知的语言应用程序。
- LangChain加速项目开发,推动自然语言处理领域的创新,并为语言应用程序打开了无限的可能性。
代码和实现已上传到Langchain存储库的Github上。
希望您发现本文有用。请在LinkedIn上与我联系。
常见问题
本文中显示的媒体不属于Analytics Vidhya所有,仅由作者自行决定使用。