【基础岛第3关】浦语提示词工程实践

news/2024/9/28 0:31:48

[to2024-09-25 18:32:11 星期三c]

案例描述

0、前期准备

创建开发机

0.1 环境配置

  1. 创建虚拟环境并激活

创建虚拟环境

conda create -n langgpt python=3.10 -y
conda activate langgpt
2. 安装必要的库

# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y# 安装其他依赖
pip install transformers==4.43.3pip install streamlit==1.37.0
pip install huggingface_hub==0.24.3
pip install openai==1.37.1
pip install lmdeploy==0.5.2

0.2 创建项目路径

## 创建路径
mkdir langgpt
## 进入项目路径
cd langgpt

0.3 安装必要软件

apt-get install tmux

1、模型部署

1.1 获取模型

  1. 已经下载好的模型
    如果使用intern-studio开发机,可以直接在路径/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b下找到模型
  2. 从huggingface上获取模型,地址为:https://huggingface.co/internlm/internlm2-chat-1_8b
    加载模型:
from huggingface_hub import login, snapshot_download
import os# 设置 Hugging Face 的镜像地址
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'# 使用提供的访问令牌登录 Hugging Face
login(token="your_access_token")# 定义要下载的模型列表
models = ["internlm/internlm2-chat-1_8b"]# 遍历每个模型进行下载
for model in models:try:# 从 Hugging Face Hub 下载模型快照,并保存到指定本地目录snapshot_download(repo_id=model, local_dir="langgpt/internlm2-chat-1_8b")except Exception as e:# 如果出现任何异常,打印异常信息并继续下一个模型print(e)pass

1.2 部署模型为OpenAI server

使用tmux命令创建新的窗口并进入(首次创建可以自动进入,但之后需要链接):

tmux new -t langgpt

进入命令窗口后,需要在新窗口中再次激活环境,命令参考0.1节。然后,使用LMDeploy进行部署,参考如下命令:

image

部署后测试是否部署成功:

from openai import OpenAI  # 从 OpenAI 库导入 OpenAI 类# 创建 OpenAI 客户端实例,配置 API 密钥和基础 URL
client = OpenAI(api_key="internlm2",  # API 密钥base_url="http://0.0.0.0:23333/v1"  # 基础 URL,指向本地服务
)# 创建聊天生成请求
response = client.chat.completions.create(model=client.models.list().data[0].id,  # 获取可用模型列表中的第一个模型 IDmessages=[  # 设置聊天消息{"role": "system", "content": "请介绍一下你自己"}  # 系统角色的消息内容]
)# 打印模型返回的消息内容
print(response.choices[0].message.content)

image

1.3 图形化界面调用

  1. 从github中获取图形化项目代码,部署到开发机上。项目地址:https://github.com/InternLM/Tutorial.git
    image
  2. 在本地设置端口映射命令

ssh -p {ssh端口,从InternStudio获取} root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:8501 -o StrictHostKeyChecking=no
如果未配置开发机公钥,还需要输入密码,从InternStudio获取。上面这一步是将开发机上的8501(web界面占用的端口)映射到本地机器的端口,之后可以访问http://localhost:7860/打开界面。
image
image

2、提示工程(Prompt Enginerring)

2.1 什么是prompt

prompt是指导生成式llm的输出内容的输入方式。

2.2 什么是提示词工程

提示工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其输出结果的技术。
提示词优化6大基本原则:

    • 指令要清晰
    • 提供参考内容
    • 复杂的任务拆分成子任务
    • 给 LLM“思考”时间(给出过程)
    • 使用外部工具
    • 系统性测试变化

2.3 提示设计框架

CRISPE原则
CR for Capacity and Role (能力与角色):希望 ChatGPT 扮演怎样的角色。
I for Insight (洞察力):背景信息和上下文(坦率说来我觉得用 Context 更好)
S for Statement (指令):希望 ChatGPT 做什么。
P for Personality (个性):希望 ChatGPT 以什么风格或方式回答你。
E for Experiment (尝试):要求 ChatGPT 提供多个答案。

CO-STAR原则
Context (背景): 提供任务背景信息​
Objective (目标): 定义需要LLM执行的任务​
Style (风格): 指定希望LLM具备的写作风格​
Tone (语气): 设定LLM回复的情感基调​
Audience (观众): 表明回复的对象​
Response (回复): 提供回复格式

3、 LangGPT结构化提示词

