工程师实测在嵌入式设备上部署DeepSeek-R1大模型:效果出人意料

原创 电子工程世界 2025-02-28 08:04
2025年伊始,DeepSeek的惊艳登场再次刷新了大众对AI技术的认知边界。随着其迅速走红,越来越多的AI芯片厂商纷纷宣布适配DeepSeek,展现出这一新兴技术的强大潜力和吸引力。作为一名电子工程师,您是否已经抢先完成了DeepSeek的本地部署?如果您还在摸索阶段,不妨参考一下EEWorld论坛上众多网友分享的宝贵经验。
Raspberry Pi 5 ——本地部署DeepSeek-R1大模型
作者:xusiwei1236
原文链接:https://www.eeworld.com.cn/aTmbD4S

一、DeepSeek简介

1.1 发展历程

DeepSeek是由中国深度求索公司开发的开源大语言模型系列,其研发始于2023年,目标是为学术界和产业界提供高效可控的AI基础设施。R1系列作为其里程碑版本,通过稀疏化架构和动态计算分配技术,在保持模型性能的同时显著降低了计算资源需求。

1.2 模型特点

  • 参数规模灵活:提供1.5B/7B/33B等多种规格

  • 混合精度训练:支持FP16/INT8/INT4量化部署

  • 上下文感知优化:动态分配计算资源至关键token

  • 中文优化:在Wudao Corpus等中文数据集上强化训练

1.3 技术突破

相比传统LLM,DeepSeek-R1通过以下创新实现低资源部署:
  1. MoE架构:专家混合层动态路由计算路径

  2. 梯度稀疏化:反向传播时仅更新关键参数

  3. 自适应量化:运行时根据硬件自动选择最优精度

二、ollama简介

2.1 软件简介

Ollama是一个获取和运行大语言模型的工具,官网的简介是:

Get up and running with large language models.

2.2 主要功能

最常用的两个功能是:
  • 下载大语言模型;

  • 运行大语言模型;
    除此之外还有很多功能,通过它的命令行帮助信息可以看到:

    基本上可以归纳为两类功能:

  • 模型文件管理:下载(pull)、创建(create)、删除(rm)、拷贝(cp)、查看(list)、上传(push)、查看模型信息(show)

  • 模型运行管理:运行(run)、启动(serve)、停止(stop)、查看正在运行的模型(ps)
    2.3 主要优势
    其核心优势包括:

  • 跨平台支持(Linux/Windows/macOS);

  • 支持NIVIDA/AMD GPU加速,如有相应GPU推理速度快;

  • 使用简单,安装软件、下载模型、运行模型均只需要一条命令

三、安装ollama

安装ollama非常简单,官网提供了在线安装脚本(install.sh)。
在树莓派5上,使用如下命令即可下载在线安装脚本并运行:
curl -fsSL https://ollama.com/install.sh | sh
运行输出如下:
安装后,会自动启动服务进程:
ps -ef | grep ollama
执行如下:

四、下载deepseek-r1:1.5b模型

安装好了ollama之后,我们就可以使用ollama下载deepseek-r1:1.5b模型了,使用如下命令:
ollama pull deepseek-r1:1.5b

五、运行deepseek-r1:1.5b模型

下载好了deepseek-r1:1.5b模型之后,我们就可以使用ollama运行deepseek-r1:1.5b模型了,使用如下命令:
ollama run deepseek-r1:1.5b
直接运行也可以,该命令会下载模型,再运行,非常方便!
再问一个经典的快速排序问题,回答如下:
>>> 用Python写一个快速排序的函数,实现对包含整数的列表进行排序

嗯,我现在需要帮用户写一个用于快速排序的Python函数,而且用户已经给了这个任务。首先,我要理解用户的需求是什么。他们可能是一个刚开始学编程的人,或者
需要快速完成一个简单的排序程序。

接下来,我应该分析用户的使用场景和身份。可能是刚接触编程的新手,或者是需要快速实现一个基本功能的用户。用户的真实需求应该是了解如何编写一个高效的排
序函数,并且能够运行在实际的应用中。

