news 2026/7/28 8:53:21

从零构建AI应用:RAG、模型微调与Dify平台实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建AI应用:RAG、模型微调与Dify平台实战指南

在实际 AI 大模型应用开发中,从零到一构建一个可用的系统,通常会面临几个核心挑战:如何让大模型理解你的私有数据?如何在不具备强大算力的情况下,让模型适应你的特定任务?以及,如何将这些能力封装成一个稳定、可维护的应用?这些问题指向了当前大模型落地的三个关键技术路径:RAG(检索增强生成)、模型微调以及应用开发平台。

RAG 通过外挂知识库,让模型能够基于最新、最准确的私有信息进行回答,解决了模型“知识陈旧”和“幻觉”问题。模型微调则通过少量高质量数据,调整模型内部的权重,使其在特定领域或风格上的表现更专业。而像 Dify 这样的应用开发平台,则将模型调用、工作流编排、知识库管理、应用部署等工程化环节进行了封装,让开发者可以更专注于业务逻辑。

本文将围绕这三个核心点,构建一个从本地模型部署、到 RAG 知识库搭建、再到模型微调,并最终通过 Dify 平台集成为完整应用的实战路径。整个过程旨在提供一个可复现的工程指南,涵盖环境准备、关键配置、代码片段、常见问题排查以及生产环境考量。无论你是希望构建一个内部知识问答助手,还是开发一个面向特定行业的智能应用,这套组合方案都能提供一个坚实的起点。

1. 理解 RAG、微调与 Dify 的定位与协同

在开始动手之前,必须厘清 RAG、微调以及 Dify 各自解决什么问题,以及它们如何协同工作。错误的技术选型会导致项目后期难以维护或效果不达预期。

1.1 RAG:快速赋予模型“新知识”与“准确引用”

RAG 的核心思想是“开卷考试”。当用户提问时,系统不是让模型凭空回忆,而是先从你的私有知识库(如文档、数据库)中检索出最相关的片段,然后将这些片段和问题一起交给模型,让模型基于这些“参考资料”生成答案。

它的优势在于:

  • 知识实时性:无需重新训练模型,只需更新知识库,模型就能获取最新信息。
  • 答案可追溯:生成的答案可以关联到源文档,增强可信度。
  • 成本较低:主要开销在文本嵌入(向量化)和检索阶段,比微调成本低。

典型工作流程:

  1. 文档处理:将 PDF、Word、TXT 等文档进行分块(Chunking)。
  2. 向量化:使用嵌入模型(Embedding Model)将文本块转换为向量(Vector),并存入向量数据库。
  3. 检索:将用户问题也向量化,在向量数据库中查找最相似的文本块。
  4. 增强生成:将检索到的文本块作为上下文,与用户问题一同提交给大模型,生成最终答案。

1.2 模型微调:让模型“学会”特定技能或风格

微调是在预训练大模型的基础上,使用你的领域数据继续训练,轻微调整模型的部分参数(如 LoRA 技术),使其输出更符合你的需求。

它适用于以下场景:

  • 任务格式固定:例如,让模型始终以固定的 JSON 结构输出。
  • 风格模仿:让模型模仿特定的写作风格、客服话术。
  • 复杂推理强化:在特定领域(如代码生成、数学推理)上提升表现。
  • 降低幻觉:通过领域数据训练,让模型在相关问题上更“保守”和准确。

为什么有了 RAG 还需要微调?这是一个关键问题。RAG 解决了“知识”问题,但解决不了“能力”和“风格”问题。例如,一个法律知识库搭配一个通用模型,模型可能知道法条,但无法用严谨的法律文书格式进行回答。此时,就需要用法律文书数据对模型进行微调,使其具备“法律文书撰写能力”。两者是互补关系:RAG 提供准确资料,微调后的模型具备专业处理能力。

1.3 Dify:将能力工程化为可交付的应用

Dify 是一个开源的大模型应用开发平台。你可以把它理解为一个“低代码”工作台,它提供了可视化界面来:

  • 连接多种模型:支持 OpenAI、Azure、以及本地部署的各类开源模型(如 DeepSeek、Qwen、Llama 等)。
  • 管理知识库:内置文档上传、文本处理、向量化、检索能力,轻松构建 RAG 应用。
  • 编排工作流:通过拖拽组件的方式,构建复杂的 AI 工作流,例如:先检索知识库,再调用模型总结,最后发送邮件。
  • 部署应用:一键将构建好的 AI 能力发布为 Web API、聊天界面或机器人。

