prompt第四讲-fewshot

文章目录

    • 前提回顾
    • FewShotPromptTemplate
    • foramt格式化

前提回顾

前面已经实现了一个翻译助手了[prompt第三讲-PromptTemplate],prompt模板设计中,有说明、案例、和实际的问题

# -*- coding: utf-8 -*-
"""
@Time : 2024/7/8 9:44
@Auth : leon
"""
from langchain_core.prompts import PromptTemplate
# 4. 定义部分变量
prompt_template = PromptTemplate.from_template("""
你是一个翻译助手,你擅长将{source_language}翻译为{dst_language},请将我发送给你的question的内容翻译为{dst_language},不要返回无关的内容,只需返回最终翻译结果,下面的history examples中提供了一些具体的案例,为你提供一些参考:## history examples:
question:美丽->answer:beautiful;
question:男孩->answer:boy;
question:男人->answer:man;
question:456->answer:four hundred and fifty-six;
question:1->answer:one;
question:34->answer:thirty-four;## user true task:
question:{user_input_words}->answer:
""")
lag2lag = input("你想我成为什么翻译助手(格式如:中文-英文):")
source_language,dst_language = lag2lag.split('-')
new_prompt_template = prompt_template.partial(source_language=source_language,dst_language=dst_language)
print("助手初始化完毕,您的翻译助手上线!!!")
# 2. llm定义
from langchain_community.llms import Tongyi
from pydantic_settings import BaseSettings,SettingsConfigDict"""
2,1 获取千问的key
我这么写的原因是因为方便我上传项目到github的同时,不暴露我的key,所以我把可以key保存到了最外部的一个.env文件中
这样我每一次同步到github的时候就不会把key也推出去,你们测试的时候,可以直接写成
qwen_key="sk-cc2209cec48c4bc966fb4acda169e",这样省事。
"""
class ModelConfig(BaseSettings):model_config = SettingsConfigDict(env_file="../../../.env",env_file_encoding="utf-8")qwen_key:strdeepseek_key:strdeepseek_base_url:strmodel_config = ModelConfig()
qwen_key = model_config.qwen_key
# 1. 读取配置信息,获取模型key
llm = Tongyi(dashscope_api_key=qwen_key)while(True):user_input_word = input(f"请输入需要翻译的{source_language}:")if user_input_word.lower() =="quit":breakelse:prompt = new_prompt_template.invoke({"user_input_words":user_input_word})print(llm.invoke(prompt))

FewShotPromptTemplate

下面我们换一种更加优雅的方式来实现上面的prompt模板

# -*- coding: utf-8 -*-
"""
@Time : 2024/7/9 9:44
@Auth : leon
"""
from langchain_core.prompts import PromptTemplate,FewShotPromptTemplate
example_prompt = PromptTemplate.from_template("question: {question}->answer:{answer}")
examples = [{'question':'美丽',"answer":'beautiful'},{'question':'男孩',"answer":'boy'},{'question':'男人',"answer":'man'},{'question':'456',"answer":'four'},{'question':'456',"answer":'four hundred and fifty-six'},{'question':'1',"answer":'one'},{'question':'34',"answer":'thirty-four'}
]
prefix = """
你是一个翻译助手,你擅长将{source_language}翻译为{dst_language},请将我发送给你的question的内容翻译为{dst_language},不要返回无关的内容,只需返回最终翻译结果,下面的history examples中提供了一些具体的案例,为你提供一些参考:
## history examples:
"""
suffix = """
## user true task:
question:{user_input_words}->answer:
"""
prompt_template = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,prefix=prefix,suffix=suffix,input_variables=['user_input_words','source_language','dst_language']
)lag2lag = input("你想我成为什么翻译助手(格式如:中文-英文):")
source_language,dst_language = lag2lag.split('-')
new_prompt_template = prompt_template.partial(source_language=source_language,dst_language=dst_language)from langchain_community.llms import Tongyi
from pydantic_settings import BaseSettings,SettingsConfigDict"""
2,1 获取千问的key
我这么写的原因是因为方便我上传项目到github的同时,不暴露我的key,所以我把可以key保存到了最外部的一个.env文件中
这样我每一次同步到github的时候就不会把key也推出去,你们测试的时候,可以直接写成
qwen_key="sk-cc2209cec48c4bc966fb4acda169e",这样省事。
"""
class ModelConfig(BaseSettings):model_config = SettingsConfigDict(env_file="../../../.env",env_file_encoding="utf-8")qwen_key:strdeepseek_key:strdeepseek_base_url:strmodel_config = ModelConfig()
qwen_key = model_config.qwen_key
# 1. 读取配置信息,获取模型key
llm = Tongyi(dashscope_api_key=qwen_key)while(True):user_input_word = input(f"请输入需要翻译的{source_language}:")if user_input_word.lower() =="quit":breakelse:prompt = new_prompt_template.invoke({"user_input_words":user_input_word})print(llm.invoke(prompt))