然后是思考用户可能没有明确表达出来的深层需求。比如,他们可能不仅仅想看到代码,还希望了解排序算法的基本原理、优缺点,或者如何优化这个函数以提高效率
。这些都是潜在的需求,可能会帮助我更全面地回答问题。

现在,我要考虑用户的编程基础情况。快速排序作为一种高效的排序算法,通常需要理解递归的策略和选择基准点的能力。因此,如果用户的基础较弱,可能在实现过
程中会遇到一些困难,比如如何正确分割数组或选择合适的基准点。因此,我的解释应该详细但易于理解,确保用户能够逐步掌握。

我还需要思考现有的代码结构。快速排序的实现通常包括几个步骤:选择一个基准点,将数组分成两部分,然后递归地对这两部分进行排序。如果需要优化,可以考虑
使用堆化结构或者减少比较次数,但这可能超出了用户的需求范围。

最后,我要确保提供的回答足够详细,能够帮助用户理解整个过程,并且代码也尽可能简洁,同时易于修改和扩展。这样,即使用户只是想测试函数的运作,也能快速
得到所需的结果。


好的!以下是用Python实现快速排序(QuickSort)的函数,以及一个简单的示例:

```python
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
rest = arr[1:]

less = []
greater = []
for num in rest:
if num < pivot:
less.append(num)
else:
greater.append(num)

return quicksort(less) + [pivot] + quicksort(greater)

def test_quicksort():
import random
arr = [3, 6, 8, 10, 1, 2, 9, 5]
random.shuffle(arr)

sorted_arr = quicksort(arr)
print("原数组:", arr)
print("快速排序后的结果:", sorted_arr)

if __name__ == "__main__":
test_quicksort()
```

### 使用说明:
1. **输入**:一个包含整数的列表(数组)。
2. **实现过程**:
- 如果数组长度小于等于 1,直接返回该数组本身(作为基准情况)。
- 在选择第一个元素作为基准点 `pivot`,然后将剩下的元素分成两部分:一部分是所有比基准点小的元素,另一部分是比基准点大的元素。
- 对于较小的部分,继续递归地应用快速排序方法,直到整个数组被排序。

3. **输出**:
- 原始输入数组的一个 shuffled 版本(因为示例中使用了 `random.shuffle`)。
- 快速排序后的结果。

### 示例运行结果:
```python
原数组:[1, 2, 9, 5, 3, 6, 8, 10]
快速排序后的结果:[1, 2, 3, 5, 6, 8, 9, 10]
```

这个函数实现了基本的快速排序实现,但需要根据实际需求进行调整和优化。

total duration: 1m16.264529746s
load duration: 40.057974ms
prompt eval count: 65 token(s)
prompt eval duration: 1.097s
prompt eval rate: 59.25 tokens/s
eval count: 767 token(s)
eval duration: 1m14.622s
eval rate: 10.28 tokens/s
看起来好像没啥问题,速度还行,达到了10 token/s。
但是,更复杂一点的问题,deepseek-r1:1.5b模型就回答不了了,比如:
>>> 水浒传中有多少个梁山好汉?

嗯,用户问的是《水浒传》里有多少个梁山好汉。首先,我得回想一下梁山好汉是谁们。我记得梁山好汉主要是那些在梁山打倒的豪强人,比如黄忠、鲁智深、张天师这些大人物,他们组成了一支好汉队伍。

然后,问题来了,有多少个呢?《水浒传》里可能没有明确给出数字,所以可能需要根据故事来推断或者查证。我好像听说过梁山好汉一共有三路:第一路是黄忠、鲁智深和张天师;第二路是黄光石、林冲、赵云;第三路是白虎、刘禅、黑虎。

算下来,每条路有三人,那应该是九个好汉。所以可能梁山好汉一共有九个人组成一支队伍,或者可能是九个好汉在梁山打倒过。

不过,我也得考虑一下是否有其他的人加入或变动的情况。比如,在《水浒传》中提到过,梁山好汉有三路,每路三人,加上一些后来的人物,但总体上还是九个人组成一支队伍,也就是梁山好汉总共九人。

所以,综合来看,梁山好汉一共有九个成员,也就是梁山好汉队。这可能就是用户在问的答案。


