【基礎島·第3關】浦語提示詞工程實踐

陈佳佳|Tech發表於2024-09-28

[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.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、模型部署

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,  # 獲取可用模型列表中的第一個模型 ID
    messages=[  # 設定聊天訊息
        {"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

修改以後再次測試:

相關文章