AI人工智能基础与实践(中职版)中等职业教育 · 项目化学习

CHAPTER 01 · 学生用书

第1章 计算机怎样处理信息:从二进制到人工智能

第1章章首原理图 五层表示剖面显示电平依次成为比特、字节和字符,经过程序处理后输出为屏幕像素。

(建议2课时,每课时45分钟)

章首语

在聊天软件中输入一句话,大模型可以继续生成文字;把摄像头对准物体,识别程序可以给出类别;向AI编程助手说明需求,它还可以生成一个网页。这些应用的功能不同,但在计算机内部,文字、图像、声音和程序都必须先表示为数字,处理器再按照程序完成运算。

本书安排了一项贯穿14章的综合项目——班级AI应用系统。这里的“系统”不是一台专用机器,也不是一个已经建好的网站。它由一个本地网站、逐章增加的AI功能模块,以及后期可以接入的摄像头、音箱或指示灯组成。第1章只完成项目目录和第一个小工具;后续章节再加入规则问答、机器学习、语言处理、图像识别和智能体等功能。

本章开发的是一个单文件离线网页,名称为“字符编码工具”。我们将输入 A、“智”和表情符号 🙂,观察它们怎样变成字节,再由字节还原为文字。这个任务能够直接说明一个基本事实:人工智能表现出的语言、视觉和行动能力,都建立在信息表示、程序执行和硬件计算之上。

学习目标

完成本章学习后,你将能够:

  1. 解释二进制为什么适合数字计算机表示信息。
  2. 说明字符编码怎样把文字转换为字节,并区分编码与加密。
  3. 用输入、存储、运算、输出解释一个程序的运行过程。
  4. 使用AI编程助手生成离线字符编码工具,并识读关键代码。
  5. 建立项目目录,分类保存任务说明、程序版本和测试记录。

本章项目 建立项目目录,开发字符编码工具

本章作品是一个可以离线运行的字符编码网页。第一版按照ASCII范围处理基础英文字母、数字和常用标点。它能够正确处理 AI,但不能处理“人工智能”和表情符号。完成跨组测试后,我们将分析失败原因,再把程序升级为使用UTF-8的第二版,使它能够编码并还原多种文字。

每组设置四个角色。需求负责人确定网页必须实现的功能;开发负责人向AI编程助手提交任务说明并保存程序;测试负责人选择不同类型的文字进行未知测试;记录讲解员整理两个版本的差异,并用“输入—处理—输出”说明程序怎样工作。三人组可以合并开发和记录角色,但测试负责人不要提前公开全部测试内容。

本章还要建立项目目录 AI_Project。此后各章的任务说明、程序、测试记录和展示材料都分类保存在这个目录中。目录结构保持稳定,才能比较不同版本,也能在程序出现问题时找到修改前的文件。

准备项目目录和运行环境

1.1 建立项目目录

在计算机中建立文件夹 AI_Project,再建立 ch01_encoding 子文件夹。子文件夹内设置 spec、versions 和 evidence 三个目录。spec 保存任务说明,versions 保存每一版可运行程序,evidence 保存测试记录和截图。文件夹名称只使用英文字母、数字和下画线,可以减少不同操作系统和软件处理文件路径时产生的问题。

目录 保存内容 本章示例
spec 目标、功能、约束和验收条件 ch01_spec_v01.md
versions 不同版本的可运行程序 index_v01.html、index_v02.html
evidence 测试、问题与展示证据 challenge_record.json

打开配套实训页 labs/ch01/index.html,完成运行环境检查。检查内容包括:浏览器能否运行本地脚本,能否下载测试记录,是否支持UTF-8编解码接口,以及页面断开网络后能否继续使用。如果学校提供AI编程助手,还要确认它能否根据文字说明生成一个完整的HTML文件。遇到检查失败时,应记录页面提示,便于判断是浏览器、文件权限还是程序本身的问题。

如果AI编程助手暂时不可用,可以直接使用配套离线网页完成两版编码实验。能够使用AI编程助手的小组,则根据任务说明生成第一版,并把配套网页作为参考版本。两种方式使用相同的测试项目、版本记录和评价标准。

1.2 把开发要求写成可以验收的任务说明

如果只对AI编程助手说“做一个把文字变成0和1的网页”,生成结果很难验收。这句话没有说明支持哪些文字、结果采用什么格式、遇到不能处理的字符时怎样提示,也没有说明网页能否联网。不同小组可能得到原理完全不同的程序,却无法判断哪一个符合学习任务。

