prompt第二讲-langchain实现中英翻译助手

news2024/9/23 11:22:15

文章目录

    • prompt模板 (prompt template)
    • langchain 中的prompt模板 (prompt template)
    • langchain实现中英翻译助手

prompt模板 (prompt template)

开篇我介绍了在llm中,通常输入的那个字符串会被我们称之为prompt,下面就是一个中英文翻译助手的prompt例子

你是一个翻译助手,你擅长将中文翻译为英文,请将我发送给你的question的内容翻译为英文,不要返回无关的内容,只需返回最终翻译结果,下面的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:123->answer:

也就是说不管怎样,你最终给模型一定是上面这一大串东西,你如果要翻译“扑街”,只是把最底部的question替换掉

你是一个翻译助手,你擅长将中文翻译为英文,请将我发送给你的question的内容翻译为英文,不要返回无关的内容,只需返回最终翻译结果,下面的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:123->answer:

但是如果你真的要开发一个中英文翻译助手给用户使用的时候,不可能每一次都让用户完整重写这一大堆的东西吧,我们希望的是用户只输入他想要翻译的中文,我们在后台把他输入的内容
根据设定的模板填入,最终将填充后的内容发送给llm

你是一个翻译助手,你擅长将中文翻译为英文,请将我发送给你的question的内容翻译为英文,不要返回无关的内容,只需返回最终翻译结果,下面的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:

用户没输入时,我们定义好的这个模板,就叫做prompt模板(prompt template),当用户输入内容后这个内容会替换掉模板中的user_input_words,替换后的完整内容就是一个
prompt,这个prompt就是要传入到llm的字符串。

总结:prompt template就是具有一定变量(1个或多个)的字符串,这些变量是运行时用户输入的。用户输入后构成的完整字符串才被叫做prompt

langchain 中的prompt模板 (prompt template)

在langchain中,提供了定义prompt template的能力,而prompt template接受用户内容后生产出来的内容叫做prompt value,这里的prompt value为什么不直接叫做prompt,是因为
它和llm需要的prompt(字符串)还有点区别,之所以有区别,是因为在langchain设计了两种模型大类,一种是llm,另一种是chatmodel,llm的输入是接收字符串的,这也就是我前面说的prompt了,
而chatmodel接受的是message的,所以二者所需要的数据格式是不一样的。langchain为了兼容这两种模型大类,langchian的prompt template生产出的内容是prompt value,而prompt value好
处就是既可以转为llm需要的字符串形式,也可以转为chatmodel需要的message形式,这就很方便了。
在这里插入图片描述

注:上面虽然说chatmodel需要的是message类型的数据,但是底层chatmodel调用的也是llm,自然输入的内容最终也是会转成字符串的,这么设计也是有原因的,后面会一一讲出

langchain实现中英翻译助手

下面就用langchain实现中英翻译助手

# -*- coding: utf-8 -*-
"""
@Time : 2024/7/8 9:44
@Auth : leon
"""
from langchain_core.prompts import PromptTemplate
# 1. prompt模板定义
prompt_template = PromptTemplate.from_template("""
你是一个翻译助手,你擅长将中文翻译为英文,请将我发送给你的question的内容翻译为英文,不要返回无关的内容,只需返回最终翻译结果,下面的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:
""")

# 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:str
    deepseek_key:str
    deepseek_base_url:str

model_config = ModelConfig()
qwen_key = model_config.qwen_key
# 1. 读取配置信息,获取模型key
llm = Tongyi(dashscope_api_key=qwen_key)


while(True):
    user_input_words = input("请输入需要翻译的内容:")
    if user_input_words.lower() =="quit":
        break
    else:
        prompt = prompt_template.invoke({"user_input_words":user_input_words})
        print(llm.invoke(prompt))

讲解:

  1. 调用PromptTemplate.from_template产生一个prompt 模板(这个模板只需要定义一次,也就是说prompt 模板只有一个)
  2. 调用Tongyi得到一个llm模型,这里的key需要你去阿里官网申请
  3. 循环接收用户的输入,每输入一次,就会根据输入内容填充到模板中,得到一个具体的prompt,然后将这个prompt传递给llm(也就是说prompt是不唯一,每次用户输入后填充到模板中得到的prompt总是不一样的)

总结
4. prompt模板(prompt template)只有一个,只需定义一次;
5. prompt是多个的,用户每输入一次,输入变量填充到prompt模板中得到的就是一个新的prompt

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

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

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

相关文章

使用F1C200S从零制作掌机之USB从机

