【LangChain系列】第五篇:大语言模型中的提示词,模型及输出简介及实践

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 【5月更文挑战第19天】LangChain是一个Python库,简化了与大型语言模型(LLM)如GPT-3.5-turbo的交互。通过ChatOpenAI类,开发者可以创建确定性输出的应用。提示词是指导LLM执行任务的关键,ChatPromptTemplate允许创建可重用的提示模板。输出解析器如StructuredOutputParser将模型的响应转化为结构化数据,便于应用处理。LangChain提供可重用性、一致性、可扩展性,并有一系列预建功能。它使得利用LLM构建复杂、直观的应用变得更加容易。

[toc]


本节我们将探索 LangChain 的内部工作原理,LangChain 是一个有用的 Python 库,可以简化使用 LLM 的过程。您将能够创建直观、可重用且可扩展的应用程序,这些应用程序可以改变您与 LLM 的交互方式。

一、大语言模型(LLM)

大型语言模型 (LLM) 是在大量数据上预先训练的非常大的深度学习模型。底层转换器是一组神经网络,由具有自注意力功能的编码器和解码器组成,使其能够理解和生成类似人类的文本。这些模型是构建应用程序的基础。其中包括GPT-3.5-turbo,这是由 OpenAI 开发的 LLM。

ChatOpenAI 类允许您通过 OpenAI API 与 GPT-3.5-turbo 模型进行交互。

from langchain_openai import ChatOpenAI

# Create a ChatOpenAI instance
chat = ChatOpenAI(temperature=0.0, model="gpt-3.5-turbo")

通过将温度参数设置为 0.0,我们指示模型生成确定性输出,确保多次运行的一致性。这在构建需要可靠和可重复结果的应用程序时特别有用。

二、提示词

模型提供底层智能,提示充当指挥,指导语言模型执行特定任务或生成所需的输出。提示词本质上是我们提供给模型的指令,塑造其行为并根据我们的需求定制其响应。LangChain引入了ChatPromptTemplate的概念,可以简化创建和管理提示的过程。使用此工具,您可以定义可重用的模板,这些模板可以在整个应用程序中轻松共享和调整。

from langchain.prompts import ChatPromptTemplate

template_string = """Translate the text that is delimited by double quotes into a style that is {style}. text: ''{text}''"""

prompt_template = ChatPromptTemplate.from_template(template_string)

print(prompt_template.messages[0].prompt)

# Output
PromptTemplate(input_variables=['style', 'text'], template='Translate the text that is delimited by triple quotes into a style that is {style}. text: """{text}"""\n')

在上面的示例中,我们定义了一个提示词模板,该模板指示语言模型将给定文本转换为指定的样式。通过使用提示,我们可以执行广泛的任务,从语言翻译到内容生成,甚至是复杂的分析任务。如果您需要以更动态和个性化的方式与语言模型进行交互,可以借助使用 prompt_template.format_messages 方法设置消息格式的功能,您可以轻松地将用户输入、上下文信息或任何其他相关数据用于提示,从而确保与语言模型的交互针对每个独特的方案进行定制。

customer_style = "American English in a calm and respectful tone"
customer_email = "Arrr, I be fuming that me blender lid flew off and splattered me kitchen walls with smoothie! ..."

# Call the LLM to translate to the style of the customer message
customer_messages = prompt_template.format_messages(style=customer_style, text=customer_email)
customer_response = chat.invoke(customer_messages)
print(customer_response.content)

# Output
I am really frustrated that my blender lid flew off and splattered my kitchen walls with smoothie! And to make matters worse, the warranty doesn't cover the cost of cleaning up my kitchen. I could really use your help right now, friend.

通过提供所需的样式和客户电子邮件作为输入,我们可以生成一个提示词,指示语言模型将客户的信息从“盗版语”翻译成礼貌、易于理解的格式。这个简单而强大的示例展示了LangChain提示系统的多功能性,使您能够与语言模型创建动态和上下文感知的交互。

三、输出解析器

虽然提示词会引导语言模型的输入,但输出解析器在解释和构建其响应方面起着至关重要的作用。这些分析器将语言模型生成的原始文本转换为可由应用程序轻松使用和处理的结构化格式。想象一下,您正在构建一个电子商务应用程序,该应用程序依赖于客户评论来提供见解。使用 LangChain 的 ResponseSchema 和 StructuredOutputParser,您可以定义语言模型的预期输出格式,并从客户评论中提取相关信息。

from langchain.output_parsers import ResponseSchema, StructuredOutputParser

# Define the expected output schema
gift_schema = ResponseSchema(name="gift", description="Was the item purchased as a gift?")
delivery_days_schema = ResponseSchema(name="delivery_days", description="How many days did it take for the product to arrive?")
price_value_schema = ResponseSchema(name="price_value", description="Extract any sentences about the value or price.")

response_schemas = [gift_schema, delivery_days_schema, price_value_schema]

# Create the output parser
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
print(format_instructions)

# Output 
The output should be a markdown code snippet formatted in the following schema, 
{
   
    "gift": string  // Was the item purchased as a gift for someone else? Answer True if yes, False if not or unknown.
    "delivery_days": string  // How many days did it take for the product to arrive? If this information is not found, output -1.
    "price_value": string  // Extract any sentences about the value or price, and output them as a comma separated Python list.
}