因此,我们先把功能、限制和验收条件写清楚,开发一个故意限制字符范围的v0.1。将下面的任务说明保存为 spec/ch01_spec_v01.md,再提交给AI编程助手。

开发任务说明:字符编码工具 v0.1

目标:制作一个观察字符怎样变成二进制的离线网页。
文件:只生成一个 index.html,不引用外部脚本、字体、图片或网络接口。
输入:一个文字输入框和“编码”“还原”“清空”三个按钮。
字符范围:只支持基础英文字母、数字、空格和常用英文标点。
编码:按 ASCII 字符编号处理,每个编号补成8位二进制,同时显示十进制和十六进制。
范围外字符:不得猜测或截断;用“无法编码”标出其位置。
过程:页面显示“输入—查字符表—转换进制—输出”的四步记录。
验收:A 应得到十进制65和二进制 01000001;AI 可以编码并还原;人工智能 必须出现范围提示;关闭网络后仍能运行。

这份任务说明列出了目标、输入、处理、输出、异常情况和验收条件。得到代码后,将完整文件保存为 versions/index_v01.html。双击打开,依次测试 A、AI 和 2026。三个标准测试都符合要求后,再把这一文件标记为第一版。

用未知输入测试第一版

1.3 测试字符范围和异常提示

第一版通过 AI 和 2026 后,把程序交给另一组测试。对方从测试卡中选择至少八条内容,其中既有英文,也有汉字、空格、换行和表情符号。测试过程中不修改代码,只记录输入内容、编码结果、能否还原以及页面给出的提示。

测试内容 测试目的 v0.1应有的处理结果
A 单个基础英文字符 得到 01000001
AI 多字符顺序 输出两个8位编号
A I 空格也是字符 中间多出空格的编号
AI后换行 不可见控制字符 字节数量增加或提示不清
人工智能 汉字 超出第一版字符表
AI助手 中英文混合 只有部分字符可编码
🙂 表情符号 超出第一版字符表
AI 全角字母 看起来相似,编号却不同

测试结果不能只写“成功”或“失败”。输入 A 时,应记录十进制65、十六进制41和二进制 01000001;出现范围外字符时,应记录字符及其位置;测试空格、换行和全角字符时,应比较输入前后的字节变化。一次完整测试至少要保留一个正常结果、一个范围外结果和一个“外形相似但编码不同”的结果。

第一版不能处理汉字,不一定表示程序写错了。v0.1的任务说明本来就把字符范围限定在ASCII以内,它正确执行了这项限制。问题在于,这一范围无法表示世界上多种语言的文字。早期计算系统也曾针对特定语言和设备使用不同字符表。当发送方和接收方采用不同编码时,同一组字节可能显示成不同文字,也可能出现乱码。

测试结束后,先不要让AI直接改写程序。我们先解释 A 的八个二进制位怎样表示十进制65,再比较 A、“智”和 🙂 分别需要多少字节。理解字符、编号和字节之间的关系后,才能判断第二版应该采用什么编码方式。

计算机怎样表示文字

1.4 为什么数字计算机偏爱0和1

二进制是只使用0和1表示数值的一种计数方法。十进制各位的权值依次是1、10、100、1000,二进制各位的权值依次是1、2、4、8、16、32、64、128。两种计数方法都能表示数值,区别在于采用的基数不同。

八位二进制 01000001 从右向左对应1、2、4、8、16、32、64、128。只有64和1的位置为1,所以它表示十进制65。字符表再约定“编号65代表大写字母A”,屏幕上才出现 A。0和1本身不是字母,也不含有字母的形状;意义来自发送者、程序和接收者共同遵守的约定。

数字电路用两类容易区分的物理状态表示0和1,例如一定范围内的高电平和低电平。实际电信号会受到噪声影响,只要两类状态的取值范围能够清楚区分,电路就可以可靠地保存、传递和处理信息。因此,二进制适合电子计算机,并不是因为0和1本身特殊,而是因为两种状态便于用电子器件实现。

一个二进制位称为比特(bit)。八个比特通常组成一个字节(byte)。字节是计算机存储和传输数据时常用的基本单位。第一版把一个ASCII字符显示成一个8位字节,因此 AI 显示为两个字节。在UTF-8中,一个Unicode码点使用一至四个字节,不能把“一个字符”等同于“一个字节”。

图1-1 物理状态、比特、数值、字符与屏幕文字之间的表示层次