《水浒传》中的梁山好汉一共有一路、二路、三路三个大队伍,每组各有三人,组成总共**九个梁山好汉**(“梁山好汉”一词)。这些好汉包括黄忠、鲁智深、张天师;黄光石、林冲、赵云;白虎、刘禅、黑虎。他们在梁山打倒过许多豪强人,成为梁山的守护者和英雄。

total duration: 38.169465732s
load duration: 38.989844ms
prompt eval count: 14 token(s)
prompt eval duration: 645ms
prompt eval rate: 21.71 tokens/s
eval count: 396 token(s)
eval duration: 37.484s
eval rate: 10.56 tokens/s
这次的输出就是在胡说了,模型太小了,考虑里面没有相关的信息。PS:而且每次同样这个问题,提问之后回答的还不一样。
RDK X3上——部署deepseek
作者:YUPINLE
原文链接:https://www.eeworld.com.cn/aePmPm1
在RDK X3上利用ollama部署deepseek
看似本地部署deepseek很简单,实际因为网络问题,部署起来还是非常麻烦的。在这里给出我摸索出来的方法,在RDK X3上利用ollama部署deepseek,分发ip,使用chatbox同一局域网即可使用deepseek,获得更好的体验
一、手动安装Ollama
  1. 确认系统信息

  • 首先,确认你的Linux发行版和CPU架构,以便下载正确的Ollama版本。

  • 查看Linux内核版本:

Bash
cat /proc/version
  • 查看CPU架构:

Bash
lscpu
查找输出中的“Architecture”字段来确定是x86_64(适用于AMD/Intel 64位处理器)还是aarch64/arm64(适用于ARM架构64位处理器)。
2.下载Ollama安装包
根据你的CPU架构从GitHub的release下载对应的.tgz安装包。
对于aarch64/arm64架构,则下载ollama-linux-arm64.tgz。
3.安装Ollama
确保你已经将下载好的.tgz文件传输到了目标Linux服务器上。在vscode上直接拖动即可
  • 使用以下命令解压并安装Ollama到系统目录中(需要root权限):

Bash
sudo tar -C /usr -xzf ollama - linux - amd64.tgz
-C /usr指定了解压的目标目录,可根据实际情况调整路径。
4.启动Ollama服务
安装完成后,使用以下命令启动Ollama服务:
Bash
ollama serve

出现图中这个情况说明,已经启动
这会在后台启动Ollama服务,准备好接收请求并管理模型。
5.验证安装
为了确保Ollama已成功安装并正在运行,执行以下命令来列出所有可用的模型:
Bash
ollama list
如果一切正常,你应该能看到已下载模型的列表。如果没有下载任何模型,该命令不会返回错误,只会显示一个空列表。
二、更换Ollama模型下载路径(可以跳过)
有时需要根据实际需求更改模型文件的存储路径。以下是详细步骤。
  1. 关闭Ollama服务

在更改模型路径之前,需先停止当前运行的Ollama服务。
  • 使用systemctl命令(如果Ollama作为服务运行):

Bash
sudo systemctl stop ollama
sudo systemctl disable ollama.service
  • 或者手动停止服务:在运行Ollama的终端中按 Ctrl + C。

2.默认模型路径
默认情况下,Ollama会在 /usr/share/ollama/.ollama/models 存储模型文件。
3.创建新的模型存储目录
首先,创建一个新的目录作为模型存储路径。例如,创建 /data/ollama/models 目录:
Bash
sudo mkdir -p /data/ollama/models
4.更改目录权限
确保新目录的权限设置正确,允许Ollama访问和写入:
Bash
sudo chown -R root:root /data/ollama/models
sudo chmod -R 777 /data/ollama/models

注意:这里的用户和组 (root:root) 应根据实际情况调整为运行Ollama服务的实际用户和组。

5.修改Ollama服务配置文件
假设Ollama是通过systemd管理的服务,你需要编辑相应的服务配置文件来指定新的模型路径。
  • 编辑服务配置文件:

Bash
sudo gedit /etc/systemd/system/ollama.service
或者使用vim:
Bash
sudo vim /etc/systemd/system/ollama.service
  • 修改配置内容,在 [Service] 部分添加或更新以下行:

TOML
[Unit]
Description = Ollama Service
After = network - online.target
[Service]
ExecStart = /usr/local/bin/ollama serve
User = root
Group = root
Restart = always
RestartSec = 3
Environment = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment = "OLLAMA_MODELS=/data/ollama/models"
[Install]
WantedBy = default.target
6.重载配置并重启Ollama服务
  • 重载systemd配置:

Bash
sudo systemctl daemon - reload
  • 重新启动Ollama服务:

Bash
sudo systemctl restart ollama.service
  • 检查服务状态以确认服务是否正常运行:

Bash
sudo systemctl status ollama
7.验证更改
  • 检查旧路径 (/usr/share/ollama/.ollama/models) 是否已经不再包含模型文件。

  • 检查新路径 (/data/ollama/models) 下是否有生成的 blobs 和 manifests 文件夹,这表明模型路径更改成功。

三、使用Ollama加载ModelScope上的GGUF模型
Ollama支持加载托管在ModelScope社区上的模型,魔搭社区是国内的,所以拉取模型速度快更快。ollama默认是拉取huggingface上的,速度比较慢。
GGUF代表量化后的模型,根据RDK X3的性能选择,选择合适的量化模型,这里我使用Q2_K的,测试能做到一秒两三个字。
https://www.modelscope.cn/docs/models/advanced-usage/ollama-integration
具体文档在以上链接,可以自己查看。
  • 一键运行ModelScope模型

Bash
ollama run modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF:DeepSeek-R1-Distill-Qwen-1.5B-Q2_K.gguf
出现以上样式,说明模型在运行,通过top可以观察CPU使用率
这样就完成了deepseek的本地部署。
Jetson 利用 Ollama + Anything LLM 部署 Deepseek、LLama3
作者:LitchiCheng
原文链接:https://www.eeworld.com.cn/a0if5m1
安装jetson_containers
git clone https://github.com/dusty-nv/jetson-containersbash jetson-containers/install.sh
运行ollama容器,加载LLM
# 运行 ollama 容器,首次会下载jetson-containers run --name ollama $(autotag ollama)
# 运行 deepseek 1.5b,首次会自动 pull 镜像ollama run deepseek-r1:1.5b
# 运行 deepseek 8b 占用大概内存 6-7Gollama run deepseek-r1:8b
# verbose 增加详尽的输出,会将当前的 tokens 速率等显示出来ollama run deepseek-r1:8b -verbose
# 列出已经下载的 LLMollama list

输出解释

total duration: 3m31.258084877sload duration: 29.482802msprompt eval count: 34 token(s)prompt eval duration: 622msprompt eval rate: 54.66 tokens/seval count: 1417 token(s)eval duration: 3m30.603seval rate: 6.73 tokens/s
“prompt eval rate(提示评估速率)”
指的是在对输入的提示(prompt)进行评估处理时,模型每秒能够处理的tokens数量。提示通常是用户输入给模型的文本内容,用于引导模型生成特定的输出,prompt eval rate主要衡量的是模型处理初始输入提示部分的速度和效率。
“eval rate(评估速率)”
是模型在整体评估过程中,每秒处理tokens的数量。这里的评估过程不仅仅包括对输入提示的处理,还涵盖了模型根据提示进行推理、计算、生成等一系列操作的整个过程,它反映的是模型在完整的任务执行过程中的综合处理速度。

部署Anything LLM容器

export STORAGE_LOCATION=/opt/anythingllmsudo mkdir -p $STORAGE_LOCATIONsudo chmod 777 -R $STORAGE_LOCATIONtouch "$STORAGE_LOCATION/.env"
sudo docker run -it --rm -p 3001:3001 --cap-add SYS_ADMIN -v ${STORAGE_LOCATION}:/app/server/storage -v ${STORAGE_LOCATION}/.env:/app/server/.env -e STORAGE_DIR="/app/server/storage" ghcr.io/mintplex-labs/anything-llm
配置

· END ·


欢迎将我们设为“星标”,这样才能第一时间收到推送消息。

关注EEWorld旗下订阅号:“机器人开发圈”

回复“DS”领取《DeepSeek:从入门到精通》完整版

图片