通过定义所需的输出模式,LangChain会生成格式指令,指导语言模型以特定格式生成其输出。然后,可以使用 output_parser.parse 方法轻松将此结构化输出解析为 Python 字典,从而允许您提取信息,例如该物品是否是礼物、交货时间以及有关产品价值或价格的任何评论。

review_template_2 = """\
For the following text, extract the following information:

gift: Was the item purchased as a gift for someone else? \
Answer True if yes, False if not or unknown.

delivery_days: How many days did it take for the product\
to arrive? If this information is not found, output -1.

price_value: Extract any sentences about the value or price,\
and output them as a comma separated Python list.

text: {text}

{format_instructions}
"""

prompt = ChatPromptTemplate.from_template(template=review_template_2)

messages = prompt.format_messages(
    text=customer_review, format_instructions=format_instructions
)

response = chat.invoke(messages)
print(response.content)

# Output
{
   
    "gift": "True",
    "delivery_days": "2",
    "price_value": "It's slightly more expensive than the other leaf blowers out there, but I think it's worth it for the extra features."
}

output_dict = output_parser.parse(response_content)
print(output_dict["gift"])  # Output: True
print(output_dict["delivery_days"])  # Output: 2
print(output_dict["price_value"])  # Output: "It's slightly more expensive than other leaf blowers, but worth it for the extra features."

有了结构化输出,您可以轻松地将提取的信息集成到您的应用程序中,从而能够提供个性化建议、执行数据分析或增强整体用户体验。

四、优势

通过使用LangChain的模型、提示和输出解析器抽象,您可以获得几个关键优势:

  • 可重用性:LangChain允许您定义可重用的组件,这些组件可以在应用程序之间共享,甚至可以与团队或社区中的其他开发人员共享,而不是从头开始为每个新任务重新创建提示和解析器。

  • 一致性:通过集中提示和输出格式,无论使用何种任务或语言模型,都可以确保为用户提供一致且可预测的体验。

  • 可扩展性:随着应用程序的增长和演变,LangChain的模块化方法可以更轻松地适应不断变化的需求,合并新的语言模型,或与其他数据源或API集成。

  • 内置库:LangChain为摘要、问答和数据库交互等常见任务提供了丰富的预构建提示和解析器库,使您能够启动开发过程并专注于构建独特的功能,使您的应用程序与众不同。

  • 无缝集成:LangChain的抽象促进了应用程序、语言模型和解析输出之间的平滑交互,使您能够构建使用LLM的端到端解决方案,同时保持干净且可维护的代码库。

五、小结

在快速发展的机器学习和自然语言处理世界中,掌握大型语言模型是必要的。通过使用LangChain的模型、提示和输出解析器,您可以解锁一个充满可能性的世界,并构建复杂的应用程序,将语言模型无缝集成到您的工作流程中。

小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
10天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
46 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
30天前
|
存储 自然语言处理 机器人
揭秘LangChain超能力:一键解锁与多元语言模型的梦幻联动,打造前所未有的智能对话体验!
【10月更文挑战第7天】LangChain是一个开源框架,旨在简化应用程序与大型语言模型(LLM)的交互。它提供抽象层,使开发者能轻松构建聊天机器人、知识管理工具等应用。本文介绍如何使用LangChain与不同语言模型交互,涵盖安装、环境设置、简单应用开发及复杂场景配置,如文档处理和多模型支持。
40 3
|
2月前
|
存储 人工智能 自然语言处理
LangChain: 大语言模型的新篇章
本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangChain的工作原理。
|
3月前
|
自然语言处理 搜索推荐 机器人
langchain 简介
langchain 简介
115 1
|
3月前
|
SQL 程序员 Ruby
langchain 入门指南(四)- 指定大语言模型的角色
langchain 入门指南(四)- 指定大语言模型的角色
87 1
|
3月前
|
自然语言处理
LangChain 构建问题之实例化一个聊天模型如何解决
LangChain 构建问题之实例化一个聊天模型如何解决
24 1
|
3月前
|
机器学习/深度学习 自然语言处理 搜索推荐
LangChain在个性化内容生成中的实践
【8月更文第3天】随着人工智能技术的发展,个性化内容生成已经成为许多应用的核心竞争力。LangChain 是一种开源框架,旨在简化语言模型的应用开发,尤其是针对自然语言处理任务。本文将探讨 LangChain 如何帮助开发者根据用户的偏好生成定制化的内容,从挑战到实践策略,再到具体的案例分析和技术实现。
155 1
|
4月前
|
运维
开发与运维数据问题之LangChain增强大语言模型的能力如何解决
开发与运维数据问题之LangChain增强大语言模型的能力如何解决
39 1
|
4月前
|
机器学习/深度学习 人工智能 API
LangChain之模型调用
LangChain的模型是框架中的核心,基于语言模型构建,用于开发LangChain应用。通过API调用大模型来解决问题是LangChain应用开发的关键过程。
109 1
|
3月前
|
API Python
LangChain 构建问题之训练自己的ToolLLaMA模型如何解决
LangChain 构建问题之训练自己的ToolLLaMA模型如何解决
17 0
下一篇
无影云桌面