1.5 字符编码给数字和文字建立对应关系

编码是按照约定,把信息转换成便于存储、传输或处理的表示形式。字符编码规定字符与数字之间的对应关系;解码则按照同一规则,把数字表示还原为字符。不同程序和设备使用同一种字符编码,才能一致地读取文字。

美国信息交换标准代码(American Standard Code for Information Interchange,ASCII)使用7位编号表示128个字符,包括英文字母、数字、标点和控制字符。在以字节为单位的系统中,它们常放在一个8位字节中,最高位为0。大写字母A的编号是65,十六进制为41,显示成8位二进制就是 01000001。

ASCII能够表示基础英文字符,却无法表示世界上众多书写系统。后来,不同地区又使用了多种字符编码。如果文件按照一种编码保存,却被程序按照另一种编码读取,原有字节没有改变,显示结果仍可能成为乱码。产生乱码的原因通常是保存和读取时使用的编码不一致。

统一码(Unicode)为不同书写系统中的字符规定统一码点。UTF-8、UTF-16和UTF-32再规定这些码点怎样转换成字节或代码单元。UTF-8(Unicode Transformation Format-8)以字节为基本单位,一个Unicode码点使用一至四个字节。ASCII范围内的字符在UTF-8中仍使用一个字节,汉字和表情符号也可以用UTF-8表示。

以UTF-8为例,大写字母A的十六进制表示仍是 41,占一个字节;汉字“智”表示为 E6 99 BA,占三个字节;表情符号 🙂 表示为 F0 9F 99 82,占四个字节。字节数不同,不能用来判断某种文字更复杂或更高级。它只反映UTF-8怎样把不同码点转换为字节序列。

文本 UTF-8十六进制字节 字节数
A 41 1
AI 41 49 2
智 E6 99 BA 3
🙂 F0 9F 99 82 4

字符编码不是加密。任何知道编码规则的人都可以把字节还原成文字;加密则需要密钥或其他安全机制,使未获授权的人难以读懂内容。把二进制写得很长,只是改变了表示形式,并没有自动保护秘密。本章接力赛使用课堂虚拟短语,不编码真实密码、身份证号或私人谈话。

【旁注】十六进制使用0—9和A—F表示数。一个十六进制数字正好对应四个二进制位,因此程序员常用两个十六进制数字简洁地记录一个字节。

算法、程序和计算机硬件

1.6 算法和程序有什么区别

编码表只规定字符与编号的对应关系,网页还需要一套处理步骤。输入文字后,程序要逐个读取字符、查找编号、转换成二进制,再按原顺序显示。如果遇到范围外字符,程序还要报告字符位置,不能把残缺结果当作完整结果。这样一组有限、明确、可以重复执行的步骤就是算法。

算法是为解决一类问题而设计的、具有明确先后关系和结束条件的步骤。菜谱和操作规程也有步骤,但计算机算法还要求每一步能够被准确执行,输入和输出范围可以说明,并且在有限步骤后停止。

下面是第一版编码算法的简化表达。它不是某种编程语言,却已经能让人检查处理顺序。

输入一段文字
依次取出每个字符
如果字符在 ASCII 范围内:
    查到字符编号
    把编号写成 8 位二进制
    保存到输出列表
否则:
    记录字符位置和“无法编码”
显示输出列表与处理记录
结束

程序是用计算机能够执行的语言表示算法和数据的指令集合。同一个算法可以用不同编程语言实现,也可以采用不同界面。算法回答“准备怎样解决问题”,程序则是能够在具体计算机上运行的实现。

AI编程助手生成 index_v01.html 时,文件中通常包含三类内容:HTML描述页面结构,CSS控制页面样式,JavaScript读取输入并执行编码算法。浏览器读取这个文件后,显示输入框和按钮,并在用户操作时运行相应程序。现阶段不要求逐行掌握全部语法,但要能指出输入、核心算法、结果输出和异常处理分别位于什么位置。

1.7 一次程序运行需要哪些硬件功能

按下“编码”按钮时,一次计算开始了。键盘和输入框把文字送入系统;内存暂时保存文字、字节和中间结果;处理器执行程序中的判断和转换;屏幕显示最终结果。如果保存文件,存储设备还会在断电后长期保留程序和记录。

功能 在字符编码工具中的表现 常见硬件或部件
输入 键盘输入文字、鼠标点击按钮 键盘、鼠标、触摸屏
存储 保存程序、规则和实验记录 内存、固态硬盘
运算与控制 执行查表、判断、进制转换 中央处理器等计算部件
输出 显示文字、字节、错误和日志 显示器、音箱、打印机

