自研 Harness 与框架选型

为什么很多团队最终选择自研 Harness 而不是直接用 LangChain?核心原因:调试困难、性能损耗、定制化差。本篇对比自研与主流框架的取舍。

框架选型:自研 Harness vs LangChain vs LlamaIndex

理解 Harness 后,一个现实问题是:到底要不要上框架?下面把”自己用 Prompt + 工具 schema 手搓一个轻量 Harness”和两大主流框架放在一起对比,帮助在或方案评审中做取舍。

维度自研 Harness(轻量封装)LangChain(通用框架)LlamaIndex(数据/RAG 专精)
抽象层级最低,直接操作 Prompt/Tool高,Chain/Agent/Retriever 多层封装中高,围绕 Index/Query 封装
灵活性最高,完全可控中,受框架抽象约束中,检索层灵活但编排弱
上手成本低(懂 Prompt 即可)中(概念多、版本迭代快)较低(专注 RAG 场景)
RAG 能力需自己接向量库/分块通过 Retriever 集成原生深度支持,索引类型丰富
Agent 编排需自己写循环/分支强(LangGraph 有状态图)有但非重点
可观测性自己接日志/追踪LangSmith 成熟平台有评估工具但较弱
长期维护自己扛,易”祖传代码”社区维护,但 API 易变社区维护,专注数据域
适用团队小团队/原型/强可控需求复杂多工具 Agent 产品数据密集的检索问答

为什么选择自研?

LangChain 的痛点

痛点说明
调试困难多层封装导致错误栈深,难以定位问题
性能损耗抽象层带来额外开销,延迟增加
定制化差框架抽象限制了灵活定制的空间
版本迭代快API 频繁变化,升级成本高
概念过多学习曲线陡峭,新手难以入门

自研 Harness 的优势

优势说明
完全可控每一行代码都在掌控之中
性能最优无中间层开销
调试简单错误栈清晰,问题定位快
定制灵活按需设计,不受框架约束
轻量部署依赖少,部署简单

取舍心法

  • 场景简单、对可控性/延迟要求极高、只想快速验证想法 → 自研 Harness(避免过度工程)。

  • 需要循环、分支、人机协同的复杂工作流 → LangChain + LangGraph

  • 核心痛点是”把一堆文档接进来并能精准问答” → LlamaIndex 最少代码量。

  • 生产环境要稳定可观测 → 框架 + LangSmith 这类平台兜底。

三者并非互斥:常见架构是 LlamaIndex 做检索层、LangChain 做 Agent 编排层,而最外层再用一套自研 Harness 管住 System Prompt 与安全护栏。详见 31-LangChain框架32-LlamaIndex框架


速记卡(面试闪卡)

Q1:一句话讲清「自研 Harness 与框架选型」到底是什么?

A:自研 Harness 还是上框架?看可控性、延迟与复杂度,简单场景手搓更香。

Q2:一、三方对比:自研 vs LangChain vs LlamaIndex —— 怎么理解?

A:像买车:自研是改装超跑(完全可控、零冗余),LangChain 是模块化 SUV(功能全但笨重),LlamaIndex 是检索专车(RAG 最强)。抽象层级越低越灵活,越高越省心(Abstraction level)。

Q3:二、为什么选自研?—— 框架的三大痛点 —— 怎么理解?

A:像用层层包装的外卖盒,想拿里面的饭却要先拆五层。LangChain 的痛点是调试难(Deep stack)、性能损耗(Overhead)、定制差(Rigid)、版本乱跳(API churn)。

Q4:三、取舍心法:别过度工程 —— 怎么理解?

A:像配工具箱:拧颗螺丝别搬整套机床。简单可控/低延迟→自研;要循环分支人机协同→LangChain+LangGraph;核心痛点是文档问答→LlamaIndex;生产要稳→框架+LangSmith 兜底。

Q5:四、三者非互斥:分层组合 —— 怎么理解?

A:像盖楼:LlamaIndex 做地基检索,LangChain 做中间楼层编排,自研 Harness 在最外层管 System Prompt 和安全护栏(Guardrails)。各取所长,不是二选一。

Q6:核心速记主线有哪些?

  • 自研优势:可控、零开销、易调试、轻部署

  • LangChain 痛:调试难、性能损耗、定制差、API 易变

  • 选型:简单→自研;复杂工作流→LangGraph;RAG 专精→LlamaIndex

  • 生产:框架 + LangSmith 可观测兜底

  • 常见架构:LlamaIndex 检索 + LangChain 编排 + 自研护栏

口诀

A:自研手搓最轻巧,

框架笨重调试恼;

简单可控自己搞,

复杂编排LangGraph好。

相关链接


快速问答

问题参考答案
为什么选择自研 Harness 而不是 LangChain?① 调试困难(多层封装)② 性能损耗(抽象层开销)③ 定制化差(框架约束)④ 版本迭代快(API 不稳定)
Harness 设计和传统软件架构有什么相似?都关注模块化、可测试性、安全边界、错误处理。Harness 的特殊性在于核心逻辑由 LLM 驱动,具有不确定性
如何评估 Harness 的效果?① 任务完成率 ② 工具调用准确率 ③ 安全事件率 ④ 用户满意度 ⑤ A/B 测试