青训营第四课: 模型I/O:输入提示、调用模型、解析输出

92 阅读7分钟

模型I/O:输入提示、调用模型、解析输出

课程链接:LangChain 实战课 - 掘金小册 - 掘金小册 (juejin.cn)

前言

这节课介绍了LangChain的六大核心组件,并进行了仔细的剖析。其中模型虽然是LangChain框架的最底层,但它却是语言模型构建的应用的核心。LangChain应用开发的过程,就是通过API调用大模型来解决问题的过程。通过这节课我收获了一个可以自动生成鲜花的文档的应用程序。

Moodel I/O

使用模型行的过程可以分为三个部分:输入提示(图中的Format)、调用模型(图中的Predict)、输出解析(图中Parse),这三个部分组成了LangChain的Moodel I/O(lnput/Output)。

image.png

  1. 提示模板:使用模型的第一个环节是把提示信息输入到模型中,你可以创建LangChain模板,根据实际需求动态选择不同的输入,针对特定的任务和应用调整输入。
  2. 语言模型:LangChain允许你通过通用接口来调用语言模型。这意味着无论你要使用的是哪种语言模型,都可以通过同一种方式进行调用,这样就提高了灵活性和便利性。
  3. 输出解析:LangChain还提供了从模型输出中提取信息的功能。通过输出解析器,你可以精确地从模型的输出中获取需要的信息,而不需要处理冗余或不相关的数据,更重要的是还可以把大模型给回的非结构化文本,转换成程序可以处理的结构化数据。

提示模版

  1. 什么是提示模板:提示模板是与语言模型对话的结构化方式。

  2. 为什么使用:帮助获得更准确、相关的回答。

  3. 构建提示模板

    • 明确指示:告诉模型你想要什么。
    • 提供上下文:让模型有足够的信息来理解问题。
  4. LangChain中的使用

    • PromptTemplate类:创建和管理模板。
    • from_template方法:从字符串创建模板对象。
  5. 模板结构

    • 变量:模板中可替换的部分。
    • 格式:如f-string,指定模板类型。 提示模板的生成方式
# 导入LangChain中的提示模板
from langchain.prompts import PromptTemplate
# 创建原始模板
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template) 
# 打印LangChain提示模板的内容
print(prompt)
  1. 实践应用

    • 替换模板变量生成具体提示。
    • 输入模板到模型获取回答

语言模型

LangChain中文支持的模型有三大类:

  1. 大语言模型(LLM) ,也叫Text Model,这些模型将文本字符串作为输入,并返回文本字符串作为输出。Open AI的text-davinci-003、Facebook的LLaMA、ANTHROPIC的Claude,都是典型的LLM。
  2. 聊天模型(Chat Model),主要代表Open AI的ChatGPT系列模型。这些模型通常由语言模型支持,但它们的 API 更加结构化。具体来说,这些模型将聊天消息列表作为输入,并返回聊天消息。
  3. 文本嵌入模型(Embedding Model),这些模型将文本作为输入并返回浮点数列表,也就是Embedding。而文本嵌入模型如OpenAI的text-embedding-ada-002,我们之前已经见过了。文本嵌入模型负责把文档存入向量数据库,和我们这里探讨的提示工程关系不大。

使用LangChain和提示模板的好处是:

  1. 代码的可读性:使用模板的话,提示文本更易于阅读和理解,特别是对于复杂的提示或多变量的情况。
  2. 可复用性:模板可以在多个地方被复用,让你的代码更简洁,不需要在每个需要生成提示的地方重新构造提示字符串。
  3. 维护:如果你在后续需要修改提示,使用模板的话,只需要修改模板就可以了,而不需要在代码中查找所有使用到该提示的地方进行修改。
  4. 变量处理:如果你的提示中涉及到多个变量,模板可以自动处理变量的插入,不需要手动拼接字符串。
  5. 参数化:模板可以根据不同的参数生成不同的提示,这对于个性化生成文本非常有用。

输出解析

1. 输出解析的重要性

输出解析是将语言模型生成的非结构化文本转换为结构化数据的关键步骤。这一过程使得从模型输出中提取的信息可以直接被程序处理和分析,极大地提高了开发效率和数据处理的便捷性。

2. 在LangChain中实现输出解析

在LangChain框架中,通过定义ResponseSchema来指定期望从模型输出中提取的数据字段,然后利用StructuredOutputParser来解析这些字段。这个过程自动化了从文本中提取结构化信息的工作,使得开发者可以轻松地获取和使用模型的输出数据。

3. 结构化数据的应用

通过输出解析得到的结构化数据可以被存储在如DataFrame这样的数据结构中,便于进行进一步的数据处理和分析。例如,可以将数据保存为CSV文件,或者在程序中进行复杂的数据分析和计算。

4. 提高开发效率

输出解析器的使用简化了从模型输出中提取有用信息的流程,使得开发者可以专注于应用逻辑的开发,而不是手动处理文本数据。这种自动化的数据处理流程是提高基于语言模型应用开发效率的重要工具。

总结

使用LangChain框架开发基于大模型的应用程序,可以带来一系列的好处,使得整个过程更加高效、灵活和可维护。以下是LangChain框架的几个主要优势:

  1. 模板管理:LangChain提供了强大的模板管理功能,这使得在大型项目中处理多个提示模板变得更加容易。它帮助开发者保持代码的组织性和可维护性,同时也便于团队协作和模板的复用。

  2. 变量提取和检查:LangChain能够自动识别和检查模板中的变量,确保在生成提示时所有必要的变量都已被正确填充。这种自动化的检查机制提高了代码的健壮性,减少了因变量遗漏或错误导致的问题。

  3. 模型切换:LangChain允许开发者通过更改配置中的模型名称来轻松切换不同的模型,无需修改业务逻辑代码。这种灵活性使得比较不同模型的性能和输出变得简单,也方便了模型的升级和迭代。

  4. 输出解析:LangChain的输出解析功能使得从模型输出中提取结构化数据变得更加直接和便捷。这不仅提高了数据处理的效率,也使得后续的数据分析和应用逻辑更加清晰和高效。通过这些优势,LangChain框架为基于大模型的应用开发提供了一个强大而灵活的工具集,让开发者能够专注于创造创新的解决方案,而不是被技术细节所困扰。这种开发方式不仅提高了开发效率,也增强了应用程序的适应性和创造力。