[to2024-09-25 18:32:11 星期三c]
案例描述
0、前期准备
创建开发机
0.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 获取模型
- 已经下载好的模型
如果使用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# 设置 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进行部署,参考如下命令:
部署后测试是否部署成功:
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)
1.3 图形化界面调用
- 从github中获取图形化项目代码,部署到开发机上。项目地址:https://github.com/InternLM/Tutorial.git
- 在本地设置端口映射命令
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/打开界面。
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输出正确结果。完成一次并提交截图即可
错误重现:
优化后的提示词模板
# 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
修改以后再次测试: