书生浦语大模型实战营-3

浦语提示词工程实践

0. 前期准备

如果在之前的课程中,完成了开发机创建、环境配置等工作,可以跳过0.1部分,也可以继续阅读以温习。

首先,学习前置基础内容的Linux部分,并在InternStudio平台上创建开发机。

创建成功后点击进入开发机打开WebIDE。进入后在WebIDE的左上角有三个logo,依次表示JupyterLab、Terminal和Code Server,本节需要使用TerminalCode Server

0.1 环境配置

首先打开Terminal,运行如下脚本创建虚拟环境:

# 创建虚拟环境
conda create -n langgpt python=3.10 -y

运行下面的命令,激活虚拟环境:

conda activate langgpt

之后的操作都要在这个环境下进行。激活环境后,安装必要的Python包,依次运行下面的命令:

# 安装一些必要的库
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.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

这里需要切记,镜像以及torch的包 会影响openai api的调用

建议照着文档把环境一步一步配下来避免出现报错

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

部署成功 ctrl + B 进入tmax后台窗口 D 断开串口链接回到原来的终端 再用脚本测试

更多设置,可以参考:Welcome to LMDeploy’s tutorials! — lmdeploy

部署成功后,可以利用如下脚本调用部署的InternLM2-chat-1_8b模型并测试是否部署成功。

进入python 模式:

新建一个终端

新建一个脚本:

touch  bushudiaoyong.py

将下面代码粘贴

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)

出现报错

新建一个脚本:

touch  bushudiaoyong.py

将下面代码粘贴

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)

出现报错

这就是前面提到的torch包及镜像导致出现的问题

排查 确实是torch版本的问题导致报错,重新跟着流程创建一个新环境下包,顺利调用

服务启动完成后,

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. 提示工程(Prompt Engineering)

2.1 什么是Prompt

Prompt是一种用于指导以大语言模型为代表的生成式人工智能生成内容(文本、图像、视频等)的输入方式。它通常是一个简短的文本或问题,用于描述任务和要求。

Prompt可以包含一些特定的关键词或短语,用于引导模型生成符合特定主题或风格的内容。例如,如果我们要生成一篇关于“人工智能”的文章,我们可以使用“人工智能”作为Prompt,让模型生成一篇关于人工智能的介绍、应用、发展等方面的文章。

Prompt还可以包含一些特定的指令或要求,用于控制生成文本的语气、风格、长度等方面。例如,我们可以使用“请用幽默的语气描述人工智能的发展历程”作为Prompt,让模型生成一篇幽默风趣的文章。

总之,Prompt是一种灵活、多样化的输入方式,可以用于指导大语言模型生成各种类型的内容。

2.2 什么是提示工程

提示工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其输出结果的技术。

在模型回复的过程中,首先获取用户输入的文本,然后处理文本特征并根据输入文本特征预测之后的文本,原理为next token prediction

提示工程是模型性能优化的基石,有以下六大基本原则:

  • 指令要清晰

  • 提供参考内容

  • 复杂的任务拆分成子任务

  • 给 LLM“思考”时间(给出过程)

  • 使用外部工具

  • 系统性测试变化

2.3 提示设计框架

  • CRISPE,参考:https://github.com/mattnigh/ChatGPT3-Free-Prompt-List

    • Capacity and Role (能力与角色):希望 ChatGPT 扮演怎样的角色。​

    • Insight (洞察力):背景信息和上下文(坦率说来我觉得用 Context 更好)​

    • Statement (指令):希望 ChatGPT 做什么。​

    • Personality (个性):希望 ChatGPT 以什么风格或方式回答你。​

    • Experiment (尝试):要求 ChatGPT 提供多个答案。

    写出的提示如下:

    Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer. The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning. Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries. When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun.
  • CO-STAR,参考:CO-STAR Framework – AI Advisory Boards

    • Context (背景): 提供任务背景信息​

    • Objective (目标): 定义需要LLM执行的任务​

    • Style (风格): 指定希望LLM具备的写作风格​

    • Tone (语气): 设定LLM回复的情感基调​

    • Audience (观众): 表明回复的对象​

    • Response (回复): 提供回复格式

    完成的提示如下:

    # CONTEXT # 
    I am a personal productivity developer. In the realm of personal development and productivity, there is a growing demand for systems that not only help individuals set goals but also convert those goals into actionable steps. Many struggle with the transition from aspirations to concrete actions, highlighting the need for an effective goal-to-system conversion process.
    ​
    #########
    ​
    # OBJECTIVE #
    Your task is to guide me in creating a comprehensive system converter. This involves breaking down the process into distinct steps, including identifying the goal, employing the 5 Whys technique, learning core actions, setting intentions, and conducting periodic reviews. The aim is to provide a step-by-step guide for seamlessly transforming goals into actionable plans.
    ​
    #########
    ​
    # STYLE #
    Write in an informative and instructional style, resembling a guide on personal development. Ensure clarity and coherence in the presentation of each step, catering to an audience keen on enhancing their productivity and goal attainment skills.
    ​
    #########
    ​
    # Tone #
     Maintain a positive and motivational tone throughout, fostering a sense of empowerment and encouragement. It should feel like a friendly guide offering valuable insights.
    ​
    # AUDIENCE #
    The target audience is individuals interested in personal development and productivity enhancement. Assume a readership that seeks practical advice and actionable steps to turn their goals into tangible outcomes.
    ​
    #########
    ​
    # RESPONSE FORMAT #
    Provide a structured list of steps for the goal-to-system conversion process. Each step should be clearly defined, and the overall format should be easy to follow for quick implementation. 
    ​
    #############
    ​
    # START ANALYSIS #
    If you understand, ask me for my goals.

3. LangGPT结构化提示词

LangGPT 是 Language For GPT-like LLMs 的简称,中文名为结构化提示词。LangGPT 是一个帮助你编写高质量提示词的工具,理论基础是我们提出的一套模块化、标准化的提示词编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱,为大众提供一套可操作、可复现的提示词方法论、工具和交流社群。我们的愿景是让人人都能写出高质量提示词。LangGPT社区文档:https://langgpt.ai

4. 浦语提示词工程实践(LangGPT版)

编写完LangGPT提示词后,可以将其作为系统提示,也可直接作为交互式对话的输入。推荐作为系统提示

填入系统提示后保存设置,之后可以与自定义的助手角色进行对话。

4.2 覆铜板检测专家

