2222import org .springframework .ai .evaluation .EvaluationRequest ;
2323import org .springframework .ai .evaluation .EvaluationResponse ;
2424import org .springframework .ai .evaluation .Evaluator ;
25+ import org .springframework .lang .Nullable ;
26+ import org .springframework .util .Assert ;
2527
2628/**
2729 * Implementation of {@link Evaluator} used to evaluate the factual accuracy of Large
5961 *
6062 * @author Eddú Meléndez
6163 * @author Mark Pollack
64+ * @author guan xu
6265 * @see Evaluator
6366 * @see EvaluationRequest
6467 * @see EvaluationResponse
@@ -69,13 +72,20 @@ public class FactCheckingEvaluator implements Evaluator {
6972 private static final String DEFAULT_EVALUATION_PROMPT_TEXT = """
7073 Evaluate whether or not the following claim is supported by the provided document.
7174 Respond with "yes" if the claim is supported, or "no" if it is not.
72- Document: \\ n {document}\\ n
73- Claim: \\ n {claim}
75+
76+ Document:
77+ {document}
78+
79+ Claim:
80+ {claim}
7481 """ ;
7582
7683 private static final String BESPOKE_EVALUATION_PROMPT_TEXT = """
77- Document: \\ n {document}\\ n
78- Claim: \\ n {claim}
84+ Document:
85+ {document}
86+
87+ Claim:
88+ {claim}
7989 """ ;
8090
8191 private final ChatClient .Builder chatClientBuilder ;
@@ -89,7 +99,7 @@ public class FactCheckingEvaluator implements Evaluator {
8999 * evaluation
90100 */
91101 public FactCheckingEvaluator (ChatClient .Builder chatClientBuilder ) {
92- this (chatClientBuilder , DEFAULT_EVALUATION_PROMPT_TEXT );
102+ this (chatClientBuilder , null );
93103 }
94104
95105 /**
@@ -99,9 +109,10 @@ public FactCheckingEvaluator(ChatClient.Builder chatClientBuilder) {
99109 * evaluation
100110 * @param evaluationPrompt The prompt text to use for evaluation
101111 */
102- public FactCheckingEvaluator (ChatClient .Builder chatClientBuilder , String evaluationPrompt ) {
112+ public FactCheckingEvaluator (ChatClient .Builder chatClientBuilder , @ Nullable String evaluationPrompt ) {
113+ Assert .notNull (chatClientBuilder , "chatClientBuilder cannot be null" );
103114 this .chatClientBuilder = chatClientBuilder ;
104- this .evaluationPrompt = evaluationPrompt ;
115+ this .evaluationPrompt = evaluationPrompt != null ? evaluationPrompt : DEFAULT_EVALUATION_PROMPT_TEXT ;
105116 }
106117
107118 /**
@@ -138,4 +149,33 @@ public EvaluationResponse evaluate(EvaluationRequest evaluationRequest) {
138149 return new EvaluationResponse (passing , "" , Collections .emptyMap ());
139150 }
140151
152+ public static FactCheckingEvaluator .Builder builder () {
153+ return new FactCheckingEvaluator .Builder ();
154+ }
155+
156+ public static final class Builder {
157+
158+ private ChatClient .Builder chatClientBuilder ;
159+
160+ private String evaluationPrompt ;
161+
162+ private Builder () {
163+ }
164+
165+ public FactCheckingEvaluator .Builder chatClientBuilder (ChatClient .Builder chatClientBuilder ) {
166+ this .chatClientBuilder = chatClientBuilder ;
167+ return this ;
168+ }
169+
170+ public FactCheckingEvaluator .Builder evaluationPrompt (String evaluationPrompt ) {
171+ this .evaluationPrompt = evaluationPrompt ;
172+ return this ;
173+ }
174+
175+ public FactCheckingEvaluator build () {
176+ return new FactCheckingEvaluator (this .chatClientBuilder , this .evaluationPrompt );
177+ }
178+
179+ }
180+
141181}
0 commit comments