with_structured_output
bind_tools
对这两种方式不了解的朋友,可以翻阅我的这篇文章找到用法哈
- # 首先,新建一个提示词抽取器
- 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会帮你自动“润色”你的提示词
不过,你可以仔细想想,用这种方式可以去做哪些特别有趣的事情呢?: )