进阶 dagster.io 2026-10-10 01:48:56 · 6 阅读

第7章 使用 Dagster 构建 AI 参考架构

使用 Dagster 构建常见 AI 参考架构指南

你可能正着手开发一款 AI 应用。由于该领域变化极快,很难确定从何入手。以下是一些常见的架构模式,可供参考起步。

这些模式好比一套解决 AI 问题的工具箱,适用于不同场景。你根据情况会有侧重地使用其中某些(例如,你可能永远不会从零开始预训练模型),也可以将它们组合使用,比如将 RAG 与微调模型相结合。

Prompt Engineering

概述

Prompt Engineering(提示工程)指设计输入提示以引导 LLM 行为。用户无需了解底层模型,通过针对具体用例结构化提示,即可获得更准确、更贴合任务需求的输出。

优势

  • 开发速度快。提示工程所需的工程投入最少,能以极低成本快速迭代和实验。
  • 基础设施极简。不同于需要外部存储层的 RAG,或需要大量 GPU 算力的预训练,提示工程自成一体,无需额外基础设施。

架构

用户提出问题时,系统解析问题中的信息并将其注入预设提示中。提示通过增加上下文或具体规则,帮助模型生成更详尽的回答。提示构建完成后,完整提示发送给 LLM,由模型输出答案。

Dagster 提示工程示例

假设你正在设计一款帮助用户回答 Pandas 相关问题的应用。你希望答案基于 Pandas 语境,并提供有用的补充信息。

  1. 提问。用户输入问题。在 Dagster 中,这些问题可通过 run configurations 在执行时设置,从而复用同一 DAG 回答多个问题。例如,用户问了模糊的“什么是 Series?”,但我们知道用户关注的是 Pandas。
  2. 提示构建。需要生成基于 Pandas 的有用回答,我们将使用 Langchain 辅助提示处理。Langchain 便于开发和复用提示模板,随着 LLM 响应校准,可不断迭代模板。模板示例如下:

    system_template = f""" In the context of the python framework Pandas. Answer the questions in 1 or 2 sentences. Also include two links for further relevant information. Question: {question} """
  3. 推理。组合提示与输入后发送给 LLM。此处同样使用 Langchain,并需底层模型(如 OpenAI 的 gpt-4o-mini)来回答问题。即便问题略显模糊,也能以用户认为最有指导意义的格式返回相关答案。

    In Pandas, a Series is a one-dimensional labeled array capable of holding any data type, similar to a column in a spreadsheet or a database table. Each element in a Series is associated with an index, which allows for efficient data access and manipulation.\n\nFor further information, you can check the following links:\n- Pandas Series Documentation\n- Introduction to Pandas Series

RAG

概述

检索增强生成(RAG)通过集成外部知识来提升性能。检索系统从外部存储层(通常是向量数据库)中获取相关数据,作为 LLM 的上下文,使其能提供更准确、有依据的回答。

优势

  • 动态更新。数据可独立更新,无需重训模型。
  • 领域特定上下文。为回答提供可追溯的来源和引用,减少幻觉。
  • 成本效率。将存储压力转移至外部存储层,LLM 本身所需的参数存储更少。

架构

源数据被转换为高维向量(嵌入),以表征内容语义,并加入向量数据库的索引中。向量数据库类似传统数据库,但支持基于相似度的查询,非常适合内容检索。向量库填充后,可将相关信息与 LLM 结合以回答问题。生成的答案将立足于向量库中的领域特定上下文。

Dagster RAG 示例

假设你希望提供特定于你组织的答案,这些答案应基于 Slack 和 GitHub 中持续进行的讨论。

  1. 摄入。从 Slack 和 GitHub 提取数据,可编写代码或使用 dlt、Dagster 嵌入式 ETL 等框架。提取频率可基于传统调度或基于事件(如使用 sensor 监听新 GitHub issue)。
  2. 处理。数据提取后生成嵌入。Dagster 易于与 LangChain 等 AI 工具集成,并原生支持 OpenAI Python 客户端。利用这些工具可将数据适当分块并生成嵌入。
  3. 向量数据库。嵌入生成后,上传至向量索引。Dagster 可管理索引创建并编排新嵌入的添加;随着应用扩展,Dagster 可并发运行流程。
  4. 推理。向量库持续刷新,包含 Slack 和 GitHub 信息,一个或多个 AI 应用可依赖此数据库提供服务。

Fine-Tuning

概述