OTG做从机,实现使用RNIDS功能访问网络,实现模拟成U盘PC可访问。 最后实现OTG的软件主从切换。 一、RNDIS 设备树的otg模式先设置为:peripheral &usb_otg {dr_mode "peripheral"; /* otg host peripheral */status "…

基于springboot+vue+uniapp的超市购物系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

Android Studio启动报错:The emulator process for AVD Pixel_5_API_30 has terminated

Android Studio启动AVD报错: The emulator process for AVD Pixel_5_API_30 has terminated. 原因:安装时使用自定义安装后,修改了默认安装目录。 而avd文件默认在 C:\Users\用户名\.android 目录下。所以导致打开AVD时报错。 解决方法&am…

WIFI连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下,如何使用阿里云物联网平台,创建一个简单的远程控制小灯示例。 1 实现功能…

数据结构——考研笔记(二)线性表的定义和线性表之顺序表

文章目录 二、线性表2.1 定义、基本操作2.1.1 知识总览2.1.2 线性表的定义2.1.3 线性表的基本操作2.1.4 知识回顾与重要考点 2.2 顺序表2.2.1 知识总览2.2.2 顺序表的定义2.2.3 顺序表的实现——静态分配2.2.4 顺序表的实现——动态分配2.2.5 知识回顾与重要考点2.2.6 顺序表的…

计算机网络——常见问题汇总

1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…

Perl语言之数组

Perl数组可以存储多个标量,并且标量数据类型可以不同。   数组变量以开头。访问与定义格式如下: #! /usr/bin/perl arr("asdfasd",2,23.56,a); print "输出所有:arr\n"; print "arr[0]$arr[0]\n"; #输出指定下标 print…

Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用

目录 开始 Prometheus 介绍 基本原理 组件介绍 下文部署组件的工作方式 Prometheus 生态安装(Mac) 安装 prometheus 安装 grafana 安装 node_exporter Prometheus 生态安装(Docker) 安装 prometheus 安装 Grafana 安装…

excel 百分位函数 学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…

FFmpeg开发环境搭建

FFmpeg是音视频开发必备的库,也是唯一的库。本文主要讲解在ubuntu22和macOS14环境下的编译安装。 为什么要自己编译呢?其中一个很重要的原因就是ffmpeg在编译时可以加入很多插件,这种特定的库网络上可能找不到编译好的版本,另外如…

快速使用BRTR公式出具的大模型Prompt提示语

Role:文章模仿大师 Background: 你是一位文章模仿大师,擅长分析文章风格并进行模仿创作。老板常让你学习他人文章后进行模仿创作。 Attention: 请专注在文章模仿任务上,提供高质量的输出。 Profile: Author: 一博Version: 1.0Language: 中文Descri…

元器件基础学习笔记——磁珠

一、磁珠的作用及构造 1.1 磁珠的作用 磁珠是一种用于抑制高频噪声的被动电子组件,通常由铁氧体材料制成,这种材料具有高电阻率和高磁导率,使其能够在高频下有效地将干扰信号以热能的形式消耗掉。在电路设计中,磁珠被广泛用于信号…

【计算机毕业设计】003基于weixin小程序教学辅助

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【RabbitMQ】一文详解消息可靠性

目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…

JavaScript进阶(三)---声明函数、调用函数、匿名函数、箭头函数、构造函数,自执行函数

目录 1. 声明函数: 2. 调用函数 3. 匿名函数 4. 箭头函数 箭头函数this使用案例: 5. 构造函数 构造函数的特点: 构造函数与普通函数的区别: 注意事项: 6.自执行函数 JavaScript是一种广泛使用的编程语言&…

15 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(二)

15 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(二) 0. 引言1. 关于m_geodesic2. 关于mygrid_sand23. 结语 0. 引言 通过前面篇节已经将m_map绘图工具中大多绘图有关的函数进行过介绍,已经能够满足基本的绘图需求,本节…

Linux vim文本编辑器

Vim(Vi IMproved)是一个高度可配置的文本编辑器,它是Vi编辑器的增强版本,广泛用于程序开发和系统管理。Vim不仅保留了Vi的所有功能,还增加了许多新特性,使其更加强大和灵活。 Vim操作模式 普通模式&#xf…

下载安装nodejs npm jarn笔记

下载安装nodejs npm jarn笔记 下载 Node.js安装Node.js修改node全局路径安装yarn 下载 Node.js 下载Node.js 安装Node.js 双击下载的下来的.msi文件运行并安装一直点next。安装路径可以是默认也可自定义。安装完成后Node.js和npm就安装完成了 命令行输入: nod…

企业网络实验(vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP

文章目录 需求实验修改dhcp虚拟机配置文件测试PC获取IP查看user-bind 需求 (vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP 实验 前期配置: https://blog.csdn.net/xzzteach/article/details/140406092 后续配置均在以上配置的前…

【学术会议征稿】第三届智能电网与能源系统国际学术会议

第三届智能电网与能源系统国际学术会议 2024 3rd International Conference on Smart Grid and Energy Systems 第三届智能电网与能源系统国际学术会议(SGES 2024)将于2024年10月25日-27日在郑州召开。 智能电网可以优化能源布局,让现有能源…