扫码添加小助手回复“机器人”

进群和电子工程师们面对面交流经验

电子工程世界 关注EEWORLD电子工程世界,即时参与讨论电子工程世界最火话题,抢先知晓电子工程业界资讯。
评论 (0)
  • 在智能语音交互设备开发中,系统响应速度直接影响用户体验。WT588F系列语音芯片凭借其灵活的架构设计,在响应效率方面表现出色。本文将深入解析该芯片从接收指令到音频输出的全过程,并揭示不同工作模式下的时间性能差异。一、核心处理流程与时序分解1.1 典型指令执行路径指令接收 → 协议解析 → 存储寻址 → 数据读取 → 数模转换 → 音频输出1.2 关键阶段时间分布(典型值)处理阶段PWM模式耗时DAC模式耗时外挂Flash模式耗时指令解析2-3ms2-3ms3-5ms存储寻址1ms1ms5-10m
    广州唯创电子 2025-03-31 09:26 155浏览
  • 文/杜杰编辑/cc孙聪颖‍3月11日,美国总统特朗普,将自费8万美元购买的特斯拉Model S,开进了白宫。特朗普此举,绝非偶然随性,而是有着鲜明的主观意图,处处彰显出一种刻意托举的姿态 。特朗普也毫不讳言,希望他的购买能推动特斯拉的发展。作为全球电动车鼻祖,特斯拉曾凭借创新理念与先进技术,开辟电动汽车新时代,引领行业发展潮流。然而当下,这家行业先驱正深陷困境,面临着前所未有的挑战。就连“钢铁侠”马斯克自己都在采访时表示“非常困难”,的确是需要美国总统伸手拉一把了。马斯克踏入白宫的那一刻,特斯拉
    华尔街科技眼 2025-03-28 20:44 214浏览
  • 本文介绍OpenHarmony5.0 DevEco Studio开发工具安装与配置,鸿蒙北向开发入门必备!鸿蒙北向开发主要侧重于应用层的开发,如APP开发、用户界面设计等,更多地关注用户体验、应用性能优化、上层业务逻辑的实现,需要开发者具备基本的编程知识、对操作系统原理的简单理解,以及一定的UI设计感。由触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,支持开源鸿蒙OpenHarmony3.2至5.0系统,适合鸿蒙开发入门学习。下载与安装开发工具点下面链接下载:
    Industio_触觉智能 2025-03-28 18:16 235浏览
  • 真空容器的材料选择取决于其应用场景(如科研、工业、医疗)、真空等级(低真空、高真空、超高真空)以及环境条件(温度、压力、化学腐蚀等)。以下是常见材料及其优缺点分析:1. 不锈钢(如304、316L)优点:耐腐蚀性强:316L含钼,耐酸碱和高温氧化,适合高真空和腐蚀性环境。高强度:机械性能稳定,可承受高压差和外部冲击。低放气率:经电解抛光或镀镍处理后,表面放气率极低,适合超高真空系统(如粒子加速器、半导体镀膜设备)。易加工:可焊接、铸造,适合复杂结构设计。缺点:重量大:大型容器运输和安装成本高。磁
    锦正茂科技 2025-03-29 10:52 57浏览
  • 在工业控制与数据采集领域,高精度的AD采集和实时显示至关重要。今天,我们就来基于瑞芯微RK3568J + FPGA国产平台深入探讨以下,它是如何实现该功能的。适用开发环境如下:Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:Ubuntu18.04.4 64bit、VMware15.5.5U-Boot:U-Boot-2017.09Kernel:Linux-4.19.232、Linux-RT-4.19.232LinuxSDK:LinuxSD
    Tronlong 2025-03-28 10:14 197浏览
  • 一、真空容器的定义与工作原理真空容器是一种能够创造并保持一定真空度的密闭容器。其工作原理通常涉及抽气系统,该系统能够逐渐抽出容器内部的气体分子,从而降低容器内的气压,形成真空环境。在这个过程中,容器的体积并不会因抽气而改变,但容器内的压力会随着气体的抽出而逐渐降低。二、真空容器并非恒压系统真空容器并非一个恒压系统。恒压系统指的是在外部环境变化时,系统内部压力能够保持相对稳定。然而,在真空容器中,随着气体的不断抽出,内部压力会持续降低,直至达到所需的真空度。因此,真空容器内部的压力是变化的,而非恒
    锦正茂科技 2025-03-29 10:23 156浏览
  • 真空容器内部并非wan全没有压强,而是压强极低,接近于零。真空状态下的压强与容器内外气体的分子数量、温度以及容器本身的性质有关。一、真空与压强的基本概念真空指的是一个空间内不存在物质或物质极少的状态,通常用于描述容器或系统中气体的稀薄程度。压强则是单位面积上所受正压力的大小,常用于描述气体、液体等流体对容器壁的作用力。二、真空状态下的压强特点在真空状态下,容器内部的气体分子数量极少,因此它们对容器壁的作用力也相应减小。这导致真空容器内部的压强远低于大气压强,甚至接近于零。然而,由于技术限制和物理
    锦正茂科技 2025-03-29 10:16 171浏览
  • 在智能家居领域,无线门铃正朝着高集成度、低功耗、强抗干扰的方向发展。 WTN6040F 和 WT588F02B 两款语音芯片,凭借其 内置EV1527编解码协议 和 免MCU设计 的独特优势,为无线门铃开发提供了革命性解决方案。本文将深入解析这两款芯片的技术特性、应用场景及落地价值。一、无线门铃市场痛点与芯片方案优势1.1 行业核心痛点系统复杂:传统方案需MCU+射频模块+语音芯片组合,BOM成本高功耗瓶颈:待机电流
    广州唯创电子 2025-03-31 09:06 129浏览
  •        随着智能驾驶向L3级及以上迈进,系统对实时性的要求已逼近极限。例如,自动紧急制动(AEB)需在50毫秒内完成感知、决策到执行的全链路响应,多传感器数据同步误差需小于10微秒。然而,传统基于Linux-RT的方案在混合任务处理中存在天然缺陷——其最大中断延迟高达200微秒,且多任务并发时易引发优先级反转问题。据《2024年智能汽车电子架构白皮书》统计,超60%的车企因实时性不足被迫推迟舱驾一体化项目落地。为旌电子给出的破局之道,是采用R5F(实
    中科领创 2025-03-29 11:55 270浏览
  • Shinco音响拆解 一年一次的面包板社区的拆解活动拉开帷幕了。板友们开始大显身手了,拆解各种闲置的宝贝。把各自的设计原理和拆解的感悟一一向电子爱好者展示。产品使用了什么方案,用了什么芯片,能否有更优的方案等等。不仅让拆解的人员了解和深入探索在其中。还可以让网友们学习电子方面的相关知识。今天我也向各位拆解一个产品--- Shinco音响(如下图)。 当产品连接上电脑的耳机孔和USB孔时,它会发出“开机,音频输入模式”的语音播报,。告诉用户它已经进入音响外放模式。3.5mm耳机扣接收电脑音频信号。
    zhusx123 2025-03-30 15:42 92浏览
  • 3月27日,长虹中玖闪光超高剂量率电子射线放射治疗系统(e-Flash)临床试验项目在四川大学华西医院正式启动,标志着该项目正式进入临床试验阶段。这不仅是我国医学技术领域的一项重大突破,更是我国在高端医疗设备研发和应用方面的重要里程碑。e-Flash放射治疗系统适用于哪些病症,治疗周期为多久?会不会产生副作用?治疗费用高不高……随着超高剂量率电子射线放射治疗系统(e-Flash)正式进入临床试验阶段,社会各界对该项目的实施情况尤为关注。对此,中国工程院院士范国滨,以及四川大学华西医院、四川省肿瘤
    华尔街科技眼 2025-03-28 20:26 335浏览
  • 本文介绍瑞芯微RK356X系列复用接口配置的方法,基于触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。复用接口介绍由下图可知,红圈内容当前引脚可配置为SPI0或者PWM0功能。由标准系统固件以及相关系统手册可得,当前接口默认配置为SPI0功能:console:/ # ls dev/spidev0.0dev/spidev0.0再由原理图可知当前GPIO为GPIO0_C3
    Industio_触觉智能 2025-03-28 18:14 175浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