AI rule node: move system prompt to rule node config
This commit is contained in:
		
							parent
							
								
									9ef4295d90
								
							
						
					
					
						commit
						c0480ed930
					
				@ -53,27 +53,20 @@ import static org.thingsboard.server.dao.service.ConstraintValidator.validateFie
 | 
			
		||||
)
 | 
			
		||||
public final class TbAiNode extends TbAbstractExternalNode implements TbNode {
 | 
			
		||||
 | 
			
		||||
    private static final SystemMessage SYSTEM_MESSAGE = SystemMessage.from("""
 | 
			
		||||
            Take a deep breath and work on this step by step.
 | 
			
		||||
            You are an industry-leading IoT domain expert with deep experience in telemetry data analysis.
 | 
			
		||||
            Your task is to complete the user-provided task or answer a question.
 | 
			
		||||
            You may use additional context information called "Rule engine message payload", "Rule engine message metadata" and "Rule engine message type".
 | 
			
		||||
            Your response must be in JSON format.""");
 | 
			
		||||
 | 
			
		||||
    private TbAiNodeConfiguration config;
 | 
			
		||||
 | 
			
		||||
    private SystemMessage systemMessage;
 | 
			
		||||
    private PromptTemplate userPromptTemplate;
 | 
			
		||||
    private ChatModel chatModel;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
 | 
			
		||||
        config = TbNodeUtils.convert(configuration, TbAiNodeConfiguration.class);
 | 
			
		||||
        var config = TbNodeUtils.convert(configuration, TbAiNodeConfiguration.class);
 | 
			
		||||
        String errorPrefix = "'" + ctx.getSelf().getName() + "' node configuration is invalid: ";
 | 
			
		||||
        try {
 | 
			
		||||
            validateFields(config, errorPrefix);
 | 
			
		||||
        } catch (DataValidationException e) {
 | 
			
		||||
            throw new TbNodeException(e, true);
 | 
			
		||||
        }
 | 
			
		||||
        systemMessage = SystemMessage.from(config.getSystemPrompt());
 | 
			
		||||
        userPromptTemplate = PromptTemplate.from("""
 | 
			
		||||
                User-provided task or question: %s
 | 
			
		||||
                Rule engine message payload: {{msgPayload}}
 | 
			
		||||
@ -96,7 +89,7 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode {
 | 
			
		||||
        UserMessage userMessage = userPromptTemplate.apply(variables).toUserMessage();
 | 
			
		||||
 | 
			
		||||
        var chatRequest = ChatRequest.builder()
 | 
			
		||||
                .messages(List.of(SYSTEM_MESSAGE, userMessage))
 | 
			
		||||
                .messages(List.of(systemMessage, userMessage))
 | 
			
		||||
                .responseFormat(ResponseFormat.JSON)
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
@ -121,7 +114,7 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void destroy() {
 | 
			
		||||
        config = null;
 | 
			
		||||
        systemMessage = null;
 | 
			
		||||
        userPromptTemplate = null;
 | 
			
		||||
        chatModel = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,10 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
 | 
			
		||||
    @NotNull
 | 
			
		||||
    private AiSettingsId aiSettingsId;
 | 
			
		||||
 | 
			
		||||
    @NotBlank
 | 
			
		||||
    @Length(min = 1, max = 1000)
 | 
			
		||||
    private String systemPrompt;
 | 
			
		||||
 | 
			
		||||
    @NotBlank
 | 
			
		||||
    @Length(min = 1, max = 1000)
 | 
			
		||||
    private String userPrompt;
 | 
			
		||||
@ -35,6 +39,12 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
 | 
			
		||||
    @Override
 | 
			
		||||
    public TbAiNodeConfiguration defaultConfiguration() {
 | 
			
		||||
        var configuration = new TbAiNodeConfiguration();
 | 
			
		||||
        configuration.setSystemPrompt("""
 | 
			
		||||
            Take a deep breath and work on this step by step.
 | 
			
		||||
            You are an industry-leading IoT domain expert with deep experience in telemetry data analysis.
 | 
			
		||||
            Your task is to complete the user-provided task or answer a question.
 | 
			
		||||
            You may use additional context information called "Rule engine message payload", "Rule engine message metadata" and "Rule engine message type".
 | 
			
		||||
            Your response must be in JSON format.""");
 | 
			
		||||
        configuration.setUserPrompt("Tell me a joke");
 | 
			
		||||
        return configuration;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user