• LangChain实战技巧之五:让模型“自动生成”Prompt(提示词)的两种方式


    预备知识

    • with_structured_output

    • bind_tools

    对这两种方式不了解的朋友,可以翻阅我的这篇文章找到用法哈

    LangChain实战技巧之三:关于Tool的一点拓展

    实现方法

    方法一

    步骤一

    1. # 首先,新建一个提示词抽取器
    2. prompt_extractor = ChatPromptTemplate.from_template(
    3. template="""
    4. 你从用户的输入中提取出一些`关键信息`,然后根据关键信息生成一个提示词模板, 提示词模板应该是一个有效的Prompt Template。
    5. `关键信息`包含以下内容:
    6. - 找到有效的提示词的目标
    7. - 找到有效的要求内容
    8. - 找到传递给提示词模板的变量
    9. 用户的输入内容是: {input}
    10. """
    11. )
    12. # 再来一个Prompt
    13. prompt_generator = ChatPromptTemplate.from_messages(
    14. [
    15. ("system", "请根据以下输入的内容,生成一个有效的Prompt Template。"),
    16. ("human", "{input}"),
    17. ]
    18. )

    步骤二

    1. # 用好Pydantic,记得继承BaseModel
    2. class PromptExtractor(BaseModel):
    3. object: str = Field(description="提示词目标")
    4. requirement: str = Field(description="提示词要求")
    5. input_variable: str = Field(description="提示词变量")

    步骤三

    1. # 来个你熟悉的chain,记得加上with_structured_output
    2. chain_extractor = prompt_extractor | model.with_structured_output(PromptExtractor)

    步骤四

    1. prompt_generator = chain_generator.invoke({"input":
    2. f"""提示词目标:{res_extractor.object}
    3. 提示词要求:{res_extractor.requirement}
    4. placeholder:{res_extractor.input_variable}"""})

    见效:)

    content='"寻找一份深度解析并以易于理解方式讲解最新AI技术和人工智能基础知识的学习资料,要求内容深入浅出且详尽,适合初学者和进阶学习者。{input}"' 
    

    方法二

    需要把上面的步骤三修改为

    chain_extractor = prompt_extractor | model.bind_tools(tools=[PromptExtractor])
    

    步骤四修改为

    1. prompt_generator = chain_generator.invoke({"input":
    2. f"""提示词目标:{rres_extractor.tool_calls[0]["args"]["object"]}
    3. 提示词要求:{res_extractor.tool_calls[0]["args"]["requirement"]}
    4. placeholder:{res_extractor.tool_calls[0]["args"]["input_variable"]}"""})

    最后,我们就可以用这个生成好的提示词啦

    1. prompt = ChatPromptTemplate.from_template(
    2. template=prompt_generator.content
    3. )
    4. chain = prompt | model

    简言之,当你写的提示词Prompt不够完美,AI会帮你自动“润色”你的提示词

    不过,你可以仔细想想,用这种方式可以去做哪些特别有趣的事情呢?: )

  • 相关阅读:
    React实战过程的知识了解
    SVN使用总结
    [每周一更]-(第70期):常用的GIT操作命令
    13 Python使用Json
    【python】虚拟环境管理
    Qt中的JSON支持
    Three.js添加阴影和简单后期处理
    线性代数学习笔记7-2:矩阵对角化、求矩阵的幂、求一阶差分方程和Fibonacci数列(特征值的应用)
    React82_useCallback()
    矩阵相乘详解
  • 原文地址:https://blog.csdn.net/soukingang/article/details/139513208