书生大模型实战营第四期-入门岛-2. Python关卡任务
书生大模型实战营-第四期
闯关手册:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/Python/task.md
任务类型 | 任务内容 | 预计耗时 |
---|---|---|
闯关任务 | Leetcode 383(笔记中提交代码与leetcode提交通过截图) | 20mins |
闯关任务 | Vscode连接InternStudio debug笔记 | 10mins |
可选任务 | pip安装到指定目录 | 10mins |
任务一
任务内容
完成Leetcode 383,笔记中提交代码与leetcode提交通过截图。
作业过程
结果:
代码:
python">from collections import Counterclass Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:# 统计每个字符出现的次数ransom_count = Counter(ransomNote)magazine_count = Counter(magazine)# 遍历 ransomNote 中的每个字符,检查 magazine 中是否有足够的供应for char, count in ransom_count.items():if magazine_count[char] < count:return Falsereturn True
任务二
任务内容
下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因并做修正。
TIPS:
- 打断点查看下LLM返回的文本结果。造成本bug的原因与LLM的输出有关,学有余力的同学可以尝试修正这个BUG。
- 作业提交时需要有debug过程的图文笔记,必须要有打断点在debug中看到
res
变量的值的截图。 - 避免将api_key明文写在程序中!!! 本段demo为了方便大家使用debug所以将api_key明文写在代码中,这是一种极其不可取的行为!
作业过程
首先在开发机中运行打断点并运行任务代码,查看LLM返回内容:
python">from openai import OpenAI
import json
import osdef 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')
# 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)
断点查看LLM返回结果res
,为markdown格式内容:
```json
{"模型名字": "书生浦语InternLM2.5","开发机构": "上海人工智能实验室","提供参数版本": [1.8B, 7B, 20B],"上下文长度": "1M"
}
debug界面打印的res
变量值:
python-debug-res" />
上述res返回markdown格式的一段json内容,通过正则表达式去除markdown语法部分,提取其中json格式字符串。修改后的代码如下:
python">from openai import OpenAI
import json
import os
import redef 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')
# 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)
# print(res)
res_string = re.search(r'```json\n(.*?)\n```', res, re.DOTALL).group(1)
# print(res_string)
res_json = json.loads(res_string)
print(res_json)
运行结果:
(myenv) root@intern-studio-50014188:~/camp4/L0/Python# python task2_xg.py
{'model_name': '书生浦语InternLM2.5', 'developer': '上海人工智能实验室', 'parameter_versions': ['1.8B', '7B', '20B'], 'max_context_length': '1M'}
任务三(可选)
任务内容
使用VScode连接开发机后使用pip install -t
命令安装一个numpy到看开发机/root/myenvs
目录下,并成功在一个新建的python文件中引用。
作业过程
使用pip的时候可以使用--target
或-t
参数来指定安装目录,此时pip会将你需要安装的包安装到你指定的目录下。
pip install numpy -t /root/myenvs
要引用指定目录的python包numpy
,python脚本开头临时动态地将该路径加入python环境变量中去。以下为代码示例:
python">import sysnumpy_dir = '/root/myenvs'if numpy_dir not in sys.path:sys.path.append(numpy_dir)import numpy as npprint("-"*30)# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])# 打印数组
print("一维数组:\n", arr)# 数组的基本操作
arr_sum = np.sum(arr) # 求和
arr_mean = np.mean(arr) # 求平均值
arr_max = np.max(arr) # 最大值
arr_min = np.min(arr) # 最小值print("数组求和:", arr_sum)
print("数组平均值:", arr_mean)
print("数组最大值:", arr_max)
print("数组最小值:", arr_min)print("-"*30)# 创建二维数组
matrix = np.array([[1, 2], [3, 4]])# 打印数组
print("二维数组:\n", matrix)# 矩阵加法
matrix_add = matrix + 5 # 每个元素加5
print("矩阵加法:\n", matrix_add)# 矩阵乘法
matrix_mult = matrix @ matrix # 矩阵乘法
print("矩阵乘法:\n", matrix_mult)print("-"*30)# 创建一个从0到10的等差数列
arr_range = np.arange(0, 10, 2)
print("等差数列:", arr_range)# 创建一个指定形状的全零数组
zeros_array = np.zeros((3, 3)) # 创建一个3x3的全零数组
print("全零数组:\n", zeros_array)# 创建一个指定形状的全一数组
ones_array = np.ones((2, 2)) # 创建一个2x2的全一数组
print("全一数组:\n", ones_array)