模型I/O课程的理解与感悟| 豆包MarsCode AI刷题

74 阅读3分钟

前言

在LangChain的使用中,Model I/O具有重要意义,它主要分为输入提示调用模型输出解析,三者各司其职,不可分割。

提示模板的输入

在LangChain实战课中告诉了我们,提示模板可以给予大模型清晰明了的指示。例如,我们可以在提示模板中,根据我们想让大模型回答的问题,来给它一些提示,如果是面包店宣传语,那么就可以给大模型提示说“你是一个专业的面包广告语撰写员”,那么大模型接下来的回答就会根据这个提示来回答,这样就避免了出现回答不对题或者不够专业。

import os
from langchain.prompts import PromptTemplate

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

语言模型的运用

有了输入的提示模板告诉大模型应该怎么做之后,就需要我们调用语言模型,让大模型帮助我们写广告,并返回它的结果。在运用语言模型的时候,我们一定要记得import我们的OpenAI key和导入OpenAI模型接口,这是必不可少的,否则就无法运行。

# 设置OpenAI API Key
# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'

# 导入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(bread_name=["牛角包"], price="25")
# 得到模型的输出
output = model.invoke(input)
# 打印输出内容
print(output)

在输入上述这些代码之后运行,大模型也会非常机智地给我们很好的回答。它的回答如下:

“香酥可口的牛角包,仅售 25 元!层层酥脆,口感丰富,每一口都充满了浓郁的黄油香气,让人回味无穷。无论是早餐搭配咖啡,还是下午茶的甜点,这款牛角包都是您的最佳选择!快来品尝吧!”

输出解析

如果想要从大模型的回答中获取结构化的信息,那么我们就可以通过LangChain的输出解析器来重构程序,让模型有能力生成结构化的回应,同时对其进行解析。在LangChain实战课中已有详细的代码示例,而下面的代码是我认为相对重要的

# 创建输出解析器
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}) 

总结

模型I/O的运用大大便利了我们,而面对不同的问题,我们不需要重新写代码,只需要修改提示模板,并且将后续代码中的一些需要改成新问题信息的代码修改一下就可以了。这次课程给了我极大的收获,使我对LangChain有了更进一步的认识,希望这篇笔记可以有所帮助!