原文地址:【LangChain系列 6】Prompt模版——自定义prompt模版
本文速读:
-
自定义prompt模版
LangChain提供了很多默认的prompt模版,同时LangChain提供了两种基础prompt模版:
-
字符串prompt模版
-
对话prompt模版
基于这两种模版,我们可以自定义prompt模版,自定义prompt模版有两个步骤是必不可少的:
-
要有input_variables属性,这是prompt模版对外暴露的接口,表示它需要接受输入在变量。
-
定义format方法,接受input_variables变量,然后返回一个格式化的prompt。
自定义prompt模版
下面将基于字符串prompt模版,定义一个prompt模版,实现的功能是:给定一个输入的函数名,然后输出该函数功能的prompt。
1. 创建一个函数:输入函数名字,返回函数源码
import inspect
def get_source_code(function_name):
# Get the source code of the function
return inspect.getsource(function_name)
2. 创建自定义prompt模版
from langchain.prompts import StringPromptTemplate
from pydantic import BaseModel, validator
PROMPT = """\
Given the function name and source code, generate an English language explanation of the function.
Function Name: {function_name}
Source Code:
{source_code}
Explanation:
"""
class FunctionExplainerPromptTemplate(StringPromptTemplate, BaseModel):
"""A custom prompt template that takes in the function name as input, and formats the prompt template to provide the source code of the function."""
@validator("input_variables")
def validate_input_variables(cls, v):
"""Validate that the input variables are correct."""
if len(v) != 1 or "function_name" not in v:
raise ValueError("function_name must be the only input_variable.")
return v
def format(self, **kwargs) -> str:
# Get the source code of the function
source_code = get_source_code(kwargs["function_name"])
# Generate the prompt to be sent to the language model
prompt = PROMPT.format(
function_name=kwargs["function_name"].__name__, source_code=source_code
)
return prompt
def _prompt_type(self):
return "function-explainer"
3. 使用自定义prompt模版
fn_explainer = FunctionExplainerPromptTemplate(input_variables=["function_name"])
# Generate a prompt for the function "get_source_code"
prompt = fn_explainer.format(function_name=get_source_code)
print(prompt)
执行程序,输出如下:
Given the function name and source code, generate an English language explanation of the function.
Function Name: get_source_code
Source Code:
def get_source_code(function_name):
# Get the source code of the function
return inspect.getsource(function_name)
Explanation:
本文小结
本文介绍了自定义prompt模版的两种方式:字符串prompt模版和对话prompt模版,并基于字符串prompt模版,实现了一个prompt模版:输入一个方法名,输出该方法功能的prompt。
更多最新文章,请关注公众号:大白爱爬山