《AI 渐进编程》之二十九:从面向对象到 Harness——封装 AI 的不确定性

前面二十八篇,我们讨论了 Prompt、状态机、文件系统、验证和控制层。它们其实都在做同一件事:把模糊任务封装成有状态、有接口、有约束、可验证的工程对象。

这正是面向对象长期处理的问题。不同的是,过去对象内部运行确定性代码,现在 Harness 内部运行具有不确定性的 LLM。


1. 面向对象的核心是边界

面向对象不只是把代码写进 class,而是用状态、行为和接口建立边界:

对象 = 状态 + 行为 + 接口 + 边界 \text{对象}=\text{状态}+\text{行为}+\text{接口}+\text{边界} 对象=状态+行为+接口+边界

对象保存自己的状态,通过方法提供行为。private 保护内部状态,public 规定外部入口。一个对象由此明确:它拥有什么、能够做什么、外部如何访问,以及哪些条件必须始终成立。


2. LLM 使对象内部变得不确定

传统方法由程序员完整实现,相同输入通常产生相同或可预测的结果。LLM 提供的却是候选输出的概率分布:

y ∼ p θ ( y ∣ x ) y\sim p_\theta(y\mid x) y∼pθ(y∣x)

同一任务可能得到不同实现;语言完全通顺,也可能遗漏要求、误解目标或虚构事实。因此,LLM 不能被视为可靠的 solve() 方法。它负责生成候选结果,却不能自行宣布任务完成。

AI 工程的核心问题,因而不是如何调用模型,而是如何封装它的不确定行为。


3. Harness 是面向对象的扩展

传统对象主要封装状态和行为。Harness 还要封装权限、契约、验证和失败处理:

Harness = 状态 + 动作 + 权限 + 契约 + 验证器 + 证据 \text{Harness} =\text{状态}+\text{动作}+\text{权限}+\text{契约}+\text{验证器}+\text{证据} Harness=状态+动作+权限+契约+验证器+证据

面向对象 AI Harness
状态 项目文件与任务状态
方法 Agent 可以执行的动作
private / public 权限与工具接口
类型与不变量 结构约束与持续条件
前置、后置条件 启动条件与验收要求
异常 退出并交还控制权
对象责任 结果、日志与证据

Harness 与对象相似,但多了一项任务:控制一个不能保证每次产生相同结果的执行者。


4. Prompt 不是边界

"不要修改其他文件""不要破坏接口""提交前检查代码",都只是语言要求,模型可能遵守,也可能遗漏。

真正的工程边界必须在模型之外执行:文件权限限制修改范围,类型检查保护接口,编译器和测试验证结果,退出条件决定何时交还控制权,日志记录已经发生的事情。

Prompt 是软约束,权限、类型和验证器才是硬边界。Harness 不是更长的 Prompt,而是把自然语言要求转换成可执行契约的控制层。


5. 生成结果不等于接受结果

把硬约束记为 C C C,验证器记为 V V V。候选解 y y y 只有满足以下条件,才能被系统接受:

C ( y ) = 1 , V ( y ) ≥ τ C(y)=1,\qquad V(y)\geq\tau C(y)=1,V(y)≥τ

合法 SQL 不一定查询了正确数据,代码能够编译也不代表业务逻辑正确。因此,完整的 AI 求解对象至少包含生成器、约束、搜索和验证器。

失败记录、修改日志和当前状态还要成为下一轮输入,使 Agent 根据已经发生的结果继续推进。所谓收敛,不是模型越来越自信,而是未通过的验收条件逐渐减少,直到结果被接受或任务退出。


6. 从访问边界到责任边界

AI 系统不仅要限制访问,还要明确谁定义验收标准、谁批准高风险动作、谁解释失败以及谁承担后果。权限、日志、证据包和人工接管,既控制行为,也保存责任链条。

Agent 可以负责执行,但不能自动获得定义目标和承担后果的权力。

AI 时代没有抛弃面向对象,而是把它从确定性程序扩展到不确定执行。Prompt 负责表达要求,Harness 负责阻止不合格结果进入系统。

AI 并不缺少生成答案的能力。真正稀缺的,是把现实任务封装成具有状态、接口、验证和责任边界的对象。


参考文献

  1. Meyer, B. Object-Oriented Software Construction. 2nd ed., Prentice Hall, 1997.
  2. Beurer-Kellner, L., Fischer, M., & Vechev, M. "Prompting Is Programming: A Query Language for Large Language Models." 2022. https://arxiv.org/abs/2212.06094
  3. Scholak, T., Schucher, N., & Bahdanau, D. "PICARD: Parsing Incrementally for Constrained Auto-Regressive Decoding from Language Models." EMNLP , 2021. https://aclanthology.org/2021.emnlp-main.779/
相关推荐
蓝速科技5 分钟前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享
QYR-分析6 分钟前
重轨受电弓行业深度报告:市场格局、技术迭代与发展前景
大数据·数据库·人工智能
火山引擎开发者社区21 分钟前
# 开发者集结!共探 AI Agent 创新应用新可能
人工智能
牛油果子哥q25 分钟前
生产级AI项目上线全流程:Docker容器化、服务编排、监控告警、日志收集、容灾降级、线上运维闭环
人工智能·ai
Pocker_Spades_A27 分钟前
视频不用再一张张截图:ClipSketch AI 把关键画面转成漫画,还能顺手生成文案
人工智能·音视频
小小测试开发27 分钟前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json
阿里云大数据AI技术29 分钟前
淘宝直播 AI 分身:基于阿里云 Milvus 的商品知识召回实践
人工智能
猎头南楼31 分钟前
大模型后训练与 Agent 自迭代:两类工程能力的观察
人工智能·深度学习·机器学习
镜像视界(浙江)科技有限公司32 分钟前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
你不是我我42 分钟前
【AI 测评】想用自己的声音给视频配音?Index-TTS本地部署这样做
人工智能·音视频