【LangChain系列 6】Prompt模版——自定义prompt模版

news2024/11/18 19:30:36

原文地址:【LangChain系列 6】Prompt模版——自定义prompt模版

本文速读:

  • 自定义prompt模版

LangChain提供了很多默认的prompt模版,同时LangChain提供了两种基础prompt模版:

  • 字符串prompt模版

  • 对话prompt模版

基于这两种模版,我们可以自定义prompt模版,自定义prompt模版有两个步骤是必不可少的:

  1. 要有input_variables属性,这是prompt模版对外暴露的接口,表示它需要接受输入在变量。

  2. 定义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。

 更多最新文章,请关注公众号:大白爱爬山

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1-5 AUTOSAR数据交换文件ARXML

目录 一、Arxml文件 二、各类ARXML文件 一、Arxml文件 arxml文件是AUTOSAR(Automotive Open System Architecture)标准定义的XML文件,用于描述汽车电子系统中的软件组件、通信接口和参数配置等信息。 arxml文件的主要作用是在AUTOSAR架构下…

秋招,面试被问麻了....

前几天组了一个软件测试面试的群,没想到效果直接拉满,看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经,感觉非常有参考价值,于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋,打开…

使用STATCOM对电力系统进行潮流分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

遥感数据与作物模型同化技术应用

基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具,可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系,为不同条件下作物生长发育及产量预测、栽培管理、环境评价以及未来气候变化评估等提供了…

使用k8s helm离线部署spark-operator(私有仓库)

制作镜像 docker pull ghcr.io/googlecloudplatform/spark-operator:v1beta2-1.3.8-3.1.1 docker images docker save ImageID > ./spark.tar将制作的镜像上传到目的机器中&#xff0c;加载镜像 docker load < ./spark.tar打标签其中xxxx.xxx/xx/为私有仓库的地址 doc…

计算机视觉 01(介绍)

一、深度学习 1.1 人工智能 1.2 人工智能&#xff0c;机器学习和深度学习的关系 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的一个子集&#xff0c;也就是说深度学习是实现机器学习的一种方法。与机器学习算法的主要区别如下图所示[参考&#xff1a;黑…

ROS_TF

tf:坐标系相关 rostopic type /tf rosrun rqt_tf_tree rqt_tf_treehector maping 不使用里程计修正误差 gmapping 考虑里程计修正的误差

Windows 可以使用以下快捷键打开终端(命令提示符)

Windows 可以使用以下快捷键打开终端&#xff08;命令提示符&#xff09; 使用快捷键 Win R 打开 “运行” 对话框&#xff0c;然后输入 “cmd” 并按下 Enter 键。这将打开默认的命令提示符窗口。 使用快捷键 Ctrl Shift Esc 打开任务管理器&#xff0c;然后在 “文件” …

GO语言网络编程(并发编程)GMP原理与调度

GO语言网络编程&#xff08;并发编程&#xff09;GMP原理与调度 1、GMP 原理与调度 1.1.1. 一、Golang “调度器” 的由来&#xff1f; (1) 单进程时代不需要调度器 我们知道&#xff0c;一切的软件都是跑在操作系统上&#xff0c;真正用来干活 (计算) 的是 CPU。早期的操作…

环境扫描/透射电子显微镜气体样品架的真空压力和微小流量控制解决方案

摘要&#xff1a;针对环境扫描/透射电子显微镜对样品杆中的真空压力气氛环境和流体流量精密控制控制要求&#xff0c;本文提出了更简单高效和准确的国产化解决方案。解决方案的关键是采用动态平衡法控制真空压力&#xff0c;真空压力控制范围为1E-03Pa~0.7MPa&#xff1b;采用压…

数据结构与算法课后题-第二章

第二章 01题目&#xff0c;存储相对紧凑&#xff0c;所以存储的密度大。 04题目&#xff0c;顺序表可以按照序号随机存取&#xff0c;时间的复杂度为O(1)。 第7题目分析 #include <iostream> using namespace std;#define MaxSize 50 typedef int ElemType; typedef…

雅思口语 23九月换题季最新考题答案

目录 Helping others 1.Do you usually help people around you? 2.How do you help people around you,such as neighbours,family and friends? 3.Do your parents teach you how to help others? 4.Did your parents help you a lot when you were young? 5.What …

mysql redo 日志 、 undo 日志 、binlog

事务四大特性 ACID 原子性 、一致性、隔离性、持久性 事务的隔离性由锁机制实现 事务的原子性、一致性、持久性由事务的redo 日志 和 undo 日志 保证 redo log 是存储引擎层&#xff08;innodb&#xff09;生成的日志&#xff0c;记录的是物理级别上的页修改操作&#xff0c;…

2.13 PE结构:实现PE代码段加密

代码加密功能的实现原理&#xff0c;首先通过创建一个新的.hack区段&#xff0c;并对该区段进行初始化&#xff0c;接着我们向此区段内写入一段具有动态解密功能的ShellCode汇编指令集&#xff0c;并将程序入口地址修正为ShellCode地址位置处&#xff0c;当解密功能被运行后则可…

js中如何实现字符串去重?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Set 数据结构⭐ 使用循环遍历⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感…

Python自动化测试(1)-自动化测试及基本技术手段概述

生产力概述 在如今以google为首的互联网时代&#xff0c;软件的开发和生产模式都已经发生了变化&#xff0c; 在《参与感》一书提到&#xff1a;某位从微软出来的工程师很困惑&#xff0c;微软在google还有facebook这些公司发展的时候&#xff0c;为何为感觉没法有效还击&…

Android性能监测

1.使用adb top可以查看当前Android设备的CPU和内存&#xff08;mem&#xff09;使用情况 adb shell top打印的信息如下&#xff1a; PID 表示进程号 USER 表示进程所属用户组 PR 进程的优先级&#xff0c;值越小&#xff0c;优先级越高 NI 进程的nice值&#xff0c;决定了CPU…

SpringMVC实现文件上传和下载

目录 前言 一. SpringMVC文件上传 1. 配置多功能视图解析器 2. 前端代码中&#xff0c;将表单标记为多功能表单 3. 后端利用MultipartFile 接口&#xff0c;接收前端传递到后台的文件 4. 文件上传示例 1. 相关依赖&#xff1a; 2. 逆向生成对应的类 3. 后端代码&#xf…

python-turtle库

turtle库 turtle.done() - - - done函数让窗口进入消息循环&#xff0c;等待关闭 设置画布大小和位置 turtle.screensize(canvwidthNone, canvheightNone, bgNone) 画布的宽高背景颜色 turtle.setup(width0.5, height0.75, startxNone, startyNone) 宽高为整数时表示像素&…

leetcode第362场周赛

2848. 与车相交的点 核心思想&#xff1a;差分数组。统计覆盖区间&#xff0c;把nums中有的区间1&#xff0c;维护区间我们用差分数组&#xff0c;然后求出差分数组的前缀和即是我们维护的区间&#xff0c;判断区间有哪些值是大于0的即可。 2849. 判断能否在给定时间到达单元格…