7.6 实战:实现 MiniHarness 输出治理层
前面章节的理论知识需要在生产系统中整合落地。本节展示模型抽象设计如何支持多个 LLM 提供者、响应解析的具体实现、质量门控的分层验证,以及各组件的集成使用示例。
7.6.1 设计目标
构建生产级的 MiniHarness 系统,整合模型抽象、输出解析、质量门控和幻觉检测。完整代码位于 lab/mini_harness/models/。
7.6.2 系统架构
User Request → [模型抽象层] → [LLM API] → [响应解析] → [幻觉检测] → [质量门控] → [工具执行] → Response
7.6.3 模型抽象设计
核心思想:“接口统一、实现可插”,支持多个 LLM 提供者。
关键设计点:
BaseProvider 抽象:定义统一接口
complete()、stream()、complete_with_tools(tools)- 其中工具参数必需(非可选)多 Provider 支持:Claude(Anthropic SDK)、OpenAI 兼容(DeepSeek、Qwen、Ollama 等)
工具转换层:自动将 MiniHarness 工具格式转换为各 Provider 的 API 格式
熔断器三态:closed(正常)→ open(故障)→ half-open(恢复测试)
class BaseProvider(ABC):
def complete(self, messages: List[Message],
tools: Optional[List[Dict]] = None) -> ProviderResponse:
pass
def stream(self, messages: List[Message],
tools: Optional[List[Dict]] = None) -> Generator[str, None, None]:
pass
class ClaudeProvider(BaseProvider):
def complete(self, messages, tools=None):
# 直接使用 Anthropic SDK,tool_use 是一等内容块
response = self.client.messages.create(...)
return ProviderResponse(content=..., tool_calls=[...])
class OpenAIProvider(BaseProvider):
def complete(self, messages, tools=None):
# 转换工具格式:MiniHarness → OpenAI function calling
openai_tools = self._convert_tools(tools)
response = self.client.chat.completions.create(...)
return ProviderResponse(content=..., tool_calls=[...])熔断器实现 (半开状态需要多次成功才关闭):
故障转移:
完整代码见:lab/mini_harness/models/provider.py
7.6.4 响应解析设计
核心思想:“结构化输出”,统一处理多种内容块类型。
设计要点:
内容块类型:
TextBlock(文本)、ToolUseBlock(工具调用)、ThinkingBlock(思考过程)类型安全:使用 dataclass 和 Union 类型标注
便利方法:
text_content()合并所有文本、tool_calls()提取工具调用
解析逻辑:遍历原始响应块,按类型创建相应对象,JSON 字符串自动反序列化为 dict。
完整代码见:lab/mini_harness/models/parser.py
7.6.5 质量门控设计
核心思想:“执行前验证”,三层防线防止异常工具调用。
质量门控层次:
关键类:
幻觉检测(模糊匹配建议):
完整代码见:lab/mini_harness/models/quality.py
7.6.6 集成示例
以下示例展示了如何将模型提供者、质量门控和工具注册表组合使用,完成一次带有输出校验的模型调用流程。
7.6.7 关键特性总结
模型抽象
策略模式 + 工厂模式
支持多 LLM,轻松切换
工具转换
适配器模式
屏蔽 API 差异
熔断器
状态机
自动故障转移
响应解析
dataclass + Union
类型安全、易于扩展
质量门控
装饰器链
分层验证,关注点分离
幻觉检测
相似度 + 范围检查
多角度识别模型错误
完整实现和更多示例见 lab/mini_harness/ 目录。
最后更新于
