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

发布于:2024-06-10 ⋅ 阅读:(170) ⋅ 点赞:(0)

预备知识

  • with_structured_output

  • bind_tools

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

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

实现方法

方法一

步骤一

# 首先,新建一个提示词抽取器
prompt_extractor = ChatPromptTemplate.from_template(
template="""
    你从用户的输入中提取出一些`关键信息`,然后根据关键信息生成一个提示词模板, 提示词模板应该是一个有效的Prompt Template。
    
    `关键信息`包含以下内容:
    
    - 找到有效的提示词的目标
    - 找到有效的要求内容
    - 找到传递给提示词模板的变量
    
    用户的输入内容是: {input}

"""
)

# 再来一个Prompt
prompt_generator = ChatPromptTemplate.from_messages(
        [
            ("system", "请根据以下输入的内容,生成一个有效的Prompt Template。"),
            ("human", "{input}"),
        ]
    )

步骤二

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

步骤三

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

步骤四

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

见效:)

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

方法二

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

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

步骤四修改为

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

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

prompt = ChatPromptTemplate.from_template(
            template=prompt_generator.content
        )

chain = prompt | model

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

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


网站公告

今日签到

点亮在社区的每一天
去签到