LangChain04课问题解决和08课问题回答 |豆包MarsCode AI刷题

115 阅读4分钟

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)

image.png

实战课8

到目前为止,我们已经使用了哪些LangChain输出解析器?它们的用法和异同。

  1. Pydantic(JSON)解析器:这个解析器用于处理模型的输出,当模型的输出应该是一个符合特定格式的JSON对象时使用。它使用Pydantic库,这是一个数据验证库,可以用于构建复杂的数据模型,并确保模型的输出符合预期的数据模型。
  2. 自动修复解析器(OutputFixingParser) :这个解析器可以自动修复某些常见的模型输出错误,例如格式错误。它会调用另一个LLM来修复任何错误。
  3. 重试解析器(RetryWithErrorOutputParser) :这个解析器用于在模型的初次输出不符合预期时,尝试修复或重新生成新的输出。

异同点

  • Pydantic(JSON)解析器提供了对复杂数据结构和类型的支持,适合处理结构化的JSON数据。
  • 自动修复解析器重试解析器都旨在修正输出中的错误,但自动修复解析器更倾向于处理格式错误,而重试解析器可以处理更复杂的问题,包括内容缺失和格式错误。

为什么大模型能够返回JSON格式的数据,输出解析器用了什么魔法让大模型做到了这一点?

大模型能够返回JSON格式的数据,主要是因为在生成提示(prompt)时,我们已经明确指示模型输出应该符合的格式。输出解析器通过get_format_instructions方法提供了格式化指令,这些指令被嵌入到提示中,指导模型按照指定的JSON格式输出数据。

自动修复解析器的“修复”功能具体来说是怎样实现的?

自动修复解析器的“修复”功能是通过包装另一个输出解析器实现的。如果第一个解析器失败,它会调用另一个LLM来修复任何错误。具体来说,它会将格式错误的输出以及格式化的指令传递给大模型,并要求LLM进行相关的修复。

重试解析器的原理是什么?它主要实现了解析器类的哪个可选方法?

重试解析器的原理是在模型的初次输出不符合预期时,尝试修复或重新生成新的输出。它主要实现了解析器类的parse_with_prompt这个可选方法,这个方法接收一个字符串(模型的输出)和一个提示(用于生成这个输出的提示),并将其解析为特定的数据结构。