33 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package agents
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	gollm "gitea.stevedudenhoeffer.com/steve/go-llm"
 | |
| )
 | |
| 
 | |
| // SplitQuestion is a utility function that will ask the LLM to split a question into sub-questions.
 | |
| // It is a utility function and as such it does not use the agent's set system prompts, it will however use any
 | |
| // contextual information that it has.
 | |
| func (a Agent) SplitQuestion(ctx context.Context, question string) ([]string, error) {
 | |
| 	var res []string
 | |
| 	fnQuestions := gollm.NewFunction(
 | |
| 		"questions",
 | |
| 		"split the provided question by the user into sub-questions",
 | |
| 		func(ctx *gollm.Context, args struct {
 | |
| 			Questions []string `description:"The questions to evaluate"`
 | |
| 		}) (any, error) {
 | |
| 			res = args.Questions
 | |
| 			return "", nil
 | |
| 		})
 | |
| 
 | |
| 	_, err := a.WithSystemPrompt(`The user is going to ask you a question, if the question would be better answered split into multiple questions, please do so.  
 | |
| Respond using the "questions" function. 
 | |
| If the question is fine as is, respond with the original question passed to the "questions" function.`).
 | |
| 		WithSystemPromptSuffix(``).
 | |
| 		WithToolbox(gollm.NewToolBox(fnQuestions)).
 | |
| 		CallAndExecute(ctx, question)
 | |
| 
 | |
| 	return res, err
 | |
| }
 |