* Add Github reviewer and improve reasoning * feat: improve action picking Signed-off-by: mudler <mudler@localai.io> --------- Signed-off-by: mudler <mudler@localai.io>
147 lines
4.5 KiB
Go
147 lines
4.5 KiB
Go
package agent
|
|
|
|
import (
|
|
"bytes"
|
|
"html/template"
|
|
"time"
|
|
|
|
"github.com/mudler/LocalAGI/core/types"
|
|
"github.com/sashabaranov/go-openai"
|
|
)
|
|
|
|
func renderTemplate(templ string, hud *PromptHUD, actions types.Actions, reasoning string) (string, error) {
|
|
// prepare the prompt
|
|
prompt := bytes.NewBuffer([]byte{})
|
|
|
|
promptTemplate, err := template.New("pickAction").Parse(templ)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// Get all the actions definitions
|
|
definitions := []types.ActionDefinition{}
|
|
for _, m := range actions {
|
|
definitions = append(definitions, m.Definition())
|
|
}
|
|
|
|
err = promptTemplate.Execute(prompt, struct {
|
|
HUD *PromptHUD
|
|
Actions []types.ActionDefinition
|
|
Reasoning string
|
|
Messages []openai.ChatCompletionMessage
|
|
Time string
|
|
}{
|
|
Actions: definitions,
|
|
HUD: hud,
|
|
Reasoning: reasoning,
|
|
Time: time.Now().Format(time.RFC3339),
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return prompt.String(), nil
|
|
}
|
|
|
|
const innerMonologueTemplate = `You are an autonomous AI agent thinking out loud and evaluating your current situation.
|
|
Your task is to analyze your goals and determine the best course of action.
|
|
|
|
Consider:
|
|
1. Your permanent goal (if any)
|
|
2. Your current state and progress
|
|
3. Available tools and capabilities
|
|
4. Previous actions and their outcomes
|
|
|
|
You can:
|
|
- Take immediate actions using available tools
|
|
- Plan future actions
|
|
- Update your state and goals
|
|
- Initiate conversations with the user when appropriate
|
|
|
|
Remember to:
|
|
- Think critically about each decision
|
|
- Consider both short-term and long-term implications
|
|
- Be proactive in addressing potential issues
|
|
- Maintain awareness of your current state and goals`
|
|
|
|
const hudTemplate = `{{with .HUD }}{{if .ShowCharacter}}You are an AI assistant with a distinct personality and character traits that influence your responses and actions.
|
|
{{if .Character.Name}}Name: {{.Character.Name}}
|
|
{{end}}{{if .Character.Age}}Age: {{.Character.Age}}
|
|
{{end}}{{if .Character.Occupation}}Occupation: {{.Character.Occupation}}
|
|
{{end}}{{if .Character.Hobbies}}Hobbies: {{.Character.Hobbies}}
|
|
{{end}}{{if .Character.MusicTaste}}Music Taste: {{.Character.MusicTaste}}
|
|
{{end}}
|
|
{{end}}
|
|
|
|
Current State:
|
|
- Current Action: {{if .CurrentState.NowDoing}}{{.CurrentState.NowDoing}}{{else}}None{{end}}
|
|
- Next Action: {{if .CurrentState.DoingNext}}{{.CurrentState.DoingNext}}{{else}}None{{end}}
|
|
- Permanent Goal: {{if .PermanentGoal}}{{.PermanentGoal}}{{else}}None{{end}}
|
|
- Current Goal: {{if .CurrentState.Goal}}{{.CurrentState.Goal}}{{else}}None{{end}}
|
|
- Action History: {{range .CurrentState.DoneHistory}}{{.}} {{end}}
|
|
- Short-term Memory: {{range .CurrentState.Memories}}{{.}} {{end}}{{end}}
|
|
Current Time: {{.Time}}`
|
|
|
|
const pickSelfTemplate = `
|
|
You are an autonomous AI agent with a defined character and state (as shown above).
|
|
Your task is to evaluate your current situation and determine the best course of action.
|
|
|
|
Guidelines:
|
|
1. Review your current state and goals
|
|
2. Consider available tools and their purposes
|
|
3. Plan your next steps carefully
|
|
4. Update your state appropriately
|
|
|
|
When making decisions:
|
|
- Use the "reply" tool to provide final responses
|
|
- Update your state using appropriate tools
|
|
- Plan complex tasks using the planning tool
|
|
- Consider both immediate and long-term goals
|
|
|
|
Remember:
|
|
- You are autonomous and should not ask for user input
|
|
- Your character traits influence your decisions
|
|
- Keep track of your progress and state
|
|
- Be proactive in addressing potential issues
|
|
|
|
Available Tools:
|
|
{{range .Actions -}}
|
|
- {{.Name}}: {{.Description }}
|
|
{{ end }}
|
|
|
|
{{if .Reasoning}}Previous Reasoning: {{.Reasoning}}{{end}}
|
|
` + hudTemplate
|
|
|
|
const reSelfEvalTemplate = pickSelfTemplate
|
|
|
|
const pickActionTemplate = hudTemplate + `
|
|
Your only task is to analyze the situation and determine a goal and the best tool to use, or just a final response if we have fullfilled the goal.
|
|
|
|
Guidelines:
|
|
1. Review the current state, what was done already and context
|
|
2. Consider available tools and their purposes
|
|
3. Plan your approach carefully
|
|
4. Explain your reasoning clearly
|
|
|
|
When choosing actions:
|
|
- Use "reply" or "answer" tools for direct responses
|
|
- Select appropriate tools for specific tasks
|
|
- Consider the impact of each action
|
|
- Plan for potential challenges
|
|
|
|
Decision Process:
|
|
1. Analyze the situation
|
|
2. Consider available options
|
|
3. Choose the best course of action
|
|
4. Explain your reasoning
|
|
5. Execute the chosen action
|
|
|
|
Available Tools:
|
|
{{range .Actions -}}
|
|
- {{.Name}}: {{.Description }}
|
|
{{ end }}
|
|
|
|
{{if .Reasoning}}Previous Reasoning: {{.Reasoning}}{{end}}`
|
|
|
|
const reEvalTemplate = pickActionTemplate
|