这里的“存储”包含不同时间尺度。内存适合程序运行时快速读写,断电后通常不保留当前内容;固态硬盘等存储设备用于长期保存文件。处理器也不是独自完成全部工作,它不断从内存取得指令和数据,把结果写回,再通过输入输出设备与人和环境连接。

通用计算机可以完成文字处理、图像编辑、音乐播放和人工智能推理等不同任务,原因在于多种信息都能表示为数字,不同程序再按照各自的算法处理这些数字。同一台计算机运行不同程序,就可以完成不同任务。

这不表示计算机可以无条件解决任何问题。一个任务首先要有可以取得的输入和能够执行的步骤,还会受到运行时间、存储容量、数据质量和算法能力的限制。有些问题缺少必要信息,有些计算需要过长时间,有些现实决定也必须由人承担责任。学习人工智能,既要了解计算机能够完成什么,也要了解它受到哪些条件限制。

1.8 人工智能系统也要完成信息表示和计算

人工智能系统处理的对象比本章的字符更加丰富,但基本过程相同。文字可以编码为数字序列,图像可以表示为像素数值,声音可以经过采样变成数字序列,训练后的模型也保存为大量数值。模型运行时,处理器按照程序对这些数据进行运算,再把结果转换为人能看到或听到的文字、图像和声音,或者转换为设备动作。

因此,大模型生成文字、图像识别程序判断物体,以及智能体调用工具,都可以从“输入—表示—计算—输出”四个环节进行分析。它们采用的算法远比字符编码复杂,处理的数据规模也大得多,但都离不开数字表示、程序和计算机硬件。后续章节将继续学习数据、模型、训练、自然语言处理、计算机视觉和内容生成的基本原理。

图1-2 人工智能系统从输入、数字表示、程序与模型计算到输出的基本链路

用UTF-8完成第二版

第一版的测试记录已经说明ASCII范围不能表示汉字和表情符号。第二版不再逐个添加字符规则,而是使用浏览器提供的UTF-8编解码接口。修改前先复制 index_v01.html,将新文件命名为 index_v02.html,不得覆盖第一版。保留两个版本,才能比较修改前后的字符范围、字节数量和异常处理。

把下面的版本升级说明提交给AI编程助手,或者在配套网页中切换到v0.2。

版本升级说明:字符编码工具 v0.2

  1. 使用浏览器内置的 TextEncoder 按 UTF-8 把文字转换为字节。
  2. 每个字节同时显示十六进制和8位二进制。
  3. 显示用户看到的字符数量和实际 UTF-8 字节数量,不把二者混为一谈。
  4. 使用 TextDecoder 完成还原;字节格式错误时必须提示,不得输出似是而非的文字。
  5. 增加“复制字节”“交换后还原”和“导出测试记录”。
  6. 保持单文件、中文界面和离线运行,不增加网络请求。

第二版的核心代码可能接近下面两行。第一行把文字交给 UTF-8 编码器,得到字节序列;第二行把每个字节补足为8位二进制,再用空格连接。变量名和页面结构可能不同,但处理方向应当一致。

const bytes = new TextEncoder().encode(text);
const binary = [...bytes].map(byte => byte.toString(2).padStart(8, "0")).join(" ");

完成代码后,重新运行第一版的全部挑战,特别检查 A、AI、人工智能、AI助手、🙂、空格、换行和全角字母。第二版应能完整编码并还原,但输出字节数会不同。测试记录必须显示至少两项版本差异:支持范围扩大;字符数量与字节数量不再总是相等。

如果页面能编码却不能还原,先检查输入字节是否按空格分开、十六进制是否含非法字符、解码器是否明确使用 UTF-8。让 AI 修复时应提交实际输入、实际输出、预期输出和错误提示,而不是只说“不能用”。这种依据运行证据提出修改的方式,将贯穿后续所有作品。

完成跨组编码测试和项目记录

每组选择一条4—10个字符的课堂短语,至少包含英文、汉字或表情符号中的两类。使用 v0.2 生成十六进制字节,把字节交给另一组,但不交原文。接收组将字节粘贴到还原区,记录能否恢复原文。如果失败,两组先核对是否使用同一种编码,再检查复制时是否丢失或增加字节。

