04LangChain实战课 - LangChain中的模型及其应用开发

发布于:2024-11-04 ⋅ 阅读:(48) ⋅ 点赞:(0)

LangChain实战课 - LangChain中的模型及其应用开发

LangChain与大语言模型(LLM)应用开发

在LangChain框架中,模型是核心元素,它驱动整个框架的逻辑。LangChain应用开发本质上是通过API调用大模型来解决具体问题的过程。今天,我们将深入探讨LangChain中的模型,特别是如何利用模型I/O(Input/Output)来构建应用程序。

模型I/O(Model I/O)

模型I/O包括三个环节:输入提示(Format)、调用模型(Predict)和输出解析(Parse)。这三个环节构成了调用语言模型的整体流程。

  1. 提示模板(Prompt Template):这是模型I/O的第一个环节,它涉及到将提示信息输入到模型中。LangChain提供了模板,可以根据实际需求动态选择不同的输入,针对特定任务和应用调整输入。

  2. 语言模型调用(Language Model):LangChain允许通过通用接口调用语言模型,提高了灵活性和便利性。

  3. 输出解析(Output Parsing):LangChain提供了从模型输出中提取信息的功能,可以将非结构化文本转换成程序可以处理的结构化数据。

提示模板(Prompt Template)

提示模板是LangChain中的一个重要概念,它涉及到“提示工程”(Prompt Engineering),即专门研究如何构建对大语言模型的提示。

以下是创建一个简单的LangChain提示模板的示例代码:

from langchain.prompts import PromptTemplate

template = """您是一位专业的鲜花店文案撰写员。
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?"""
prompt = PromptTemplate.from_template(template) 
print(prompt)

在这个模板中,{flower_name}{price} 是占位符,在实际使用时会被具体的值替换。

语言模型调用

LangChain支持多种模型,包括大语言模型(LLM)、聊天模型(Chat Model)和文本嵌入模型(Embedding Model)。以下是使用LangChain调用OpenAI模型的示例代码:

import os
from langchain_openai import OpenAI

os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
model = OpenAI(model_name='gpt-3.5-turbo-instruct')

input = prompt.format(flower_name=["玫瑰"], price='50')
output = model.invoke(input)
print(output)
输出解析(Output Parsing)

LangChain的输出解析功能可以帮助从模型输出中提取结构化信息。以下是使用LangChain输出解析器的示例代码:

from langchain.output_parsers import StructuredOutputParser, ResponseSchema

response_schemas = [
    ResponseSchema(name="description", description="鲜花的描述文案"),
    ResponseSchema(name="reason", description="为什么这样写文案")
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate.from_template(prompt_template, partial_variables={"format_instructions": format_instructions}) 

# ... 省略部分代码 ...

parsed_output = output_parser.parse(output)
print(parsed_output)

在这个示例中,我们定义了期望的响应模式,并创建了一个输出解析器。然后,我们将输出解析器的说明集成到提示模板中,以便模型生成结构化的输出。

总结

通过今天的课程,我们学习了如何在LangChain中使用模型I/O来构建应用程序。我们了解了如何创建提示模板、调用语言模型以及解析模型输出。这些技能对于基于大模型的应用开发至关重要。

使用LangChain框架的好处包括:

  • 模板管理:帮助管理多个提示模板,保持代码清晰整洁。
  • 变量提取和检查:自动提取模板中的变量并进行检查。
  • 模型切换:方便地切换不同的模型,无需修改代码。
  • 输出解析:提示模板可以嵌入输出格式的定义,方便后续处理。

在下节课中,我们将继续深入探索LangChain中的提示模板,学习如何通过高质量的提示工程让模型创造出更精准、更高质量的输出。

思考题
  1. LangChain调用大语言模型的优势:LangChain提供了模板管理、变量提取和检查、模型切换和输出解析等功能,使得基于大模型的应用开发更加高效和方便。

  2. 输出格式(format_instructions)的构建和传递:输出格式是通过输出解析器构建的,并传递到提示模板中,以便模型生成结构化的输出。

  3. 模型生成结构化输出的可能性:即使加入了输出解析器,模型也有可能返回格式不够完美的输出,因为模型的生成结果受到多种因素的影响。

  4. 输出解析器的使用:使用输出解析器后,调用模型时有可能得不到所希望的输出,因为模型的输出受到模型训练、提示模板和上下文等多种因素的影响。

通过今天的课程,我们深入了解了LangChain中的模型及其应用开发,希望这些知识能够帮助你更好地利用大模型构建应用程序。如果你有任何问题或需要进一步的讨论,欢迎在留言区分享你的想法。