Kotlin-AI-Examples中的评估器-优化器工作流模式解析
什么是评估器-优化器工作流模式?
评估器-优化器工作流是一种基于反馈循环的AI系统设计模式,它通过两个AI代理的协同工作实现持续改进。这种模式模拟了人类通过迭代和反馈来完善工作的过程,为AI系统赋予了自我优化的能力。
核心工作流程
- 生成阶段:优化器AI生成初始解决方案
- 评估阶段:评估器AI分析解决方案的质量
- 反馈整合:根据评估结果生成改进建议
- 迭代优化:重复上述过程直至达到质量标准
为什么选择这种模式?
在Kotlin-AI-Examples项目中,评估器-优化器模式特别适合以下场景:
- 代码生成:确保生成的代码符合质量标准和最佳实践
- 内容创作:保持内容风格一致并满足特定要求
- 复杂推理:通过多轮迭代提高解决方案的准确性
- 翻译任务:实现更符合语境的翻译结果
Kotlin实现详解
1. 环境配置
首先需要设置Kotlin环境并引入必要的依赖:
%useLatestDescriptors
%use langchain4j(1.0.0-beta3, model = anthropic)
2. 数据模型设计
定义生成器和评估器的响应数据结构:
data class GeneratorResponse(
val thoughts: String, // 生成器的思考过程
val result: String // 生成的实际结果
)
enum class EvalType {
PASS, NEEDS_IMPROVEMENT, FAIL
}
data class EvaluatorResponse(
val evaluation: EvalType, // 评估结果
val feedback: String // 具体反馈意见
)
3. LLM客户端配置
使用Claude模型作为底层LLM:
val model = AnthropicChatModel.builder()
.apiKey(System.getenv("ANTHROPIC_API_KEY"))
.modelName(AnthropicChatModelName.CLAUDE_3_7_SONNET_20250219)
.maxTokens(4096)
.temperature(0.1)
.build()
4. 核心功能实现
生成器函数
fun generate(prompt: String, task: String, context: String = ""): Pair<String, String> {
// 构建完整提示词
val fullPrompt = if (context.isNotEmpty())
"$prompt\n$context\nTask:\n$task"
else
"$prompt\nTask:\n$task"
// 调用LLM生成响应
val response = llm.llmGenerate(fullPrompt)
// 输出生成结果
println("=== GENERATION START ===")
println("Thoughts:\n${response.thoughts}")
println("Result:\n${response.result}")
println("=== GENERATION END ===")
return response.thoughts to response.result
}
评估器函数
fun evaluate(prompt: String, content: String, task: String): Pair<EvalType, String> {
// 构建评估提示词
val fullPrompt = "$prompt\nOriginal task: $task\nContent to evaluate: $content"
// 调用LLM进行评估
val response = llm.llmEvaluate(fullPrompt)
// 输出评估结果
println("=== EVALUATION START ===")
println("Status:\n${response.evaluation}")
println("Feedback:\n${response.feedback}")
println("=== EVALUATION END ===")
return response.evaluation to response.feedback
}
5. 反馈循环实现
fun loop(task: String, evaluatorPrompt: String, generatorPrompt: String): Pair<String, List<Pair<String, String>>> {
val memory = mutableListOf<String>() // 存储历史尝试
val chainOfThought = mutableListOf<Pair<String, String>>() // 思维链记录
// 初始生成
var (thoughts, result) = generate(generatorPrompt, task)
memory.add(result)
chainOfThought.add(thoughts to result)
// 迭代优化循环
while (true) {
val (evaluation, feedback) = evaluate(evaluatorPrompt, result, task)
if (evaluation == EvalType.PASS) {
return result to chainOfThought
}
// 构建包含反馈的上下文
val context = memory.joinToString(
prefix = "Previous attempts:\n",
postfix = "\nFeedback: $feedback",
separator = "\n"
)
// 基于反馈重新生成
val generatorResponse = generate(generatorPrompt, task, context)
thoughts = generatorResponse.first
result = generatorResponse.second
memory.add(result)
chainOfThought.add(thoughts to result)
}
}
实际应用示例
实现最小栈问题
让我们以"实现一个支持O(1)时间获取最小值操作的栈"为例:
val evaluatorPrompt = """
Evaluate this following code implementation for:
1. code correctness
2. time complexity
3. style and best practices
Only output "PASS" if all criteria are met.
""".trimIndent()
val generatorPrompt = """
Your goal is to complete the task based on <user input>.
If there are feedback from previous attempts, reflect on them to improve.
""".trimIndent()
val task = """
Implement a Stack in Kotlin with:
1. push(x)
2. pop()
3. getMin()
All operations should be O(1).
""".trimIndent()
// 执行工作流
loop(task, evaluatorPrompt, generatorPrompt)
迭代过程分析
-
第一轮生成:
- 使用MutableList实现栈
- 使用==操作符比较元素
- 评估反馈:需要改进相等性比较方式
-
第二轮生成:
- 改用ArrayDeque实现栈
- 使用equals()方法比较元素
- 评估反馈:通过所有标准
最佳实践建议
-
提示词设计:
- 为评估器提供明确的评估标准
- 为生成器提供清晰的改进方向
-
迭代控制:
- 设置最大迭代次数防止无限循环
- 记录完整思维链便于调试
-
性能优化:
- 缓存历史结果减少重复计算
- 并行化评估和生成过程
总结
Kotlin-AI-Examples中的评估器-优化器工作流模式为AI系统提供了一种强大的自我改进机制。通过Kotlin的类型安全特性和LangChain4j的集成,开发者可以构建出既高效又可靠的AI应用。这种模式特别适合需要高质量输出的场景,能够显著提升AI生成内容的一致性和准确性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考