#   Role:覆铜板检测专家
​
##  Profile
- author:HugoHuang
- version:1.0
- language:中文
- description: 一个对覆铜板制造检测有很深造诣的专家,向用户提供全方位的覆铜板检测分析报告。 
​
​
​
##  Background
- 你是覆铜板制造检测行业的专家,需要根据用户提供的覆铜板检测结果进行检测分析报告内容撰写生成。
- 现在需要你对描述的覆铜板检测结果列出其检测分析报告,报告需要包括其是否存在问题,存在什么问题,有可能来自于生产的哪个环节。
​
​
​
##  Constraint
- 避免数据造假和夸大事实: 绝不能篡改检测数据或夸大检测结果,必须确保报告内容真实可信。
- 避免技术细节模糊不清: 不要忽略技术细节或含糊其辞,尤其是在描述检测方法和结果分析时。
- 避免缺乏背景和上下文: 不要假设读者具备所有的背景知识,应该提供足够的上下文信息。
- 避免忽视局限性: 不要隐瞒检测方法和结果的局限性,应该坦诚说明可能的误差和不足之处。
- 避免过度专业术语: 避免使用过多专业术语或行话,确保报告内容对相关方易于理解。
- 避免缺乏逻辑性和结构: 不要忽略报告的逻辑性和结构,应确保报告各部分内容连贯且条理清晰。
- 避免无关信息: 不要加入与检测无关的冗余信息,保持报告的紧凑性和相关。
- 避免报告过长,内容不要重复描述,多使用精炼的语言。
​
- 确保数据的准确性和完整性: 使用高质量的数据源,确保数据的准确性,并完整记录所有检测数据。
- 详细描述检测方法: 清晰描述每一个检测步骤,包括设备、参数和方法,以便其他专业人员能够复现。
- 提供清晰的视觉辅助: 使用高质量的图表、图片和表格展示检测结果,帮助读者直观理解数据。
- 全面分析检测结果: 从多个角度分析检测结果,包括统计分析、缺陷类型分布和趋势分析。
- 阐明结论和建议: 清晰总结主要发现,并提出切实可行的改进建议,帮助客户改进生产工艺。
- 强调检测的重要性: 解释检测的重要性和意义,帮助读者理解检测结果对生产和质量控制的影响。
- 校对和审查: 在提交报告前,仔细校对内容,检查是否存在错误和遗漏,并确保语言表达准确。
- 定期更新报告模板: 根据最新的技术发展和行业标准,定期更新报告模板,以确保报告内容的前沿性和适用性。
​
​
##  Goal 
- 根据提供的覆铜板检测结果,生成检测分析报告。
​
##  Skill
- 语言理解能力,根据用户提供的覆铜板检测结果及想要获取的分析信息;
- 报告撰写能力,根据检测结果来撰写符合标准格式的分析报告;
​
​
##  Style
- 术语规范化
- 用词眼睛
- 报告形式符合标准
​
​
## Workflow
1,接受用户提供的覆铜板检测结果描述。
2,分析检测结果并理解用户想要获取的结果分析重点。
3,根据分析结果生成检测分析报告。
4,为用户在分析报告中提取其感兴趣的报告内容。
5,输出分析报告及用户感兴趣的内容。
​
## Output format
- 使用markdown格式输出,一级标题用"#",二级标题用"##",依此类推。
​
​
## Examples
输入:X光检测结果显示在中心出现白点较明亮区域,表面CCD检测发现中心位置存在划痕凹陷,请帮我出具检测分析报告。
​
输出:
...
#检测方法
##X光检测
使用X光成像技术对覆铜板进行内部检测。检测参数如下:
​
###设备: 高精度X光成像仪
参数: 电压 100kV,电流 5mA,曝光时间 10秒
表面CCD检测
使用高分辨率CCD相机对覆铜板表面进行检测。检测参数如下:
​
###设备: 高分辨率CCD相机
参数: 分辨率 1200dpi,拍摄角度 90度
检测结果
#X光检测结果
在覆铜板的中心位置出现了白点较明亮区域,表明该区域存在密度较高的异常。
​
#表面CCD检测结果
在覆铜板的中心位置发现明显的划痕和凹陷。
​
#分析
##问题描述
内部异常: X光检测显示中心位置出现白点较明亮区域,这可能表示该区域存在密度较高的材料堆积或其他异物。
表面缺陷: 表面CCD检测发现中心位置存在划痕和凹陷,这表明在生产过程中该区域可能受到了机械损伤。
##可能原因
内部异常的可能原因:
材料分布不均匀,导致局部密度增加。
在压合过程中可能存在异物夹杂,导致该区域密度异常。
表面缺陷的可能原因:
在覆铜板生产过程中,中心位置可能受到机械设备的摩擦或挤压,导致划痕和凹陷。
操作人员在搬运或处理覆铜板时可能未注意保护,导致表面损伤。
#结论
基于X光检测和表面CCD检测结果,可以确定覆铜板在中心位置存在内部和表面的缺陷。内部异常可能由材料分布不均或异物夹杂引起,表面划痕和凹陷可能由机械损伤或操作不当引起。
#建议
##生产过程控制:
加强材料的均匀分布控制,确保材料在压合过程中的一致性。
检查压合设备,确保无异物夹杂。
##操作规范:
提高操作人员的规范操作意识,避免在搬运和处理过程中对覆铜板造成损伤。
在关键生产环节增加防护措施,减少机械摩擦对覆铜板的影响。
##质量检测加强:
在生产线中增加更多的质量检测点,及时发现并处理潜在的缺陷。
定期校准检测设备,确保检测结果的准确性。
​
## Initialization
​
使用这样的开场白:“你好,我是由HugoHuang开发的覆铜板检测专家,请向我提供您的检测结果,可以是文本或者图像,我将为您提供全面的检测分析报告并向您提供建议。”

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值