书生大模型实战营(第三期)-浦语提示词工程(Prompt Engineering)实践
0 前期准备
使用的开发机是书生大模型实战营提供的intern-studio开发机
0.1环境配置
打开Terminal,运行如下脚本创建虚拟环境:
# 创建虚拟环境
conda create -n langgpt python=3.10 -y
运行下面的命令,激活虚拟环境:
conda activate langgpt
之后的操作都要在这个环境下进行。激活环境后,安装必要的Python包,依次运行下面的命令:
# 安装一些必要的库
pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu121
# 安装其他依赖
pip install transformers==4.43.3
pip 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. 模型部署
这部分基于LMDeploy将开源的InternLM2-chat-1_8b模型部署为OpenAI格式的通用接口。
1.1 获取模型
-
如果使用intern-studio开发机,可以直接在路径
/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b
下找到模型 -
如果不使用开发机,可以从huggingface上获取模型,地址为:https://huggingface.co/internlm/internlm2-chat-1_8b
可以使用如下脚本下载模型:
from huggingface_hub import login, snapshot_download import os os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com' login(token=“your_access_token") models = ["internlm/internlm2-chat-1_8b"] for model in models: try: 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
创建完成后,运行下面的命令进入新的命令窗口(首次创建自动进入,之后需要连接):
tmux a -t langgpt
进入命令窗口后,需要在新窗口中再次激活环境,命令参考0.1节。然后,使用LMDeploy进行部署,参考如下命令:
使用LMDeploy进行部署,参考如下命令:
CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --server-port 23333 --api-keys internlm2
更多设置,可以参考:https://lmdeploy.readthedocs.io/en/latest/index.html
部署成功后,可以利用如下脚本调用部署的InternLM2-chat-1_8b模型并测试是否部署成功。
from openai import OpenAI
client = OpenAI(
api_key = "internlm2",
base_url = "http://0.0.0.0:23333/v1"
)
response = client.chat.completions.create(
model=client.models.list().data[0].id,
messages=[
{"role": "system", "content": "请介绍一下你自己"}
]
)
print(response.choices[0].message.content)
服务启动完成后,可以按Ctrl+B进入tmux
的控制模式,然后按D退出窗口连接,更多操作参考。
1.3 图形化界面调用
InternLM部署完成后,可利用提供的chat_ui.py
创建图形化界面,在实战营项目的tools项目中。
首先,从Github获取项目,运行如下命令:
git clone https://github.com/InternLM/Tutorial.git
下载完成后,运行如下命令进入项目所在的路径:
cd Tutorial/tools
进入正确路径后,运行如下脚本运行项目:
python -m streamlit run chat_ui.py
参考L0/Linux的2.3部分进行端口映射,在本地终端中输入映射命令,可以参考如下命令:
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/打开界面。
启动后界面如下:
左侧边栏为对话的部分设置,其中最大token长度设置为0时表示不限制生成的最大token长度。API Key和Base URL是部署InternLM时的设置,必须填写。在保存设置之后,可以启动对话界面:
2. 浦语提示词工程实践(LangGPT版)
编写完LangGPT提示词后,可以将其作为系统提示,也可直接作为交互式对话的输入。推荐作为系统提示。
填入系统提示后保存设置,之后可以与自定义的助手角色进行对话。
基础任务
- 背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为
13.8<13.11
。 - 任务要求:利用LangGPT优化提示词,使LLM输出正确结果。
开始拒绝回答13.8和13.11哪个大
给新的提示词,自己“创造”了科学计数法的方案
# Role: 小数比大小数学家
## Profile
- author: Serein
- version: 1.0
- language: 中文
- description: 一个聪明的小数比大小数学家,具备丰富的数学知识,善于比较各种数字比较。
## Goals:
- 解决用户提出的小数比大小。
## OutputFormat:
- 请按照示例那样提供详细解释解题思路和步骤
- 使用易于理解的语言,避免过于复杂的数学术语
## Constraints
- 遵守数学计算规则。
## Workflows
步骤 1: 比较整数部分
首先,比较两个小数的整数部分。整数部分大的那个小数就大。如果整数部分相同,则进入下一步比较。
步骤 2: 比较小数部分
如果整数部分相同,接下来比较小数点后的部分。先从小数点后的第一位开始比较,一直到找到不同的数为止。小数点后位数大的那一位对应的数更大的那个小数就更大。
步骤 3: 补齐位数(如果必要)
如果两数的小数位数不同,可以在小数位数少的一方的末尾补上零,使它们的小数位数相同。然后按照上述步骤进行比较。
## Examples:
示例 1: 比较 3.56 和 2.89
1. 整数部分:3 > 2,所以 3.56 > 2.89。
示例 2: 比较 1.467 和 1.472
1. 整数部分:1 = 1,所以需要比较小数部分。
2. 小数部分:
- 比较第一位:4 = 4
- 比较第二位:6 < 7,所以 1.467 < 1.472。
示例 3: 比较 0.5 和 0.50
1. 整数部分:0 = 0
2. 小数部分:0.5 和 0.50 只有小数位数不同,但补齐位数后,0.5 = 0.50。所以,0.5 = 0.50。
## Initialization
作为一个聪明的小数比大小数学家,我擅长比较小数大小。请开始告诉我您要比较的两个数字。
再次输入“13.8和13.11哪个大”,可以得到正确结果: