Langchain提供了PromptTemplates提示文本技术,可以大大降低模型设计、调试和优化成本。这是一种可复制的生成prompt的方式,包含一个文本字符串,可以接收来自终端用户的一组参数,并生成prompt。

PromptTemplates可以包含指令、少量实例和一个向语言模型提出的问题。通过使用该技术,可以指导语言模型生成更高质量的文本,从而更好的完成任务。

1.prompt模板

如果每次用户要输入很多内容相似的prompt,可以考虑创建一个prompt模板。示例代码如下:

from longchain.prompts import PrompeTemplate
template="""创建一个适配{product}的模板,具体信息为{info}"""

prompt = PromptTemplate(
	input_variables=["product","info"],
  template=template,
)

prompt.format(product="机器人",info="A-434")
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

预设模板可以保存+载入:

prompt.save("test_prompt.json")
from langchain.prompts.loading import load_prompt
prompt_load = load_prompt("test_prompt.json")
print(prompt_load.format(product="测试机械",info="HB2-sda23")
  • 1.
  • 2.
  • 3.
  • 4.

2.微调大模型,传递给LLM终端回答

首先把前节创建的ChatGLM引入进来:

llm = llm_chatglm.ChatGLM()  #按照自己的python文件命名修改llm_chatglm
  • 1.

给LLM零学习样本,以便于LLM更加准确的回答问题,这个过程称为微调。

下面使用prompt的小样本模版来训练LLM。

以下示例要求根据用户输入的词语,LLM对应输出反义词。

首先定义两组输入输出的例子:

from langchain.prompts import PromptTemplate,FewShotPromptTemplate
examples = [{"input":"高兴","output":"悲伤"},{"input":"高大","output":"低矮"}]
example_prompt = PromptTemplate(input_variables=["input","output"],template="\n输入:{input} \n输出:{output}")
print(example_prompt)
  • 1.
  • 2.
  • 3.
  • 4.

然后将它们组建成小样本学习的模板对象:

few_shot_prompt = FewShotPromptTemplate(
    examples = examples,
    example_prompt=example_prompt,
    input_variables=["input"],
    prefix="给出每个输入词语的反义词",
    suffix="输入:{input}\n输出:",
    example_separator="\n",
)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

最后,在LangChain对接LLM时使用自定义小样本提示语模板,这样LLM可以根据模板格式和要求来返回对应的内容:

chain = LLMChain(llm=llm,prompt=few_shot_prompt)
print(chain.run("高冷"))
print(chain.run("美丽"))
  • 1.
  • 2.
  • 3.

输出结果如下:

prompt模板创建与LLM微调_prompt