着重看一下FewShotPromptTemplate定义模板部分,他没有什么方法可以实例化对象,只支持直接实例化,而实例化
要传入的参数也不用咋说,格式一目了然
参数讲解

  1. example_prompt:你想要案例遵守的prompt模板格式
  2. examples一个案例列表,里面是多个字典,字典的key必须和example_prompt中定义的变量是统一的
  3. prefix:你想要在案例前面插入的内容,如果是接着前面的翻译助手,那这里通常就是这个助手的能力说明
  4. suffix:通常就是你想要最后插入的实际的问题的prompt模板
  5. input_variables:变量说明,这个变量来自prefix和suffix

foramt格式化

因为FewShotPromptTemplate也是继承自runnable的,所以他有的方法和变量基本和前面讲的PromptTemplate差不多,
变量可能会有些变化,但是方法基本是统一的,也是遵从(invoke,batch,stream那一套的),而invoke最底层是
调用了format,所以我只需要讲解一下format,其他的都懂了

format的原理如下:

  1. 遍历examples列表,根据example_prompt模板格式,实例化出一个prompt列表,并且以空格的形式进行拼接成一个字符串
  2. 将prefix添加到第一步得到prompt字符串前面,将suffix添加到prompt字符串后面
  3. 将输入的变量填入新的模板中,得到格式化后的prompt

其他支持的方法,和前面的PromptTemplate是一样的invoke,batch,stream等,需要注意的是,它也提供了save功能,但是
没有提供加载功能,这很奇怪。

附上筋斗云,会有完整教程和代码:https://github.com/traveler-leon/langchain-learning.git

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

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

相关文章

数据结构之单链表(赋源码)

数据结构之单链表 线性表 线性表的顺序存储结构,有着较大的缺陷 插入和删除操作需要移动大量元素。会耗费很多时间增容需要申请空间,拷贝数据,释放旧空间。会有不小的消耗即使是使用合理的增容策略,实际上还会浪费许多用不上的…

led灯什么牌子的质量好?口碑前五的led灯推荐

每每到开学季,学生们重返校园,各个家长和学生们也迎接新学期的前期准备工作,当然,用眼健康的考量也列位其中,国内的学习压力大一直是众所周知的,学生除了在学校长时间用眼外,短暂的户外休息时间…

为什么有些3d模型不能编辑?---模大狮模型网

在展览3D模型设计行业中,设计师们面临一个重要的技术挑战:为什么有些3D模型在某些情况下变得难以编辑?这一问题不仅关乎技术操作的复杂性,更深层次地影响着设计工作的效率和成果质量。本文将探讨这一问题的根本原因及其在实际工作中的具体表…

JSONObject和Map<String, Object>的转换

一、前言 Java开发中出参返回和入参传入更灵活的方法是使用Map<String, Object>入参或出参&#xff0c;或者使用JSONObject。 1、好处&#xff0c;参数可变&#xff0c;对接口扩展性很友好。 public ResponseData<WXModelDTO> getUserInfo(RequestBody Map<…

浏览器输入URL后的过程

总体流程&#xff1a; 1. 用户输入URL并按下回车 当用户在浏览器的地址栏中输入一个 URL 并按下回车&#xff0c;浏览器开始解析用户输入并判断这是一个合法的 URL。 2. DNS 解析 缓存查找&#xff1a;浏览器首先查看本地 DNS 缓存中是否有对应的 IP&#xff0c;如果有则直接…

九盾安防丨如何判断叉车是否超速?

在现代物流和生产流程中&#xff0c;叉车是提高效率和降低成本的关键工具。然而&#xff0c;叉车的高速行驶也带来了安全隐患&#xff0c;这就要求我们对其进行严格的安全管理。九盾安防&#xff0c;作为业界领先的安防专家&#xff0c;今天就为大家揭晓如何判断叉车是否超速&a…

Java高频面试基础知识点整理7

干货分享&#xff0c;感谢您的阅读&#xff01;背景​​​​​​高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09; 最全文章见&#xff1a;Java高频面试基础知识点整理 &#xff08;一&#xff09;Java基础高频知识考点 针对人员&#xff1a; 1.全部人员都…

