- 闯关任务:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为
13.8<13.11
。需利用LangGPT优化提示词,使LLM输出正确结果。
1.什么是prompt?
“prompt”是为模型提供的输入,用以引导AI模型生成特定的输出。prompt的来源可以是预设的prompt,或是用户输入,也可以是模型自己之前的输出。
2.什么是prompt engineering(提示工程)?
提示工程是一种通过设计和调整输入prompts来改善模型性能或控制其输出结果的技术。提示工程有6大原则:
1.指令要清晰;
2.提供参考内容;
3.复杂的任务拆分成子任务;
4.给LLM“思考”时间(给出过程);
5.使用外部工具;
6.系统性测试变化。
3.好用的提示词框架
4.LangGPT结构化提示词
LangGPT 是 Language For GPT-like LLMs 的简称,中文名为结构化提示词。LangGPT 是一个帮助你编写高质量提示词的工具,理论基础是其提出的一套模块化、标准化的提示词编写方法论——结构化提示词。作者希望揭开提示工程的神秘面纱,为大众提供一套可操作、可复现的提示词方法论、工具和交流社群,希望让人人都能写出高质量提示词。
5.模型部署
首先创建虚拟环境,安装对应的依赖库,基于LMDeploy,将开源的InternLM2-chat-1_8b模型部署为OpenAI格式的通用接口。
由于服务需要持续运行,需要将进程维持在后台,运行如下命令创建窗口:
tmux new -t langgpt
创建完成后,运行下面的命令进入新的命令窗口(首次创建自动进入,之后需要连接):
tmux a -t langgpt
在新的命令窗口重新激活环境,使用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
部署成功后,可以利用如下脚本调用部署的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退出窗口连接。
启动图形化界面:
git clone https://github.com/InternLM/Tutorial.git
cd Tutorial/tools
python -m streamlit run chat_ui.py
在本机进行ssh链接开发机,进行端口映射:
[注]:CMD和PowerShell是Windows操作系统中的两种不同的命令行界面,CMD是进入dos系统的命令,可以进行命令提示符操作。PowerShell是系统工具,是对CMD的拓展,其中多了很多操作,比如管道操作。PowerShell是基于面向对象的,是CMD的升级版、补充版,比CMD更强大,内置了非常多的命令,支持脚本编译,可以用来自动化管理任务。
如果在ssh链接过程中出现拒绝:
则在服务器中重置密码:
passwd root
6.系统提示设定
当不使用系统提示(即使用general设置)时,所部署模型对于浮点数的比较能力有所欠缺:
在系统提示中加入“数学大师”的提示词描述,模板如下:
# Role: {}
## Profile
- author: LangGPT
- version: 1.0
- language: {中文/英文}
- description: {}
## Skills
{}
## Background(可选项):
## Goals(可选项):
## OutputFormat(可选项):
## Constraints
{}
## Workflows
{}
## Initialization
{}
'''
对于浮点数的计算能力欠妥的问题,核心在于教导大模型如何进行计算,因此着重在## Workflows中提出:
## Workflows
计算两个数字的减法
当结果大于0时,认为第一个数字比第二个数字大,当结果小于0时,认为第一个数字比第二个数字小
重新保存设置,得到如下结果: