🤖 AI Harness 工程深度解析

上下文管理 × 工作流编排 — 让大模型真正"干活"的工程密码

📑 目录

  1. 什么是 Harness 工程
  2. 上下文管理(Context Management)
  3. RAG 知识库算不算上下文?
  4. 工作流编排(Workflow Orchestration)
  5. ComfyUI 和 LangChain 是不是工作流编排?
  6. 完整架构总览
  7. 一句话总结

一、什么是 Harness 工程?

Harness(马具/框架) 在 AI 工程里,指的是把模型"套上缰绳"让它干活的那层基础设施。它不是模型本身,而是介于应用层和模型层之间的关键中间层:

┌─────────────────────────────────────┐
│           应用层 (App)               │
├─────────────────────────────────────┤
│     Harness 层(上下文管理+编排)     │
├─────────────────────────────────────┤
│         模型层 (LLM/VLM)            │
└─────────────────────────────────────┘

核心要解决两个问题:上下文管理工作流编排

二、上下文管理(Context Management)

💡 本质:让模型"记住该记住的"

LLM 的上下文窗口是有限的(4K~1M tokens),但你需要它处理的信息可能是无限的。上下文管理就是解决这个矛盾的工程手段。

① 对话历史管理

原始对话 → 滑动窗口(只保留最近N轮)
         → 摘要压缩(把旧对话总结成几句话)
         → 分层记忆(短期+长期+ episodic)

② 系统提示词管理

System Prompt = 角色设定 + 规则 + 工具定义 + 知识注入

③ RAG 注入

用户问题 → 检索知识库 → 把相关片段拼进 prompt

④ 工具/函数上下文

模型调用函数时,函数的输入输出也要塞进上下文。

工程实现示例

class ContextManager:
    def __init__(self, max_tokens=128000):
        self.buffer = []          # 原始消息
        self.summary = ""         # 压缩摘要
        self.system = ""          # 系统提示
        self.max_tokens = max_tokens
    
    def add(self, msg):
        self.buffer.append(msg)
        if self._token_count() > self.max_tokens:
            self._summarize_oldest()  # 压缩最早的

三、RAG 知识库算不算上下文?

算,但只是上下文的一部分。

┌─────────────┐
│  上下文      │
│             │
│  ┌─────────┐│
│  │ RAG     ││  ← 外部知识注入(知识库检索结果)
│  │ 知识注入 ││
│  └─────────┘│
│  ┌─────────┐│
│  │ 对话历史 ││  ← 之前聊了什么
│  └─────────┘│
│  ┌─────────┐│
│  │ 系统设定 ││  ← 你是谁、你要做什么
│  └─────────┘│
│  ┌─────────┐│
│  │ 工具结果 ││  ← 调API返回了什么
│  └─────────┘│
└─────────────┘
特性 说明
动态性 每次用户提问才去检索,不是静态注入
定位 解决模型知识过时/不全的问题
局限 不等于完整上下文管理——你还需要管对话历史、token预算等

四、工作流编排(Workflow Orchestration)

💡 本质:把多个步骤串/并联起来

AI 任务很少是"一问一答"就完事的,往往是:

用户输入 → 意图识别 → 知识检索 → 推理思考 → 调用工具 → 生成回答

工作流编排就是定义这些步骤怎么走、谁先谁后、失败了怎么办

五、ComfyUI 和 LangChain 是不是工作流编排?

都是,但维度不同。

🎨 ComfyUI ✅ 是工作流编排

维度 说明
领域 图像/视频生成(扩散模型)
形式 可视化节点拖拽
特点 每个节点是一个处理步骤,连线定义数据流向,可并行、可分支、可循环
一句话 扩散模型领域的可视化工作流引擎
Prompt → [CLIP] → [KSampler] → [VAE Decode] → 图片
                        ↑
                    [Load Image] → [ControlNet]

🔗 LangChain ✅ 也是工作流编排

维度 说明
领域 LLM 应用(文本/Agent)
形式 代码定义(Chain / Graph)
特点 Chain线性串联,LangGraph有向图(分支、循环、条件跳转),内置RAG、Tool Calling、Memory
一句话 LLM领域的工作流编排(代码驱动)
[用户输入] → [分类器] ─→ [搜索工具] ─→ [生成回答]
                       └→ [计算工具] ─→ [生成回答]

⚖️ 对比总结

维度 ComfyUI LangChain
领域 图像/视频生成 LLM/Agent 应用
用户 设计师、创作者 开发者
交互 可视化拖拽 代码
节点粒度 模型加载、采样、放大 LLM调用、检索、工具
状态管理 图片tensor流 对话状态、Agent状态
可编程性 低(节点+脚本) 高(完整编程框架)

六、完整架构总览

┌──────────────────────────────────────────────────────┐
│                    Harness 层                          │
│                                                       │
│  ┌─────────────┐    ┌──────────────────────────────┐  │
│  │ 上下文管理    │    │      工作流编排               │  │
│  │             │    │                              │  │
│  │ • 对话历史   │    │  LangChain / LangGraph       │  │
│  │ • 系统提示   │    │  ComfyUI (生图)              │  │
│  │ • RAG注入    │    │  Temporal / Airflow (传统)   │  │
│  │ • Token预算  │    │  Dify / Coze (低代码)        │  │
│  │ • 记忆持久化  │    │                              │  │
│  └─────────────┘    └──────────────────────────────┘  │
│                                                       │
│  ┌──────────────────────────────────────────────┐     │
│  │             模型调用层                         │     │
│  │  LLM + VLM + TTS + 生图 + 生视频 + 生音乐     │     │
│  └──────────────────────────────────────────────┘     │
└──────────────────────────────────────────────────────┘

七、一句话总结

概念 一句话
上下文管理 决定"模型能看到什么"——管记忆、管token、管知识注入
RAG 上下文的一种——把外部知识库塞进prompt
工作流编排 决定"模型要做什么、按什么顺序做"——管步骤、管分支、管错误
ComfyUI 生图领域的工作流编排(可视化节点)
LangChain LLM领域的工作流编排(代码定义)

上下文管理 + 工作流编排 = Harness 工程的核心

前者管"输入",后者管"流程",两者配合才能让模型真正干活 🦐