🤖 AI Harness 工程深度解析
上下文管理 × 工作流编排 — 让大模型真正"干活"的工程密码
📑 目录
- 什么是 Harness 工程
- 上下文管理(Context Management)
- RAG 知识库算不算上下文?
- 工作流编排(Workflow Orchestration)
- ComfyUI 和 LangChain 是不是工作流编排?
- 完整架构总览
- 一句话总结
一、什么是 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 工程的核心
前者管"输入",后者管"流程",两者配合才能让模型真正干活 🦐
登录后才能评论哦 ~ 立即登录