Dify 的价值在于,它将模型调用、知识库管理、提示词工程、上下文管理等繁琐的工程细节封装起来,让开发者可以聚焦于业务逻辑和用户体验。

2. 环境准备与核心工具选型

本地部署意味着所有计算和存储都发生在你的机器上,对硬件有一定要求。以下是本次实战的环境清单。

2.1 硬件与基础软件要求

组件最低要求推荐配置说明
操作系统Windows 10/11, macOS 10.15+, Ubuntu 18.04+Ubuntu 22.04 LTSLinux 环境在部署和运维上通常更顺畅。
CPU支持 AVX2 指令集的现代 CPU8 核以上主要影响嵌入模型推理和部分轻量级大模型。
内存16 GB32 GB 或更高运行模型、向量数据库、Dify 服务都需要内存。
GPU非必需NVIDIA GPU (显存 >= 8GB)如需本地运行大模型或微调,GPU 能极大加速。
存储50 GB 可用空间100 GB SSD用于存放模型文件、向量数据库、Dify 数据。
Docker版本 20.10+最新稳定版Dify 推荐使用 Docker Compose 部署。
Python3.8+3.9 或 3.10许多工具链对 Python 版本有要求。

在开始前,请确保已安装 Docker、Docker Compose 和 Python。可以通过以下命令检查:

# 检查 Docker 和 Docker Compose docker --version docker-compose --version # 检查 Python python --version pip --version

2.2 核心组件选型与说明

我们将搭建一个包含以下组件的系统:

  1. 大模型服务:使用OllamavLLM在本地运行开源大模型(如 DeepSeek-Coder, Qwen2.5)。
  2. 向量数据库:使用ChromaMilvus存储和检索文档向量。
  3. 嵌入模型:使用BAAI/bge-small-zh-v1.5等轻量级模型将文本转换为向量。
  4. 应用平台:使用Dify进行集成和可视化开发。
  5. 微调框架:使用LLaMA-Factory进行高效的 LoRA 微调。

为什么选它们?

  • Ollama:极其简单,一条命令就能拉取并运行模型,适合快速原型验证。
  • Chroma:轻量级,易于集成,适合中小规模知识库。
  • Dify:开源、功能全面、社区活跃,是连接以上所有组件的最佳“胶水”。
  • LLaMA-Factory:统一微调框架,支持多种模型和微调方法(LoRA, QLoRA),且对硬件要求相对友好。

3. 本地大模型部署与基础服务搭建

我们首先在本地运行一个大模型,作为整个系统的“大脑”。

3.1 使用 Ollama 部署 DeepSeek 模型

Ollama 是目前最简单的本地大模型运行工具。以部署deepseek-coder:6.7b模型为例(这是一个擅长代码的 67 亿参数模型):

# 1. 安装 Ollama (Linux/macOS) curl -fsSL https://ollama.com/install.sh | sh # 2. 拉取并运行模型 ollama run deepseek-coder:6.7b

运行后,会进入一个交互式命令行,你可以直接提问测试。但我们需要的是 API 服务。

# 3. 以后台服务方式运行 Ollama,并开启 API ollama serve & # 默认 API 地址为 http://localhost:11434

现在,你的本地模型已经提供了一个兼容 OpenAI API 格式的接口。可以通过curl测试:

curl http://localhost:11434/api/generate -d '{ "model": "deepseek-coder:6.7b", "prompt": "用 Python 写一个快速排序函数", "stream": false }'

3.2 部署向量数据库 Chroma

我们将使用 Docker 快速启动一个 Chroma 服务。创建一个docker-compose-chroma.yml文件:

version: '3.8' services: chroma: image: chromadb/chroma:latest container_name: chroma_db restart: unless-stopped ports: - "8000:8000" environment: - IS_PERSISTENT=TRUE - PERSIST_DIRECTORY=/chroma/chroma_data volumes: - ./chroma_data:/chroma/chroma_data

然后启动服务:

docker-compose -f docker-compose-chroma.yml up -d

