[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.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 獲取模型
- 已經下載好的模型
如果使用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, # 獲取可用模型列表中的第一個模型 ID
messages=[ # 設定聊天訊息
{"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
修改以後再次測試: