學員闖關手冊:https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld
課程視頻:https://www.bilibili.com/video/BV13U1VYmEUr/
課程文檔:https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python
關卡作業:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/Python/task.md
開發機平臺:https://studio.intern-ai.org.cn/
開發機平臺介紹:https://aicarrier.feishu.cn/wiki/GQ1Qwxb3UiQuewk8BVLcuyiEnHe
Conda虛擬環境
#創建虛擬新環境,創建虛擬環境時我們主要需要設置兩個參數,一是虛擬環境的名字,二是python的版本。
conda create --name myenv python=3.9
#激活環境和推出環境
conda activate myenv
conda deactivate
#查看當前設備上所有的虛擬環境
conda env list
#查看當前環境中安裝了的所有包
conda list
#刪除環境(比如要刪除myenv)
conda env remove myenv
#創建新環境到指定目錄下,和激活指定目錄下的環境
conda create --prefix /root/envs/myenv python=3.9
conda activate /root/envs/myenv
使用pip安裝Python三方依賴包
使用pip安裝包
pip install <somepackage> # 安裝單個包,<somepackage>替換成你要安裝的包名
pip install pandas numpy # 安裝多個包,如panda和numpy
pip install numpy==2.0 # 指定版本安裝
pip install numpy>=1.19,<2.0 # 使用版本范圍安裝
安裝requirement.txt
pip install -r requirements.txt
安裝包到指定目錄
# 首先激活環境
conda activate /root/share/pre_envs/pytorch2.1.2cu12.1# 創建一個目錄/root/myenvs,并將包安裝到這個目錄下
mkdir -p /root/myenvs
pip install <somepackage> --target /root/myenvs# 注意這里也可以使用-r來安裝requirements.txt
pip install -r requirements.txt --target /root/myenvs#使用安裝在指定目錄的python包
import sys # 你要添加的目錄路徑
your_directory = '/root/myenvs' # 檢查該目錄是否已經在 sys.path 中
if your_directory not in sys.path: # 將目錄添加到 sys.path sys.path.append(your_directory) # 現在你可以直接導入該目錄中的模塊了
# 例如:import your_module
使用本地Vscode連接InternStudio開發機
VSCode安裝Remote-SSH插件、python的插件、并進行SSH遠程連接到開發機,
使用vscode連接開發機進行python debug
debug就是在程序中設置斷點,一行一行運行代碼,觀測程序中變量的變化,然后找出并修正代碼中的錯誤
調用書生LLM的api完成生成任務
獲取api key
前往書生浦語的API文檔,登陸后點擊API tokens。初次使用可能會需要先填寫邀請碼。
https://internlm.intern-ai.org.cn/api/document
使用api
#./internlm_test.py
from openai import OpenAI
import osclient = OpenAI(api_key = os.getenv('api_key'), # 此處傳token,不帶Bearerbase_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",
)chat_rsp = client.chat.completions.create(model="internlm3-latest",messages=[{"role": "user", "content": "hello"}],
)for choice in chat_rsp.choices:print(choice.message.content)
export api_key=“填入你的api token”
python internlm_test.py
闖關任務 Leetcode 383
(筆記中提交代碼與leetcode提交通過截圖)
https://leetcode.cn/problems/ransom-note/description/
給你兩個字符串:ransomNote 和 magazine ,判斷 ransomNote 能不能由 magazine 里面的字符構成。
如果可以,返回 true ;否則返回 false 。
magazine 中的每個字符只能在 ransomNote 中使用一次。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from collections import Counter# 統計 ransomNote 和 magazine 中每個字符的頻率ransom_counter = Counter(ransomNote)magazine_counter = Counter(magazine)# 檢查 ransomNote 中的字符是否可以由 magazine 提供for char, count in ransom_counter.items():if magazine_counter[char] < count:return Falsereturn True
代碼解釋:
Counter: 使用 collections.Counter 來統計 ransomNote 和 magazine 中每個字符的出現次數。
遍歷 ransomNote: 遍歷 ransomNote 中的字符及其數量,檢查 magazine 是否有足夠的字符數量。如果某個字符在 magazine 中的數量少于在 ransomNote 中的數量,則返回 False。
for char, count in ransom_counter.items():
這行代碼開始一個循環,遍歷ransom_counter字典中的所有鍵值對。
char是字典中的鍵,代表一個字符。
count是字典中的值,代表該字符在贖金信中出現的次數。
.items()方法返回一個包含字典所有鍵值對的視圖對象,可以在for循環中使用。
if magazine_counter[char] < count:
這行代碼檢查雜志文章中該字符的出現次數是否小于贖金信中該字符的出現次數。
magazine_counter[char]獲取雜志文章中該字符的出現次數。
如果雜志中的次數小于贖金信中的次數,意味著無法用雜志中的字符拼寫出贖金信。
返回結果: 如果 magazine 中的所有字符都能滿足 ransomNote 的需求,返回 True。
使用示例:
solution = Solution()
print(solution.canConstruct("a", "b")) # 輸出: False
print(solution.canConstruct("aa", "ab")) # 輸出: False
print(solution.canConstruct("aa", "aab")) # 輸出: True
闖關任務 Vscode連接InternStudio debug筆記
下面是一段調用書生浦語API實現將非結構化文本轉化成結構化json的例子,其中有一個小bug會導致報錯。請大家自行通過debug功能定位到報錯原因。
報錯代碼
#python_debug.py
from openai import OpenAI
import json
import os
def internlm_gen(prompt,client):'''LLM生成函數Param prompt: prompt stringParam client: OpenAI client '''response = client.chat.completions.create(model="internlm2.5-latest",messages=[{"role": "user", "content": prompt},],stream=False)return response.choices[0].message.contentapi_key = os.getenv('api_key')
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)content = """
書生浦語InternLM2.5是上海人工智能實驗室于2024年7月推出的新一代大語言模型,提供1.8B、7B和20B三種參數版本,以適應不同需求。
該模型在復雜場景下的推理能力得到全面增強,支持1M超長上下文,能自主進行互聯網搜索并整合信息。
"""
prompt = f"""
請幫我從以下``內的這段模型介紹文字中提取關于該模型的信息,要求包含模型名字、開發機構、提供參數版本、上下文長度四個內容,以json格式返回。
`{content}`
"""
res = internlm_gen(prompt,client)
res_json = json.loads(res)
print(res_json)
報錯原因解析
設置斷點,查看報錯變量
‘根據提供的模型介紹文字,以下是提取的關于該模型的信息,以JSON格式返回:\n\njson\n{\n "model_name": "書生浦語InternLM2.5",\n "development_institution": "上海人工智能實驗室",\n "parameter_versions": ["1.8B", "7B", "20B"],\n "context_length": "1M"\n}\n
\n\n這個JSON對象包含了以下信息:\n- model_name
:模型的名稱,即“書生浦語InternLM2.5”。\n- development_institution
:開發該模型的機構,為“上海人工智能實驗室”。\n- parameter_versions
:模型提供的參數版本,包括“1.8B”、“7B”和“20B”三個版本。\n- context_length
:模型支持的上下文長度,為“1M”,表示模型能夠處理的上下文信息長度達到1百萬字符。\n\n這些信息概括了模型的基本屬性和功能特點,便于快速了解該模型的關鍵信息。’
報錯變量修正
通過提示詞去除額為文本,通過 res.strip(‘json\n').strip('
’)去除代碼標記、換行符和縮進,
from openai import OpenAI
import json
import os
def internlm_gen(prompt,client):'''LLM生成函數Param prompt: prompt stringParam client: OpenAI client '''response = client.chat.completions.create(model="internlm2.5-latest",messages=[{"role": "user", "content": prompt},],stream=False)return response.choices[0].message.contentapi_key=""
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)content = """
書生浦語InternLM2.5是上海人工智能實驗室于2024年7月推出的新一代大語言模型,提供1.8B、7B和20B三種參數版本,以適應不同需求。
該模型在復雜場景下的推理能力得到全面增強,支持1M超長上下文,能自主進行互聯網搜索并整合信息。
"""
prompt = f"""
請參考json格式,請幫我從以下``內的這段模型介紹文字中提取關于該模型的信息,要求包含模型名字、開發機構、提供參數只版本、上下文長度四個內容,以json格式返回,請移除額外的 Markdown 代碼塊標記 ````json和 ```,以及換行符\n`,不要有其他文字。
`{content}`
"""
res = internlm_gen(prompt,client)
# 移除 Markdown 代碼塊標記和換行符
json_str = res.strip('```json\n').strip('```')
res_json = json.loads(json_str)
print(res_json)
成功!!!
可選任務 pip安裝到指定目錄
使用VScode連接開發機后使用pip install -t命令安裝一個numpy到看開發機/root/myenvs目錄下,并成功在一個新建的python文件中引用。
# 首先激活環境
conda activate /root/share/pre_envs/pytorch2.1.2cu12.1# 創建一個目錄/root/myenvs,并將包安裝到這個目錄下
mkdir -p /root/myenvs
pip install numpy --t /root/myenvs
import sys # 你要添加的目錄路徑
your_directory = '/root/myenvs' # 檢查該目錄是否已經在 sys.path 中
if your_directory not in sys.path: # 將目錄添加到 sys.path sys.path.append(your_directory) # 現在你可以直接導入該目錄中的模塊了
# 例如:import your_module