04_提示模板上
由于版本更新之类的问题,会导致代码运行不出来,这里是改好的代码
1. BaseChatModel.__call__ 被弃用
错误信息提示 BaseChatModel.__call__ 在 langchain-core 0.1.7 版本中已被弃用,并将在 1.0 版本中移除。你应该使用 invoke 方法代替。这意味着你需要将 model(prompt.format(flower_type="野玫瑰", occasion="爱情")) 替换为 model.invoke(prompt.format(flower_type="野玫瑰", occasion="爱情"))。
2. 导入 Qdrant 和 OpenAIEmbeddings 被弃用
OpenAIEmbeddings 类被弃用
错误信息提示 OpenAIEmbeddings 类在 LangChain 0.0.9 版本中已被弃用,并将在 1.0 版本中移除。
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import Qdrant
from langchain_openai import OpenAIEmbeddings
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
# 1. 创建一些示例
samples = [
{
"flower_type": "玫瑰",
"occasion": "爱情",
"ad_copy": "玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。"
},
{
"flower_type": "康乃馨",
"occasion": "母亲节",
"ad_copy": "康乃馨代表着母爱的纯洁与伟大,是母亲节赠送给母亲的完美礼物。"
},
{
"flower_type": "百合",
"occasion": "庆祝",
"ad_copy": "百合象征着纯洁与高雅,是你庆祝特殊时刻的理想选择。"
},
{
"flower_type": "向日葵",
"occasion": "鼓励",
"ad_copy": "向日葵象征着坚韧和乐观,是你鼓励亲朋好友的最好方式。"
}
]
# 2. 创建一个提示模板
prompt_sample = PromptTemplate(input_variables=["flower_type", "occasion", "ad_copy"],
template="鲜花类型: {flower_type}\n场合: {occasion}\n文案: {ad_copy}")
print(prompt_sample.format(**samples[0]))
# 3. 创建一个FewShotPromptTemplate对象
prompt = FewShotPromptTemplate(
examples=samples,
example_prompt=prompt_sample,
suffix="鲜花类型: {flower_type}\n场合: {occasion}",
input_variables=["flower_type", "occasion"]
)
print(prompt.format(flower_type="野玫瑰", occasion="爱情"))
# 4. 把提示传递给大模型
model = ChatOpenAI(
openai_api_key="sk-j1****************************************4938f3f",
openai_api_base="https://free.v36.cm/v1/",
model="gpt-3.5-turbo")
result = model.invoke(prompt.format(flower_type="百合", occasion="庆祝"))
print(result)
实战课8
到目前为止,我们已经使用了哪些LangChain输出解析器?它们的用法和异同。
- Pydantic(JSON)解析器:这个解析器用于处理模型的输出,当模型的输出应该是一个符合特定格式的JSON对象时使用。它使用Pydantic库,这是一个数据验证库,可以用于构建复杂的数据模型,并确保模型的输出符合预期的数据模型。
- 自动修复解析器(OutputFixingParser) :这个解析器可以自动修复某些常见的模型输出错误,例如格式错误。它会调用另一个LLM来修复任何错误。
- 重试解析器(RetryWithErrorOutputParser) :这个解析器用于在模型的初次输出不符合预期时,尝试修复或重新生成新的输出。
异同点:
- Pydantic(JSON)解析器提供了对复杂数据结构和类型的支持,适合处理结构化的JSON数据。
- 自动修复解析器和重试解析器都旨在修正输出中的错误,但自动修复解析器更倾向于处理格式错误,而重试解析器可以处理更复杂的问题,包括内容缺失和格式错误。
为什么大模型能够返回JSON格式的数据,输出解析器用了什么魔法让大模型做到了这一点?
大模型能够返回JSON格式的数据,主要是因为在生成提示(prompt)时,我们已经明确指示模型输出应该符合的格式。输出解析器通过get_format_instructions方法提供了格式化指令,这些指令被嵌入到提示中,指导模型按照指定的JSON格式输出数据。
自动修复解析器的“修复”功能具体来说是怎样实现的?
自动修复解析器的“修复”功能是通过包装另一个输出解析器实现的。如果第一个解析器失败,它会调用另一个LLM来修复任何错误。具体来说,它会将格式错误的输出以及格式化的指令传递给大模型,并要求LLM进行相关的修复。
重试解析器的原理是什么?它主要实现了解析器类的哪个可选方法?
重试解析器的原理是在模型的初次输出不符合预期时,尝试修复或重新生成新的输出。它主要实现了解析器类的parse_with_prompt这个可选方法,这个方法接收一个字符串(模型的输出)和一个提示(用于生成这个输出的提示),并将其解析为特定的数据结构。