Hands-on dengan Qiskit: Hello World - Corak Qiskit
Dalam notebook ini kamu akan melalui aliran kerja Qiskit Patterns, dan menggunakan primitif Sampler Qiskit.
Tutorial ini sebahagiannya melibatkan kandungan daripada Dokumentasi IBM Quantum: Hello World.
Pautan berguna:
- Buat akaun IBM Cloud untuk mengakses Platform IBM Quantum.
- Bagi yang ada emel universiti: dapatkan kod ciri di sini untuk melanjutkan tempoh percubaan percuma kamu.
- Bagi yang tiada emel universiti: arahan untuk mengaktifkan akaun kamu. Aktifkan akaun sepenuhnya dengan mendaftarkan kad kredit. Kad kredit kamu tidak akan dicaj dalam proses ini atau secara rawak selepas pendaftaran. Pengaktifan ini membolehkan kamu terus mengakses sumber percuma dalam IBM Cloud dan platform IBM Quantum selepas tempoh percubaan tamat (30 hari).
- Kita akan menggunakan platform berasaskan awan untuk menyediakan persekitaran pengekodan. Kamu boleh menggunakan sama ada QBraid atau Google Colab.
- Selepas notebook ini, kita akan melihat protokol Teleportasi Kuantum.
Lebih banyak pautan - komuniti Qiskit dan sumber pembelajaran lanjut:
- Grok sphere
- IBM Quantum Composer
- IBM Quantum Learning
- Kuliah Qiskit Global Summer School 2025
- Pensijilan Qiskit v2.X
- Program peguam Qiskit
- Latihan industri musim panas kuantum
- YouTube Qiskit
Pasang Qiskitβ
Kamu boleh menggunakan persekitaran jupyter lab dalam talian (lihat panduan Persekitaran lab dalam talian) atau pasang Qiskit secara tempatan.
Ikuti panduan pemasangan Qiskit Pasang Qiskit SDK dan klien Qiskit Runtime untuk melengkapkan langkah-langkah berikut:
-
Pasang Qiskit termasuk pakej visualisasi tambahan:
pip install qiskit[visualization] -
Pasang qiskit-ibm-runtime:
pip install qiskit-ibm-runtime -
Pasang jupyter:
pip install jupyterSemak bahawa versi Python yang kamu gunakan dalam persekitaran kamu adalah python>=3.10, untuk memastikan ia serasi dengan versi Qiskit terkini:
# Added by doQumentation β required packages for this notebook
!pip install -q IPython
from platform import python_version
print(python_version())
3.13.7
Jika kamu perlu menaik taraf Python dan tidak pasti cara melakukannya, rujuk panduan ini tentang cara menaik taraf Python mengikut OS kamu: Cara mengemaskini Python
%pip install qiskit[visualization]
%pip install qiskit-ibm-runtime
%pip install
%pip install qiskit-aer
zsh:1: no matches found: qiskit[visualization]
Note: you may need to restart the kernel to use updated packages.
Requirement already satisfied: qiskit-ibm-runtime in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (0.43.0)
Requirement already satisfied: requests>=2.19 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.32.5)
Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (1.3.0)
Requirement already satisfied: numpy>=1.13 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.3.3)
Requirement already satisfied: urllib3>=1.21.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.5.0)
Requirement already satisfied: python-dateutil>=2.8.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.9.0.post0)
Requirement already satisfied: ibm-platform-services>=0.22.6 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (0.69.0)
Requirement already satisfied: pydantic>=2.5.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.12.2)
Requirement already satisfied: qiskit>=1.4.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.2.1)
Requirement already satisfied: packaging in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (25.0)
Requirement already satisfied: ibm_cloud_sdk_core<4.0.0,>=3.24.2 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (3.24.2)
Requirement already satisfied: PyJWT<3.0.0,>=2.10.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from ibm_cloud_sdk_core<4.0.0,>=3.24.2->ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (2.10.1)
Requirement already satisfied: six>=1.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from python-dateutil>=2.8.0->qiskit-ibm-runtime) (1.17.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.4)
Requirement already satisfied: idna<4,>=2.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.11)
Requirement already satisfied: certifi>=2017.4.17 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2025.10.5)
Requirement already satisfied: annotated-types>=0.6.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.7.0)
Requirement already satisfied: pydantic-core==2.41.4 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (2.41.4)
Requirement already satisfied: typing-extensions>=4.14.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (4.15.0)
Requirement already satisfied: typing-inspection>=0.4.2 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.4.2)
Requirement already satisfied: rustworkx>=0.15.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (0.17.1)
Requirement already satisfied: scipy>=1.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (1.16.2)
Requirement already satisfied: dill>=0.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (0.4.0)
Requirement already satisfied: stevedore>=3.0.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (5.5.0)
Requirement already satisfied: cryptography>=1.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (46.0.2)
Requirement already satisfied: pyspnego>=0.4.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (0.12.0)
Requirement already satisfied: cffi>=2.0.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.0.0)
Requirement already satisfied: pycparser in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from cffi>=2.0.0->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.23)
Note: you may need to restart the kernel to use updated packages.
[31mERROR: You must give at least one requirement to install (see "pip help install")[0m[31m
[0mNote: you may need to restart the kernel to use updated packages.
Requirement already satisfied: qiskit-aer in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (0.17.2)
Requirement already satisfied: qiskit>=1.1.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (2.2.1)
Requirement already satisfied: numpy>=1.16.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (2.3.3)
Requirement already satisfied: scipy>=1.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (1.16.2)
Requirement already satisfied: psutil>=5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (7.1.0)
Requirement already satisfied: python-dateutil>=2.8.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from python-dateutil>=2.8.0->qiskit-aer) (1.17.0)
Requirement already satisfied: rustworkx>=0.15.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.17.1)
Requirement already satisfied: dill>=0.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.4.0)
Requirement already satisfied: stevedore>=3.0.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (5.5.0)
Requirement already satisfied: typing-extensions in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (4.15.0)
Note: you may need to restart the kernel to use updated packages.
Buat import yang diperlukanβ
Jom buat import yang diperlukan untuk tutorial ini.
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
import qiskit_ibm_runtime
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.quantum_info import SparsePauliOp
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector, plot_state_qsphere
from IPython.display import display, Latex
Sediakan akaun IBM Quantum Platform kamuβ
Untuk melaksanakan litar kuantum pada perkakasan sebenar, kamu memerlukan akaun IBM Cloud.
Ikuti arahan dalam panduan ini Sediakan akaun IBM Cloud kamu untuk melengkapkan langkah-langkah berikut:
- Sediakan akaun IBM Cloud jika kamu belum ada.
- Log masuk atau buat akaun Platform IBM Quantum dengan IBMid.
- Akses papan pemuka IBM Quantum Platform kamu, buat token API kamu, dan salinnya ke lokasi yang selamat. (Lihat imej rujukan pertama di bawah.)
- Dalam sel kod yang mengikuti imej rujukan, gantikan
deleteThisAndPasteYourAPIKeyHeredengan kunci API kamu. - Pergi ke halaman Instances daripada menu utama β° dan buat instance kamu. Jika kamu bukan sebahagian daripada institusi Rangkaian, pilih pelan terbuka. (Lihat imej rujukan kedua di bawah.)
- Selepas instance dibuat, salin kod CRN yang berkaitan. (CRN bermaksud Cloud Resource Names) Kamu mungkin perlu muat semula untuk melihat instance tersebut.
- Dalam sel kod yang mengikuti imej rujukan, gantikan
deleteThisAndPasteYourCRNHeredengan kod CRN kamu.
Nota: Perlakukan kunci API kamu seperti kata laluan yang selamat. Rujuk panduan Sediakan akaun IBM Cloud kamu untuk maklumat lanjut tentang penggunaan kunci API kamu dalam persekitaran selamat dan tidak dipercayai.
#@title personals
your_api_key = "YOUR_API_KEY"
your_crn = "YOUR_CRN"
from qiskit_ibm_runtime import QiskitRuntimeService
# Save your API key to access real devices
your_api_key = your_api_key
your_crn = your_crn
QiskitRuntimeService.save_account(
channel="ibm_cloud",
token=your_api_key,
instance=your_crn,
set_as_default=True,
overwrite=True,
)
Buat dan jalankan algoritma kuantum mudah menggunakan rangka kerja corak Qiskitβ
Rangka kerja konseptual corak Qiskit boleh dianggap sebagai anatomi algoritma kuantum.
Empat langkah untuk menulis program kuantum menggunakan corak Qiskit ialah:
-
Petakan masalah kepada format natif kuantum.
-
Optimumkan Circuit dan operator.
-
Laksanakan menggunakan fungsi primitif Qiskit.
-
Analisis keputusan.
Langkah 1. Petakan masalah kepada format natif kuantumβ
Dalam program kuantum, Circuit kuantum adalah format natif untuk mewakili arahan kuantum, dan operator mewakili pemerhatian yang akan diukur. Apabila mencipta Circuit, kamu biasanya akan mencipta objek QuantumCircuit baru, kemudian tambahkan arahan kepadanya secara berurutan.
Demonstrasi: Membina Circuit kuantum asas dalam Qiskitβ
Jom cuba bina beberapa Circuit mudah dengan Qiskit.
# Simple quantum circuit with two qubits and two classical bits
# Create quantum circuit with 2 qubits and 2 classical bits
qc = QuantumCircuit(2)
# Add gates to your circuit
qc.x(0)
qc.s(1)
# Draw the output using MatPlotLib
qc.draw(output='mpl')
# Quantum circuit with a Quantum Register named 'qr' that has two qubits, and a Classical Register named 'cr' with two classical bits
# Create a quantum register with 2 qubits, register label is 'qr'
qreg = QuantumRegister(2)
# Create a classical register with 2 qubits, register label is 'cr'
creg = ClassicalRegister(2)
# Create a quantum circuit with registers qreg and creg
qc = QuantumCircuit(qreg, creg)
# Add gates to your registers
qc.x(qreg[0])
# Draw the quantum circuit
qc.draw(output='mpl')
Latihan: Membina Circuit kuantum asas dalam Qiskitβ
Buat Circuit untuk keadaan Bell
# Create a new circuit with two qubits
qc = QuantumCircuit(2)
# Add a Hadamard gate to qubit 0
qc.h(0)
# Perform a controlled-X gate on qubit 1, controlled by qubit 0
qc.cx(0,1)
# Return a drawing of the circuit using MatPlotLib ("mpl").
qc.draw('mpl')
Keadaan awal Circuit kuantum adalah keadaan .
Keadaan akhir ialah:
# Use Statevector to fetch the statevector of the circuit
sv = Statevector(qc)
sv.draw(output='latex')
Nota tentang penomboran bit dalam Qiskit
Qiskit menomborkan bit dalam rentetan dari kanan ke kiri. Qiskit SDK menggunakan penomboran bit LSb 0. Apabila memaparkan atau mentafsir senarai bit (atau Qubit) sebagai rentetan, bit adalah bit paling kiri, dan bit adalah bit paling kanan. Ini kerana kita biasanya menulis nombor dengan digit paling bererti di sebelah kiri, dan dalam Qiskit, bit ditafsirkan sebagai bit paling bererti. Untuk maklumat lanjut, lihat topik Susunan bit dalam Qiskit SDK.
#LSB ordering example
qc2 = QuantumCircuit(2)
qc2.x(1)
qc2.draw("mpl")
sv2 = Statevector(qc2)
sv2.draw(output='latex')
Adakah kita perlukan Gate pengukuran?
Apabila mencipta Circuit kuantum, kamu juga perlu mempertimbangkan jenis data yang ingin dikembalikan selepas pelaksanaan. Qiskit menyediakan dua cara untuk mengembalikan data: kamu boleh mendapatkan nilai jangkaan pemerhatian, atau kamu boleh mendapatkan taburan kebarangkalian untuk set Qubit yang kamu pilih untuk diukur. Sediakan beban kerja kamu untuk mengukur Circuit kamu dalam salah satu daripada dua cara ini dengan primitif Qiskit.
- Primitif
Sampler- mengembalikan taburan kebarangkalian untuk set Qubit yang kamu pilih untuk diukur. Contoh:
- Primitif
Estimator- mengembalikan nilai jangkaan pemerhatian. Contoh:
Kita akan menggunakan Sampler hari ini, jadi kita perlu menambah Gate pengukuran pada Circuit kita.
# Use measure_all, which adds a barrier, applies measurement gates on all qubits, creates a classical register called `meas`
qc.measure_all()
qc.draw('mpl')
Langkah 2. Optimumkan Circuit untuk perkakasan yang ditujuβ
Bila melaksanakan Circuit pada peranti, penting untuk mengoptimumkan set arahan yang terkandung dalam Circuit dan meminimumkan kedalaman keseluruhan (lebih kurang bilangan arahan) Circuit tersebut. Ini memastikan kamu dapat hasil terbaik dengan mengurangkan kesan ralat dan hingar. Selain itu, arahan dalam Circuit mesti mematuhi Instruction Set Architecture (ISA) peranti Backend dan perlu mengambil kira gate asas serta ketersambungan Qubit peranti.
Kod berikut membuat simulator untuk menghantar kerja dan mengubah Circuit serta observable supaya sepadan dengan ISA Backend tersebut. Perlu diingat bahawa kita akan guna peranti sebenar kemudian.
# option:
from qiskit_ibm_runtime.fake_provider import FakeTorino
backend = FakeTorino()
print(
f"Name: {backend.name}\n"
f"Version: {backend.version}\n"
f"Native gate set: {backend.operation_names}\n"
)
#to view other properties you can use properties()
# refer to https://docs.quantum.ibm.com/guides/get-qpu-information
Name: fake_torino
Version: 2
Native gate set: ['for_loop', 'delay', 'cz', 'id', 'sx', 'measure', 'reset', 'switch_case', 'if_else', 'rz', 'x']
# Convert to an ISA circuit
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
isa_circuit_sampler = pm.run(qc)
isa_circuit_sampler.draw("mpl", idle_wires=False)

Langkah 3. Laksanakan menggunakan primitif Qiskitβ
Komputer kuantum boleh menghasilkan keputusan rawak, jadi biasanya kamu kumpul sampel output dengan menjalankan Circuit beberapa kali. Kamu boleh anggarkan nilai observable menggunakan kelas Estimator. Sampler boleh digunakan untuk dapat data daripada komputer kuantum. Objek-objek ini ada kaedah run() yang melaksanakan pilihan Circuit, observable, dan parameter (jika berkaitan), menggunakan primitive unified bloc (PUB).
# Create a sampler instance using the selected backend
sampler = Sampler(backend)
# Run the sampler primitive on ISA circuit for specified number of shots (1024)
job_sampler = sampler.run([isa_circuit_sampler], shots=1024)
# Save the result of the job
result_sampler = job_sampler.result()
Langkah 4. Proses keputusan selepas pelaksanaanβ
Langkah ini melibatkan pemprosesan keputusan yang diperoleh. Kamu mungkin akan masukkan keputusan ini ke dalam aliran kerja lain untuk analisis lanjut atau sediakan plot nilai dan data utama. Secara umumnya, langkah ini khusus untuk masalah kamu.
- Untuk
Sampler, kita plot taburan kebarangkalian yang diperoleh dengan mengambil sampel Circuit kuantum sebanyak bilangan shots yang kamu tentukan menggunakanplot_histogram.
from qiskit.visualization import plot_histogram
counts = result_sampler[0].data.meas.get_counts()
# Note: meas is the default name of the classical register when using measure_all().
# If you specify a classical register, then use the name you assign
# Plot the result
plot_histogram(counts)

Jalankan program pada peranti sebenar
Kalau kamu nak jalankan kod ini pada peranti sebenar, kamu boleh guna kod berikut.
from qiskit_ibm_runtime import QiskitRuntimeService
# View the list of backends you have access to
service = QiskitRuntimeService()
service.backends()
management.get:WARNING:2025-11-03 14:24:36,838: Loading default saved account
[<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_brisbane')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_marrakesh')>]
# Get backend
backend_real = service.least_busy(simulator=False, operational=True)
#backend_real = service.backend(name="insert_backend_name") # use this if you want to choose a specific backend
sampler = Sampler(backend_real)
pm = generate_preset_pass_manager(backend=backend_real, optimization_level=3)
isa_circuit = pm.run(qc)
job = sampler.run([isa_circuit], shots=1024)
print(job.job_id)
<bound method BasePrimitiveJob.job_id of <RuntimeJobV2('d444lcg7i53s73e4n6tg', 'sampler')>>
result = job.result()
print(
f"Name: {backend_real.name}\n"
f"Version: {backend_real.version}\n"
f"Native gate set: {backend_real.operation_names}\n"
)
Name: ibm_fez
Version: 2
Native gate set: ['delay', 'cz', 'id', 'sx', 'measure', 'reset', 'if_else', 'rz', 'x']
counts = result[0].data.meas.get_counts()
plot_histogram(counts)

Ambil keputusan daripada kerja yang telah selesaiβ
Sel di bawah menunjukkan cara kamu boleh ambil keputusan daripada kerja yang telah selesai.
service = QiskitRuntimeService()
retrieved_job = service.job('d40mquhsg33c73dhhs00')
result = retrieved_job.result()
counts = result[0].data.meas.get_counts()
plot_histogram(counts)
management.get:WARNING:2025-11-03 14:24:55,135: Loading default saved account