微调指基于现有预训练 LLM,利用小数据集针对特定任务进行适配。微调时仅改变少量权重。

优势

  • 定制化。使模型行为契合特定目标、语气或应用需求。
  • 成本效率。提示变短可节省 token 消耗;同时可用算力开销更小的模型替代昂贵模型,并保持相近性能。
  • 输出控制。完全控制模型输出的格式和风格。

架构

收集数据并划分为训练集和验证集两份样本。样本无需很大,通常几十条示例即可。随后,将样本转换为模仿期望交互的提示。这些提示可基于特定知识、对话风格(如欢快回答)或两者结合。提示准备就绪后作为微调任务的输入。耗时取决于样本数量和底层模型。任务完成后生成新模型,可供查询使用。

Dagster 微调示例

假设你希望回答 GitHub 仓库中的问题,且希望答案语调与仓库现有回答一致,符合用户熟悉风格。

  1. 摄入。使用熟悉的工具提取 GitHub 数据,并通过分区(partitions)按时间段分类,有助于理解回答随时间的演变。
  2. 处理。对数据进行采样并划分训练集和验证集,据此构建提示。这可能结合 GitHub 数据与额外提示工程。提示格式取决于微调工具。若使用 OpenAI,对话结构可能如下:

    {"messages": [{"role": "system", "content": "You answer Github issues in an upbeat and helpful way to ensure user success."}, {"role": "user", "content": data["github_question"]}, {"role": "assistant", "content": data["github_answer"], "weight": 1}]}
  3. 微调。提示生成后上传至 OpenAI 存储层。Dagster 的 OpenAI resource 简化了这一过程,并将文件 ID 传递给微调任务端点,生成特定用例的模型。还可为新模型绑定 asset check,确保其符合预期。
  4. 推理。新模型可投入使用。若需重新训练,可重新执行 asset 以拉取更多 GitHub issue 生成额外提示。

Pretraining

概述

预训练指在大量数据上训练模型,不使用现有模型的先验权重。产出的模型可直接使用或进一步微调。

这是数据、工作量和算力资源要求最严苛的 AI 模式。企业通常无需从零预训练,更倾向于组合使用提示工程、RAG 和预训练(这里指使用已有预训练模型)。

优势

  • 规避偏见。从零开始可避免继承现有模型的无意偏见。
  • 独特数据。若数据独特且专用于特定场景,不太可能被纳入开放、通用 LLM 的语料库。
  • 多语言支持。通用模型覆盖不佳的语言,通过预训练可提升效果。例如仅用英文文本训练(即便微调或用 RAG),在其他语言上仍可能表现不佳。

架构

预训练没有固定模式,需在成本与性能间权衡。训练较小模型通常始于大量非结构化文本,如书籍、文章、wiki 等。随后将文本转换为 token,token 代表文本片段,再转换为用于训练的对应 ID。此数据与模型权重结合训练。权重可用随机数(成本最高),或更常用的是复用现有模型权重。结合数据和权重进行训练,耗时视参数规模可达数周,成本可能高达数十万美元。训练内存需求远超推理,且依赖昂贵 GPU。最终生成仅解码器模型,可预测序列中的下一个 token(词)。

Dagster 预训练示例

假设你开发了一款新编程语言,希望构建模型协助用户开发。

  1. 摄入。需收集大量数据,例如整个 GitHub 仓库(可能仍不足)。数据清洗包括去重、去错、过滤无关语言等步骤。可通过 asset checks 确保数据质量。
  2. 处理。非结构化数据需切分为 token 和 ID。可通过并行分区加速处理。映射 ID 后,转换为 Hugging Face DataFrame 等格式供训练使用。
  3. 模型初始化。除自有数据外,可复用现有模型权重,比生成随机权重更经济。需确定合适的基座模型,并决定沿用其层数、扩展小模型(加层)或缩减大模型(减层)。
  4. 训练。训练是最昂贵的步骤,耗时视参数规模而定。可使用 HuggingFace 执行训练任务,并在 Dagster 中分区模型检查点。生成的模型可生成自定义编程语言的下一个 token,大概率正是下一个单词。需包含模型评估或 asset checks 以验证行为。
  5. 推理。模型可投入使用,但可能需微调或结合 RAG 以获得更具上下文感知的回答。

有疑问或反馈?请在 Slack 或 Github 发起讨论。
希望与我们合作?查看我们的开放职位。
想要更多此类内容?关注我们的 LinkedIn。

评论 (0)