Решил добавить llms.txt на этот сайт. Вроде бы как это должно добавить удобства для работы с сайтом большим языковым моделям. Тем более для моего шаблона PaperMod в одном из обновлений появился шаблон. Да и версия hugo позволяет.

Настройки Hugo

У меня используется конфигурационный файл в формате toml. Так что все настройки будут в этом формате.

Добавляем описание формата в outputFormats:

1
2
3
4
5
[outputFormats.LLMS]
mediaType = "text/plain"
baseName = "llms"
isPlainText = true
notAlternative = true

То есть мы создаем формат, который является обычным текстом (text/plain), с именем llms. Расширение будет браться из mediaType, что в итоге даст нам llms.txt. Так же отключаем экранирование html сущностей (isPlainText). И последним параметром мы отключаем добавление этого формата вывода как альтернативного (notAlternative), это уберет ссылку на данный файл из <header> как <link rel="alternate" ...>.

Теперь добавляем генерацию этого файла:

1
2
[outputs]
home = ['HTML', 'RSS', 'JSON', 'LLMS']

Добавляем это формат вывода для главной страницы, именно для нее будет создан файл в корне сайта с путем /llms.txt.

Шаблон

Так как в моей теме шаблон уже появился, то этот шаг можно пропустить. Но если шаблона нет, можно взять базовый шаблон:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# {{ .Site.Title }}

> {{ .Site.Params.description }}

{{ with .Site.Params.llms.intro }}{{ . }}

{{ end -}}

## Pages

{{ range where .Site.RegularPages "Section" "" -}}
- [{{ .Title }}]({{ .Permalink }}): {{ with .Description }}{{ . }}{{ else }}{{ .Summary | plainify | truncate 120 }}{{ end }}
  {{ end -}}

{{ range .Site.Sections -}}

## {{ .Title }}

{{ range .RegularPages -}}
- [{{ .Title }}]({{ .Permalink }}): {{ with .Description }}{{ . }}{{ else }}{{ .Summary | plainify | truncate 120 }}{{ end }}
  {{ end }}
  {{ end -}}