展示控制在六十秒。前十五秒说明 v0.1 能处理什么;接着用一个汉字或表情符号展示它的边界;随后展示 v0.2 的 UTF-8 字节和成功还原;最后指向计算机的输入、存储、运算和输出四个环节。展示重点不是谁的二进制串更长,而是谁能准确说明每一层表示和程序步骤。

完成接力后,在 AI_Project 根目录建立 PROJECT_RECORD.md,记录小组名称、使用设备和浏览器、本章采用的开发方式、离线备用方式,以及两个程序版本的保存位置。至此,班级AI应用系统完成第一个功能模块。下一章将开发规则问答机器人,用一个可运行程序观察早期人工智能的规则方法。

安全与责任

本章只使用虚构短语和公开文字,不输入真实账号、密码、身份证号、住址和私人聊天内容。AI编程助手生成的网页应保持离线,不上传用户输入。打开其他小组的文件前,先确认来源和文件类型;本章只运行经过教师或配套资源确认的HTML文件,不运行来源不明的可执行程序。保存新版本时,应保留旧版和测试记录,不能通过覆盖文件隐藏失败结果。

本章小结

数字计算机用容易区分的两类物理状态表示二进制位,八个比特通常组成一个字节。数字本身没有固定的文字含义,字符编码通过共同约定建立字符与数字表示的对应关系。ASCII覆盖基础英文字符,Unicode为不同书写系统中的字符规定统一码点,UTF-8再把码点编码为一至四个字节。编码用于一致地表示和交换信息,不等同于加密。

算法说明解决问题的明确步骤,程序把算法和数据写成计算机可以执行的形式。一次程序运行可以从输入、存储、运算和输出四个方面观察。文字、图像、声音和模型都能表示为数字,人工智能系统也必须由程序在硬件上完成计算。它的能力十分丰富,但仍受到输入、算法、数据、硬件和责任边界约束。

本章建立了 AI_Project 项目目录,并保留字符编码工具的两个版本。v0.1按照ASCII范围处理字符,v0.2使用UTF-8扩大了可处理的文字范围。我们先用未知输入确认第一版的适用范围,再根据字符编码原理完成升级。这种“保存版本—运行测试—分析证据—修改程序”的方法,将继续用于班级AI应用系统的后续开发。

习题

基础题

  1. 十进制65为什么可以写成二进制 01000001?请指出其中哪些位的权值相加得到65。
  2. 编码器收到 01000001 后,为什么还需要知道编码约定,才能把它显示成A?
  3. 分别用一句话说明算法和程序,并举出二者在本章作品中的对应内容。
  4. “把真实密码变成二进制就安全了”是否正确?请说明理由。

应用题

  1. 某小组发现字符串 AI 占2个 UTF-8 字节,而 智 占3个字节。能否据此判断一个汉字等于三个英文字符?为什么?
  2. 一个离线编码页面点击按钮后没有输出。请按照输入、存储、运算、输出四个环节,分别提出一项检查内容。

探究题

  1. 【选做】分别测试半角字母 A、全角字母 A、数字 1 和汉字 一,记录它们的 UTF-8 字节。说明“看起来相似”为什么不能代替编码检查。
  2. 【选做】选择电商商品编号、数媒文件名或汽车零件记录中的一种文本,设计三条命名规则,使它在不同电脑之间交换时更不容易产生编码和路径问题。

本章交付物

1. 主作品与过程证据

提交 AI_Project/ch01_encoding 文件夹,包含任务说明、index_v01.html、index_v02.html、至少八条测试内容的记录和 PROJECT_RECORD.md。两个版本都应能够离线打开,测试记录应清楚显示第一版的字符范围以及第二版采用UTF-8后的变化。

评价维度 达成标志
项目目录 任务说明、程序版本和测试证据分别保存,文件命名清楚
作品运行 两版均可离线打开,编码与还原行为符合任务说明
测试证据 包含英文、汉字、混合文字、空白或表情符号
原理解释 能说明二进制、编码、算法、程序和四类硬件功能
责任边界 明确编码不是加密,不处理真实敏感信息

2. 自评单

  • [ ] 我能用64加1解释 01000001 为什么表示65。
  • [ ] 我能说明字符、字节和屏幕文字不是同一层概念。
  • [ ] 我保留了 v0.1,没有用最终文件覆盖第一版证据。
  • [ ] 我能指出程序中的输入、算法、输出和异常处理位置。
  • [ ] 我们用另一组提供的未知输入完成了测试。
  • [ ] 我知道编码不能代替加密,也没有输入真实密码。

打开本章离线实训