Chroma 服务将在http://localhost:8000运行。数据会持久化到宿主机的./chroma_data目录。

3.3 部署 Dify 应用平台

Dify 也提供了 Docker Compose 部署方式。这是最推荐的方式。

  1. 下载部署文件

    git clone https://github.com/langgenius/dify.git cd dify/docker
  2. 配置环境变量:复制.env.example.env,并修改关键配置。最重要的是设置OPENAI_API_KEY为你本地 Ollama 服务的地址。

    cp .env.example .env # 编辑 .env 文件

    .env文件中找到并修改以下行:

    # 将 OpenAI 兼容的 API 指向本地 Ollama OPENAI_API_BASE_URL=http://host.docker.internal:11434/v1 OPENAI_API_KEY=ollama # 这里可以填任意非空字符串,因为 Ollama 默认不验证 key # 确保启用了知识库功能 KNOWLEDGEBASE_ENABLED=true

    注意:在 Linux 环境下,host.docker.internal可能无法解析。你需要使用宿主机的真实 IP 地址(如172.17.0.1)或修改 Docker 网络模式。一个更稳妥的方式是创建一个共享网络,让 Dify 容器能通过服务名访问 Ollama。

  3. 启动 Dify

    docker-compose up -d

    启动后,访问http://localhost:3000即可进入 Dify 控制台。首次进入需要创建管理员账户。

至此,基础服务层已就绪:本地模型(Ollama)、向量数据库(Chroma)、应用平台(Dify)均已运行。

4. 构建 RAG 知识库应用

现在,我们将在 Dify 中创建一个基于 RAG 的问答应用。

4.1 在 Dify 中配置模型供应商

  1. 登录 Dify 控制台,进入 “设置” -> “模型供应商”。
  2. 点击 “添加模型供应商”,选择 “OpenAI”。
  3. 在配置页面中:
    • 模型类型:选择 “文本生成”。
    • 模型名称:填写deepseek-coder(这个名字可以自定义,用于在 Dify 中识别)。
    • API 密钥:填写ollama(与.env中设置一致)。
    • API 基础 URL:填写http://host.docker.internal:11434/v1(确保 Dify 容器能访问到此地址)。
  4. 点击 “保存”,系统会测试连接。成功后,你就在 Dify 中接入了本地运行的 DeepSeek 模型。

4.2 创建并填充知识库

  1. 进入 “知识库” 页面,点击 “创建知识库”。
  2. 输入知识库名称,如 “我的技术文档库”。
  3. 进入知识库详情页,点击 “上传文件”。支持 PDF、Word、TXT、Markdown 等格式。
  4. 关键步骤:处理设置
    • 分词方式:对于中文,选择 “中文” 或 “混合”。这影响文本如何被切分成块。
    • 分段处理
      • 分段规则:这是 RAG 效果的核心。建议设置最大长度为 500-1000 字符,重叠长度为 50-100 字符。重叠可以避免一个概念被硬生生切断。
      • 文本清洗:可以开启,移除无关字符。
    • 索引方式:选择 “高精度”。Dify 会调用其内置的嵌入模型(可在设置中配置)将文本块向量化,并存储到我们之前部署的 Chroma 数据库中。

上传文档后,Dify 会自动进行分段、向量化处理。你可以在 “文件列表” 中查看处理状态。