3.1 LangGPT结构

LangGPT框架参考了面向对象程序设计的思想,设计为基于角色的双层结构,一个完整的提示词包含模块-内部元素两级,模块表示要求或提示LLM的方面,例如:背景信息、建议、约束等。内部元素为模块的组成部分,是归属某一方面的具体要求或辅助信息,分为赋值型和方法型。

即 模块是是成员函数, 内部元素是方法

3.2 编写技巧

4、 浦语提示词工程通关作业

任务描述

背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为13.8<13.11。

任务要求:利用LangGPT优化提示词,使LLM输出正确结果。完成一次并提交截图即可

错误重现:
image

优化后的提示词模板
# CONTEXT
近期研究表明,许多大型语言模型(LLM)在比较浮点数字时表现不佳。例如,internlm2-chat-1.8b 和 internlm2-chat-7b 在比较数字时可能出现错误,像是错误地判断 13.8 < 13.11。我们需要改善模型在此类任务中的表现。########## OBJECTIVE
你的任务是帮助我正确比较浮点数字。请确保在处理浮点数时,输出的结果准确无误,特别关注数字的大小关系。对于需要比较的两数,你将遵循以下步骤:
1. 将浮点数a,b分为小数点前后小数点后两个部分,并做相减,得到part1
2. 将a,b小数点后的部分处理成在0-100的范围
3. 将a,b小数点后的部分做相减,得到part2
4 将part 2 除以100 成为part3
5 将part1 和part3 相加与0做比较
6 如果大于0则 a大于b。如果小于0,则a小于b。如果等于0,则a=b########## STYLE
以明确和直接的风格写作,提供详细的比较步骤。确保语言简单易懂,以便于模型快速准确理解。########## TONE
保持客观和专业的语气,强调准确性和逻辑性。确保模型在处理浮点数比较时具备清晰的思路。# AUDIENCE
目标读者是希望提高数字比较准确性的开发者和用户,特别是在处理浮点数运算时的 AI 应用。########## RESPONSE FORMAT
提供一个明确的浮点数字比较示例。每个示例应包括:比较的两个数字。
正确的比较结果(例如:13.8 和 13.11 的比较)。
解释为什么得出这个结果的逻辑,包括对浮点数的理解。
提供任何相关的注意事项,避免常见错误。
############## START ANALYSIS

修改以后再次测试:

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

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

相关文章

9月27日swing知识点

swing是一系列图形用户界面的控件的集合 Swing中GUI类分为三大类: 容器类 JFrame、JPanel、JScrollPane UI组件类 JLabel、JTextField、JTextArea、JButton JCheckBox、JRadioButton、JComboBox 帮助类 Color、Font、Dimension 这三者的依存关系为组件必须依存在顶层容器中,组…

软件工程结对作业

这个作业属于哪个课程 软件工程这个作业要求在哪里 结对作业要求这个作业的目标 设计一个软件的方案原型学号 102202109(我)012202239(朱佳杰)《构建之法》第三章与第八章读后感 第三章:软件工程师的成长 1.1 个人能力的衡量与发展 在《构建之法》第三章中,作者详细阐述了…

油猴脚本使用指南

油猴插件介绍 官方介绍:篡改猴 (Tampermonkey) 是拥有 超过 1000 万用户 的最流行的浏览器扩展之一。 它适用于 Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox。 有些人也会把篡改猴(Tampermonkey)称作油猴(Greasemonkey),尽管后者只是一款仅适用于 Firefox 浏览器…

一些常用的技巧分享

0. 前言 最近很多uu们过来问鼠鼠一些 c语言/python 的问题,遂决定开一个答疑帖,方便大家学习交流。但是呢既然开了帖,也就不只讲有疑问的地方,顺便把常见的一些问题都给大家过一遍。又考虑到很多uu跟鼠鼠一样是电脑小白,也顺带分享一些电子产品、生活小知识。 鼠鼠水平有限…

2024-9-27

标签 标签段落,换行与水平线 段落换行水平线实操

动手动脑(运行EnumTest.java)

运行出来的结果为:枚举法: enum Color { RED, GREEN, BLUE } 如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为 RED:0,GREEN:1,BLUE:2。 枚举的好处:可以将常量组织起来,统一进行管理。 枚举类型的本质 尽管 enum …

9.27每日总结

今天完成了MES的原型,基本的框架流程图和数据表的原型。