SCI一区级 | Matlab实现NGO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测

SCI一区级 | Matlab实现NGO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测 目录 SCI一区级 | Matlab实现NGO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现NGO-CNN-LSTM-Mutilhead-Attention北方苍鹰算…

【机器学习】Exam4

实现线性不可分logistic逻辑回归 我们目前所学的都是线性回归&#xff0c;例如 y w 1 x 1 w 2 x 2 b y w_1x_1w_2x_2b yw1​x1​w2​x2​b 用肉眼来看数据集的话不难发现&#xff0c;线性回归没有用了&#xff0c;那么根据课程所学&#xff0c;我们是不是可以增加 x 3 x…

论文翻译:Large Language Models for Education: A Survey

目录 大型语言模型在教育领域的应用&#xff1a;一项综述摘要1 引言2. 教育中的LLM特征2.1. LLMs的特征2.2 教育的特征2.2.1 教育发展过程 低进入门槛。2.2.2. 对教师的影响2.2.3 教育挑战 2.3 LLMEdu的特征2.3.1 "LLMs 教育"的具体体现2.3.2 "LLMs 教育"…

linux——线程

线程概念 什么是线程&#xff1f; 在一个程序里的一个执行流叫做线程。一切进程至少有一个线程线程在进程内部运行&#xff0c;本质是在进程地址空间内运行在Linux系统中&#xff0c;在CPU眼中&#xff0c;看到的PCB都要比传统的进程更加轻量化 我们都知道在每一个进程都有属…

Ubuntu 22.04.4 LTS (linux) Auditd 安全审计rm命令 记录操作

1 audit增加rm 规则 #sudo vim /etc/audit/rules.d/audit.rules -w /bin/rm -p x -k delfile #重新启动服务 sudo systemctl restart auditd #查看规则 sudo auditctl -l -w /bin/rm -p x -k delfile 2 测试规则 touch test.txt rm test.tx 3 查看日志 sudo ausear…

Apache-Flink未授权访问高危漏洞修复

漏洞等级 高危漏洞!!! 一、漏洞描述 攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。 二、修复建议 根据业务/系统具体情况,结合如下建议做出具体选择: 配…

无人机之遥控器分类篇

一、传统遥控器 传统无人机遥控器一般包括开关键、遥控天线等基础装置。但是会随着无人机具体的应用和功能而开发不同的按键。它的信号稳定性远超对比其他遥控&#xff0c;而且遥控距离也更远&#xff08;一般遥控范围在100米或以上&#xff09;传统遥控器对于初学者来说比较难…

在uniapp中如何使用地图

1&#xff0c;技术选择 最好是使用webview html形式加载&#xff0c;避免打包app时的地图加载问题 2&#xff0c;webview使用 使用webview必须按照官方文档,官网地址&#xff1a;https://uniapp.dcloud.net.cn/component/web-view.html <template><view><!…

KNN分类算法与鸢尾花分类任务

鸢尾花分类任务 1. 鸢尾花分类步骤1.1 分析问题&#xff0c;搞定输入和输出1.2 每个类别各采集50朵花1.3 选择一种算法&#xff0c;完成输入到输出的映射1.4 第四步&#xff1a;部署&#xff0c;集成 2. KNN算法原理2.1 基本概念2.2 核心理念2.3 训练2.4 推理流程 3. 使用 skle…

elasticsearch 查询超10000的解决方案

前言 默认情况下&#xff0c;Elasticsearch集群中每个分片的搜索结果数量限制为10000。这是为了避免潜在的性能问题。 但是我们 在实际工作过程中时常会遇到 需要深度分页&#xff0c;以及查询批量数据更新的情况 问题&#xff1a;当请求form size >10000 时&#xff0c…

【FreeRTOS】IAR的FreeRTOSConfig.h中在添加头文件的问题

1、今天在\FreeRTOSConfig.h中添加个头文件&#xff0c;总是在头文件的函数定义处报错&#xff1a; Error[40]: Bad instruction 2、百度了半天也没有找到问题 3、原来是这个原因&#xff1a; IAR的Freertos中需加上一个portasm.s的驱动文件&#xff0c;而该文件需要调…

印尼Facebook直播网络需要达到什么要求?

在全球化浪潮的推动下&#xff0c;海外直播正受到企业、个人和机构的广泛关注和青睐。无论是用于营销、推广还是互动&#xff0c;海外直播为各种组织提供了更多机会和可能性。本文将探讨在进行印尼Facebook直播前&#xff0c;需要满足哪些网络条件以确保直播的质量和用户体验。…