在使用 AI 驱动的搜索时,Meilisearch 会通过用每个文档的数据填充嵌入器的 documentTemplate 来生成提示词。提示词质量越高,搜索结果就越相关。

本指南展示了编写 documentTemplate 时的最佳实践和注意事项。

示例文档

请看这个来自电影数据库的文档:

{
  "id": 2,
  "title": "Ariel",
  "overview": "Taisto Kasurinen is a Finnish coal miner whose father has just committed suicide and who is framed for a crime he did not commit. In jail, he starts to dream about leaving the country and starting a new life. He escapes from prison but things don't go as planned...",
  "genres": [
    "Drama",
    "Crime",
    "Comedy"
  ],
  "poster": "https://image.tmdb.org/t/p/w500/ojDg0PGvs6R9xYFodRct2kdI6wC.jpg",
  "release_date": 593395200
}

不要使用默认的 documentTemplate

在嵌入器配置中使用自定义的 documentTemplate 值。

默认的 documentTemplate 包含所有非 null 的可搜索字段。在大多数情况下,这会增加干扰信息,提供的上下文超出了嵌入器生成相关搜索结果所需的范围。

仅包含高度相关的信息

查看您的文档并识别最相关的字段。对于示例文档,一个好的 documentTemplate 可以是:

"一部名为 {{doc.title}} 的电影,讲述了 {{doc.overview}}"

在示例文档中,posterid 包含的字段语义重要性较低,可以安全地排除。genresrelease_date 中的数据对于筛选非常有用,但对于描述这部特定电影的内容帮助不大。

这样就剩下两个相关字段:titleoverview

保持提示词简洁

为了获得最佳效果,请将提示词控制在15到45个单词之间:

"一部名为{{doc.title}}的电影,讲述{{doc.overview | truncatewords: 20}}"

在示例文档中,仅overview就有49个单词。可以使用Liquid的truncatetruncatewords过滤器来缩短它。

过短的提示词无法为嵌入模型提供足够的上下文信息。而过长的提示词则会包含过多信息,使嵌入模型难以识别文档真正相关的部分。

总结

本文介绍了生成能带来相关AI搜索结果的提示词的主要步骤:

  • 不要使用默认的documentTemplate
  • 仅包含相关数据
  • 截断过长的字段