Skip to main content

Prompts

A prompt refers to the input to a language model. This input is often constructed from multiple components. LangChain Go provides utilities for creating and managing these prompts with support for multiple template formats.

Quick start​

The simplest way to use prompts is with prompt templates:

import "github.com/tmc/langchaingo/prompts"

// Create a prompt template
template := prompts.NewPromptTemplate(
"Write a {{.style}} summary of: {{.content}}",
[]string{"style", "content"},
)

// Format with values
result, err := template.Format(map[string]any{
"style": "technical",
"content": "recent AI advances",
})
// Result: "Write a technical summary of: recent AI advances"

Key features​

  • Multiple template formats: Go templates (default), Jinja2, and F-strings
  • Chat prompts: Structured prompts for conversational AI
  • Partial variables: Pre-fill template values
  • Optional security: HTML escaping for untrusted input
  • Template inheritance: Load templates from filesystems

Template formats​

Native Go text/template syntax with sprig functions - the preferred choice for Go applications:

template := `
Dear {{ .customer_name | title }},
{{ if eq .order_status "shipped" }}
Your order has been shipped!
{{ else }}
Your order is being processed.
{{ end }}
`

Jinja2 templates​

Full-featured templating with filters, conditionals, loops, and inheritance:

template := `
Dear {{ customer_name | title }},
{% if order_status == "shipped" %}
Your order has been shipped!
{% else %}
Your order is being processed.
{% endif %}
`

F-strings​

Simple Python-style variable substitution:

template := "Process {document} using {method} with {params}"

Working with untrusted input​

When handling user-provided data, enable HTML escaping:

// Enable sanitization for untrusted data
result, err := prompts.RenderTemplate(
"User said: {{.input}}",
prompts.TemplateFormatGoTemplate,
map[string]any{"input": userInput},
prompts.WithSanitization(), // Escapes HTML special characters
)

Loading templates from files​

For templates that need to include other templates:

//go:embed templates/*
var templateFS embed.FS

result, err := prompts.RenderTemplateFS(
templateFS,
"email.j2",
prompts.TemplateFormatJinja2,
data,
)