赞
踩
因为做AI项目的过程中,需要处理各种提示词(prompt),其中有些是固定的文本,有些是会反复修改的。如果是简单的提示词,直接用python里面的字符串format()或者replace()函数进行处理即可。对于复杂的,还是用langchain里面的提示词模板更方便。
为了方便处理llm的promt,langchain提供了提示词模板。具体文档参见官方文档:https://api.python.langchain.com/en/latest/core_api_reference.html#module-langchain_core.prompts
常见的类有BasePromptTemplate、PipelinePromptTemplate和PromptTemplate。其中BasePromptTemplate是后面2个类的基类(PromptTemplate的直接父类是StringPromptTemplate,而StringPromptTemplate的直接父类则是BasePromptTemplate)。
BasePromptTemplate中常用的方法有format(),input_variables(),partial(),save()。
PromptTemplate中常用的方法有from_file()、from_template()。
具体使用请参见下面的源码:template.txt文件中的内容如下:
- 这是一个测试用的模板文件,用于测试模板引擎的功能。
- 你叫做{ai_name},你是{ai_role},
-
- {instructions}
template.json中的文件内容如下:
- {
- "_type": "prompt",
- "input_variables": [
- "ai_name",
- "ai_role",
- "instructions"
- ],
- "template_path": "template.txt"
- }
template.py的代码如下:
- # coding: utf-8
- from langchain_core.prompts.loading import load_prompt
- from langchain_core.prompts.pipeline import PipelinePromptTemplate
- from langchain_core.prompts.prompt import PromptTemplate
-
- # 第一种情况:直接处理字符串模板
- simple_template = "这个是一个最简单的大语言模型的模板,请回答:{question}"
- simple_prompt = PromptTemplate.from_template(simple_template)
- prompt = simple_prompt.format(question="程序员节是哪一天?")
- print(f"^^^^^^^\n{prompt}\n^^^^^^^")
- # 会输出如下信息:
- """
- ^^^^^^^
- 这个是一个最简单的大语言模型的模板,请回答:程序员节是哪一天?
- ^^^^^^^
- """
-
- # 第二种情况:读取文件。load_prompt 返回的是 BasePromptTemplate
- main_prompt_template = load_prompt("template.json")
- # print(main_prompt_template)
-
- partial_variables = {}
- partial_variables["instructions"] = "按照给定的思路和上下文,回答问题。"
-
- # 将有值的变量填充到模板中
- main_prompt_template = main_prompt_template.partial(**partial_variables)
- # print(main_prompt_template)
-
- # 设置模板中的其它变量
- prompt = main_prompt_template.format(
- ai_name="胖胖",
- ai_role="智能助手机器人"
- )
- print(f"******\n{prompt}\n******")
- # 会输出:
- """
- ******
- 这是一个测试用的模板文件,用于测试模板引擎的功能。
- 你叫做胖胖,你是智能助手机器人,
- 按照给定的思路和上下文,回答问题。
- ******
- """
-
- # 第三种情况:使用PipelinePromptTemplate,可以将多个模板组合在一起
- templates = []
- task_template = """{task_description}"""
-
- task_prompt = PromptTemplate.from_template(task_template)
- templates.append(("task",task_prompt))
- print(f"task:{task_prompt.input_variables}")
-
- resources_template = """{support_resources}"""
-
- resources_prompt = PromptTemplate.from_template(resources_template)
- templates.append(("resources", resources_prompt))
- print(f"resources:{resources_prompt.input_variables}")
-
- final_template = """你的任务是:{task}
- 你可以使用的资源包括:{resources}
- """
-
- final_prompt = PromptTemplate.from_template(final_template)
- pipeline_prompt = PipelinePromptTemplate(
- final_prompt=final_prompt,
- pipeline_prompts=templates
- )
- print(f"pipeline: {pipeline_prompt.input_variables}")
-
- pipeline_prompt = pipeline_prompt.format(
- task_description="8月份的销售额是多少",
- support_resources="1. 你可以查阅本地文件列表。2. 你可以读取本地文件。"
- )
-
- print(f"======\n{pipeline_prompt}\n======")
- # 会输出:
- """
- ======
- 你的任务是:8月份的销售额是多少
- 你可以使用的资源包括:1. 你可以查阅本地文件列表。2. 你可以读取本地文件。
- ======
- """
执行:python template.py
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。