4.3 构建基于知识库的 AI 应用

  1. 进入 “应用” 页面,点击 “创建应用”,选择 “对话型应用”。
  2. 在应用编排界面,我们需要配置 “提示词” 和 “上下文”。
  3. 编写提示词:在提示词编辑框中,输入类似以下内容:
    你是一个专业的助手,将基于以下上下文信息回答问题。如果上下文中有相关信息,请严格依据上下文回答,并注明出处。如果上下文信息不足,请根据你的知识诚实回答,并说明这一点。 上下文: {{#context#}} {{/context#}} 问题: {{#query#}} {{/query#}}
    这里的{{#context#}}{{#query#}}是 Dify 的变量,系统会自动替换。
  4. 添加上下文:在右侧的 “上下文” 区域,点击 “添加”。选择 “知识库”,然后选中我们刚才创建的 “我的技术文档库”。可以设置最大 token 数召回条数(例如,返回最相关的 2 个文本块)。
  5. 关联模型:在 “模型” 区域,选择我们之前配置的deepseek-coder模型。
  6. 保存并发布:点击右上角 “发布”。发布后,你可以通过提供的 Web 链接或 API 端点来访问这个应用。

现在,一个基本的 RAG 应用就完成了。当你提问时,系统会先从知识库检索相关内容,然后连同你的问题一起发送给本地模型,生成答案。

5. 使用 LLaMA-Factory 进行模型微调实战

当 RAG 提供的“知识”足够,但模型的“回答风格”或“任务格式”不符合要求时,就需要微调。我们以使用 LLaMA-Factory 对模型进行 LoRA 微调为例。

5.1 准备微调环境与数据

  1. 克隆 LLaMA-Factory

    git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory
  2. 安装依赖

    pip install -r requirements.txt
  3. 准备数据集:微调需要特定格式的数据。LLaMA-Factory 支持多种格式,最常见的是alpaca格式的 JSON 文件。创建一个data/my_dataset.json

    [ { "instruction": "将以下中文翻译成英文。", "input": "今天天气真好。", "output": "The weather is really nice today." }, { "instruction": "用 Python 写一个函数,计算斐波那契数列。", "input": "", "output": "def fibonacci(n):\n if n <= 1:\n return n\n a, b = 0, 1\n for _ in range(2, n+1):\n a, b = b, a + b\n return b" } ]

    你需要准备几十到几百条这样的高质量指令-输出对。input字段可以为空。

5.2 配置并启动微调

LLaMA-Factory 提供了 Web UI 和命令行两种方式。这里使用更直观的 Web UI。

  1. 启动 Web UI

    python src/webui.py

    访问http://localhost:7860

  2. 配置微调参数

    • 模型路径:如果你有本地模型文件(如从 Hugging Face 下载的Qwen2.5-7B),就填写本地路径。也可以直接填写 Hugging Face 模型 ID(如Qwen/Qwen2.5-7B),程序会自动下载(需网络)。
    • 数据集:在 “Dataset” 页签,上传或选择你准备好的my_dataset.json
    • 训练参数(关键):
      • 微调方法:选择LoRA。这是目前最流行的高效微调方法,只训练少量参数,节省显存。
      • 学习率2e-4是一个常见的起点。
      • 训练轮数3
      • 批处理大小:根据你的 GPU 显存调整,可以从12开始。
      • 最大序列长度5121024,根据你的数据长度调整。
    • 输出目录:设置一个路径来保存微调后的模型(实际上是 LoRA 适配器权重)。
  3. 开始训练:点击 “Start” 按钮。如果一切正常,你将看到损失(loss)曲线下降。

5.3 合并模型与测试

训练完成后,你会在输出目录得到 LoRA 权重文件(如adapter_model.bin)。

  1. 模型合并(可选):为了部署方便,可以将 LoRA 权重与原模型合并成一个完整的模型文件。

    python src/export_model.py \ --model_name_or_path /path/to/original_model \ --adapter_name_or_path /path/to/lora_output \ --template default \ --export_dir /path/to/merged_model \ --export_size 2 \ --export_legacy_format False
  2. 测试微调效果:你可以使用 LLaMA-Factory 的 “Chat” 页签,加载合并后的模型或原模型+LoRA 适配器,与微调前后的模型对话,对比回答风格的变化。

  3. 在 Ollama 中使用微调后模型:将合并后的模型目录,按照 Ollama 的 Modelfile 格式进行封装,创建为一个新的 Ollama 模型,即可像之前一样通过 API 调用。

6. 集成微调模型与 Dify 工作流

最终,我们希望将微调后的专业模型,与 RAG 知识库结合起来,在 Dify 中构建更强大的工作流。

6.1 将微调模型接入 Dify

假设我们已经将微调后的模型(例如my-finance-llm)部署在了 Ollama 中。

  1. 在 Dify 的 “模型供应商” 中,再添加一个 OpenAI 类型的供应商。
  2. 模型名称填写my-finance-llm,API 基础 URL 同样指向 Ollama (http://host.docker.internal:11434/v1)。

现在,Dify 中就有了两个模型:通用的deepseek-coder和专业的my-finance-llm

6.2 设计复杂工作流

Dify 工作流允许你以可视化方式编排多个步骤。例如,我们可以设计一个“智能客服”工作流:

  1. 意图识别:使用通用模型deepseek-coder判断用户问题是关于“产品咨询”、“故障报修”还是“投诉建议”。
  2. 分支判断:根据意图结果,走不同的分支。
  3. 知识库检索:如果是“产品咨询”,则从产品知识库中检索信息。
  4. 专业回答:将检索到的上下文和用户问题,发送给微调过的专业客服模型my-finance-llm生成回答。
  5. 格式化输出:将回答按照固定的模板进行格式化。
  6. 记录日志:将整个交互过程记录到数据库。

在 Dify 工作流编辑器中,你可以通过拖拽“LLM”、“知识库检索”、“条件判断”、“代码执行”等节点来实现上述流程。

6.3 发布与 API 集成

工作流调试完成后,可以发布为一个独立的应用程序。Dify 会为其生成一个唯一的访问地址和 API 端点。

你可以将这个 API 集成到你的网站、移动应用或内部系统中。Dify 提供了详细的 API 文档和 SDK,方便调用。

7. 常见问题排查与优化实践

在实际部署和运行中,你可能会遇到以下问题。

7.1 部署与连接问题

问题现象可能原因检查与解决
Dify 无法连接本地 Ollama1. Docker 网络隔离。
2. Ollama 服务未运行。
3. 防火墙/端口问题。
1. 在.env中使用宿主机的真实 IP 而非host.docker.internal
2. 运行ollama serve并检查curl http://localhost:11434/api/tags
3. 确保端口11434可访问。
知识库处理失败1. 嵌入模型下载失败。
2. 文档格式解析错误。
3. Chroma 数据库连接失败。
1. 检查 Dify 日志,看是否有网络或模型下载错误。
2. 尝试上传纯文本.txt文件测试。
3. 检查docker-compose.yml中 Chroma 服务是否正常,Dify 环境变量VECTOR_STORE是否配置正确。
模型响应慢或超时1. 模型参数过大,硬件资源不足。
2. 提示词或上下文过长。
1. 换用更小的模型(如 7B 参数)。
2. 在 Dify 模型配置中调整“最大 Token”和“响应超时时间”。
3. 精简提示词,减少知识库检索返回的文本块数量。

7.2 RAG 效果优化

  • 召回率低(查不到相关内容)

    • 检查文本分块:块大小是否合适?过大会导致信息混杂,过小会丢失上下文。尝试调整 Dify 知识库设置中的“分段规则”。
    • 检查嵌入模型:Dify 默认的嵌入模型对中文支持如何?可以考虑更换为BAAI/bge-small-zh-v1.5,需要在 Dify 的嵌入模型设置中配置自定义模型。
    • 优化检索策略:尝试使用“高召回”索引方式,或调整检索时的相似度阈值。
  • 答案质量差(有相关上下文但答非所问)

    • 优化提示词:在提示词中更明确地指令模型“严格依据上下文”,并设计更好的上下文拼接格式。
    • 增加元数据过滤:在知识库上传时,可以为文档添加标签(如“用户手册V2.0”),检索时增加元数据过滤条件,提高精度。
    • 重排序:在初步检索出多个片段后,使用一个更小的模型或规则对片段进行重排序,将最相关的放在前面。

7.3 微调效果不佳

  • 模型“失忆”或变笨:这是灾难性遗忘。通常因为数据量太少或学习率太高。
    • 解决:增加高质量数据量,降低学习率(如1e-5),减少训练轮数,并使用 LoRA 等参数高效方法。
  • 过拟合:模型在训练数据上表现完美,但在新问题上表现很差。
    • 解决:增加数据多样性,使用验证集并在效果下降时提前停止训练,增加 Dropout 等正则化手段。
  • 显存不足
    • 解决:使用QLoRA(量化 LoRA),它能在几乎不损失效果的情况下大幅降低显存占用。在 LLaMA-Factory 中选择QLoRA方法,并设置量化等级(如 4-bit)。

7.4 生产环境考量

  • 稳定性:将 Docker 服务配置为restart: unless-stopped,并考虑使用systemdsupervisor管理进程。
  • 可观测性:为 Dify、Ollama 等服务配置日志收集(如 ELK Stack),监控 API 响应时间、错误率。
  • 安全性
    • 为 Dify 设置强密码,并启用 HTTPS。
    • 知识库上传接口应做文件类型、大小和病毒扫描。
    • 在提示词中加入安全护栏,过滤不当请求。
  • 性能与扩展
    • 向量数据库(如 Chroma)数据量大时,考虑迁移到更专业的 Milvus 或 Pinecone(云服务)。
    • 模型推理服务(Ollama)可以部署多个实例,并通过 Nginx 做负载均衡。
    • 使用 Redis 缓存频繁检索的知识库结果。

从本地部署一个模型,到构建 RAG 知识库,再到进行模型微调,最后通过 Dify 平台将它们工程化为一个应用,这条路径覆盖了当前大模型私有化落地的核心环节。每个环节都有其深度,例如 RAG 中的文本分块策略、嵌入模型选择、检索算法优化,微调中的数据构造、参数调优、防止过拟合等,都值得深入探索。建议先从本文的最小可行系统出发,确保整个链路跑通,再针对你业务中最关键的环节进行深度优化。例如,如果知识准确性至关重要,就深入研究 RAG 的检索质量;如果回答风格是瓶颈,则聚焦于高质量的微调数据制备。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 8:53:18

营销技术演进:从工具到智能体的数字化转型

1. 营销技术的五代演进&#xff1a;从工具到智能体的蜕变之路 营销技术&#xff08;MarTech&#xff09;的发展史就是一部企业数字化生存的进化史。2000年初至今&#xff0c;我们见证了五代技术范式的更迭&#xff1a; 1.1 第一代&#xff1a;单点工具时代&#xff08;2000-2…

作者头像 李华
网站建设 2026/7/28 8:52:54

从ESP32到步进电机:单体翻页时钟的完整硬件设计与实现

1. 项目概述&#xff1a;从想法到现实最近在折腾一个挺有意思的小玩意儿&#xff1a;一个完全自己设计、自己焊接的单体翻页时钟。核心思路很简单&#xff0c;就是用ESP32 PICO D4这颗超迷你的芯片作为大脑&#xff0c;驱动一个步进电机&#xff0c;让它每隔一分钟精准地“翻”…

作者头像 李华
网站建设 2026/7/28 8:51:41

AI Agent开发实战:从MCP协议到Skill构建,打造你的智能体应用

1. 项目概述&#xff1a;从“工具”到“伙伴”的范式转移如果你最近在关注AI领域&#xff0c;尤其是开发者社区&#xff0c;那么“AI Agent”、“MCP”、“Skill”这几个词一定像潮水一样反复冲刷着你的信息流。这不再是几年前那种“调个API做个聊天机器人”的简单玩法了。我们…

作者头像 李华
网站建设 2026/7/28 8:51:40

MySQL 安装部署全攻略:从零到一,解决 Windows 与 Linux 环境配置难题

MySQL 作为全球最流行的开源关系型数据库&#xff0c;几乎是每一位开发者、运维和数据分析师的必备技能。但很多人在初次安装配置时&#xff0c;会卡在环境变量、服务启动、密码修改或远程连接这些看似简单却容易出错的环节。今天这篇文章&#xff0c;我们不谈复杂的 SQL 优化&…

作者头像 李华
网站建设 2026/7/28 8:51:07

Imager服务器部署指南:用Docker快速搭建高性能图像压缩服务

Imager服务器部署指南&#xff1a;用Docker快速搭建高性能图像压缩服务 【免费下载链接】imager Automated image compression for efficiently distributing images on the web. 项目地址: https://gitcode.com/gh_mirrors/ima/imager Imager是一款专注于Web图像高效分…

作者头像 李华
网站建设 2026/7/28 8:50:26

Clawdbot开源AI助手:架构解析与实战指南

1. Clawdbot&#xff1a;重新定义个人AI助手的开源力量 第一次听说Clawdbot是在一个开发者论坛上&#xff0c;当时有人分享了这个开源项目如何帮他自动处理了上百封邮件并生成了周报。作为长期关注AI领域的从业者&#xff0c;我立刻被"真正能干事"这个描述吸引了——…

作者头像 李华