AI实践记录02 模型IO三两事 | 豆包MarsCode AI刷题

65 阅读4分钟

回顾与复习

在前几天,我开启为期一月的LangChain实战课。借助掘金社区虚拟环境,实现与AI在python的首次交流,体会到LangChain简洁。还学习了Text、Chat模型关键参数及调用方法,对两模型有了初步掌握,算是开了个好头。

模型IO浅析

模型使用过程可被拆为输入提示、调用模型、输出解析三块,在 LangChain 中统称 Model I/O。其各环节均提供模板与工具以形成调用语言模型接口。提示模板可按需动态选输入;语言模型可通过通用接口调用,提升灵活性;输出解析能提取所需信息,还可将大模型输出的非结构化文本转为结构化数据。

提示模板

众所周知,语言模型是由大数据训练而来,因此它本身就具有丰富的内容,那么,我们要如何让它更“聪明”地回应我们呢?这就需要我们构建更加好的提示模板。那其中的具体原则,不外乎吴恩达老师说的:

  1. 给予模型清晰明确的指示
  2. 让模型慢慢地思考

因此就要生成一个好的模板,那么生成它的代码如下:

import os
from langchain.prompts import PromptTemplate

# 创建原始模板
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)
# 打印LangChain提示模板的内容
print(prompt)

语言模型

生成一个模板之后,就可以将它传入模型了。LangChain中支持的模型有三大类。大语言模型(LLM)是 本次学习中的主要使用模型 然后,我们将调用语言模型,让模型帮我们写文案,并且返回文案的结果。

# 导入LangChain中的OpenAI模型接口
from langchain_openai import OpenAI, ChatOpenAI

# 创建模型实例
# model = OpenAI(model_name='gpt-3.5-turbo-instruct')
model = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
# 输入提示
input = prompt.format(flower_name=["玫瑰"], price="50")
# 得到模型的输出
output = model.invoke(input)
# 打印输出内容
print(output)

深入思考能发现LangChain的优势:定义一次模板就能生成多种不同提示。与单纯用f-string格式化文本相比,更简洁且易维护。而且LangChain的提示模板还整合了output_parser、template_format、是否验证template等功能。

总的来说,共有五个好处:

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

输出解析

LangChain提供的解析模型输出的功能,使你能够更容易地从模型输出中获取结构化的信息,这将大大加快基于语言模型进行应用开发的效率。

简单的说,就是能够帮助你将一整条信息进行分类存储,以下是一个例子

A:“文案是:让你心动!50元就可以拥有这支充满浪漫气息的玫瑰花束,让TA感受你的真心爱意。为什么这样说呢?因为爱情是无价的,50元对应热恋中的情侣也会觉得值得。”

上面的回答并不是我们在处理数据时所需要的,我们需要的是一个类似于下面的Python字典。

B:{description: "让你心动!50元就可以拥有这支充满浪漫气息的玫瑰花束,让TA感受你的真心爱意。" ; reason: "因为爱情是无价的,50元对应热恋中的情侣也会觉得值得。"}

代码这里不再赘述

总结

在这节课中,主要学习了模型IO的三个方面,分别是提示模板,语言模型,输出解析,而使用 LangChain 框架具有以下优势:

  • 模板管理:在大型项目里能有效管理众多不同提示模板,维持代码清晰整洁。
  • 变量提取与检查:可自动提取模板变量并检查,避免遗漏填充变量情况。
  • 模型切换:若尝试更换不同模型,仅需改动模型名称,无需修改代码。
  • 输出解析:提示模板能嵌入输出格式定义,便于后续处理格式化后的输出。

并且下节课会继续深入探究 LangChain 中的提示模板,探索如何借助高质量提示工程促使模型输出更精准、更高质量的内容。