首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 ES|QL COMPLETION + LLM 5 分钟打造 Chuck Norris 段子生成器

使用 ES|QL COMPLETION + LLM 5 分钟打造 Chuck Norris 段子生成器

原创
作者头像
点火三周
发布2025-09-01 14:30:18
发布2025-09-01 14:30:18
810
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

如果只用几行代码,就能把 Elasticsearch 中的数据交给 LLM,生成各种有趣内容会怎样?

现在,有了 ES|QL 的 COMPLETION 指令,这件事轻而易举。

本文将演示一个「Chuck Norris 段子生成器」:

我们先检索一部电影的简介,再让 GPT 模型写出一条闻所未闻的 Chuck Norris 段子,连 Rambo 都会自叹不如。

Chuck Norris(查克・诺里斯)是美国知名动作演员、武术家,1940 年出生,以硬朗的银幕形象和格斗技能闻名。他早年投身武术领域,曾获多项空手道赛事冠军,后来转型影视圈,代表作包括《德州巡警》(电视剧)、《三角洲部队》系列(电影)等,塑造了众多果敢勇猛的硬汉角色,在 20 世纪 80-90 年代的动作影视领域颇具影响力。 更广泛为人熟知的是,21 世纪后围绕他产生的大量 “查克・诺里斯笑话”(Chuck Norris Facts)—— 这类幽默段子以夸张、荒诞的手法调侃他的 “超强能力”,比如 “查克・诺里斯不需要闹钟,因为时间不敢迟到”“他的影子都怕他” 等。这些段子在网络上广泛传播,让他超越影视角色,成为一种流行文化符号,本文中结合电影生成相关段子,正是延续了这一流行文化梗。


你需要准备

  • 一条可用的 LLM 推理端点(本文示例使用 GPT-4o)
  • 含有电影简介的数据集

示例数据集可从 Kaggle 下载:

https://www.kaggle.com/datasets/ursmaheshj/top-10000-popular-movies-tmdb-05-2023

下载后,可通过 Kibana 的 Data Visualizer 或 _bulk API 导入到 Elasticsearch。


创建推理端点

在使用 COMPLETION 之前,先通过 _inference API 注册一个推理端点。以下示例把 GPT-4o 接入 Elastic:

代码语言:json
复制
PUT _inference/completion/my-gpt-4o-endpoint
{
  "service": "openai",
  "service_settings": {
    "api_key": "<your_api_key>",
    "model_id": "gpt-4o-2024-11-20"
  }
}

完成后,就可以在 ES|QL 查询中直接引用 my-gpt-4o-endpoint


一条查询串起全部流程

下面这条 ES|QL 查询做了所有事情:

  1. 按用户输入检索最相关的电影;
  2. 用电影简介拼出 Prompt;
  3. 调用 LLM 生成 Chuck Norris 段子;
  4. 返回结果。
代码语言:json
复制
POST _query
{
  "query": """
    FROM movies METADATA _score
    | WHERE MATCH(title, ?query)
        OR MATCH(overview, ?query)
    | SORT _score DESC
    | LIMIT 1
    | EVAL prompt = CONCAT(?instruction, overview)
    | COMPLETION chuck_norris_fact = prompt
        WITH { "inference_id": "my-gpt-4o-endpoint" }
    | KEEP title, overview, chuck_norris_fact
  """,
  "params": [
    { "instruction": "Generate a Chuck Norris Fact from the following description:\n" },
    { "query": "rambo III" }
  ]
}

示例响应(节选):

代码语言:json
复制
{
  "values": [
    "Rambo III",
    "Combat has taken its toll on Rambo, ... Trautman is captured.",
    "Chuck Norris once entered a monastery to find inner peace—five minutes later, he left because the monks couldn't handle his level of enlightenment. When Chuck heard Rambo needed help in Afghanistan, Chuck rescued Trautman, won the war, and trained a goat to ride a helicopter, all before Rambo finished tying his bandana."
  ]
}

没错,模型真这么说的。


逐步拆解查询

1. 找到最相关的电影

代码语言:sql
复制
FROM movies METADATA _score
| WHERE MATCH(title, ?query)
    OR MATCH(overview, ?query)
| SORT _score DESC
| LIMIT 1

MATCH 同时搜索 titleoverview,按 _score 排序,仅保留第一条文档。


2. 构造 Prompt

代码语言:sql
复制
| EVAL prompt = CONCAT(?instruction, overview)

把静态指令 ?instruction 与电影简介 overview 拼在一起,生成 LLM 所需的 prompt


3. 调用 LLM

代码语言:sql
复制
| COMPLETION chuck_norris_fact = prompt
    WITH { "inference_id": "my-gpt-4o-endpoint" }
| KEEP title, overview, chuck_norris_fact

COMPLETION 把 Prompt 发给推理端点,并返回新字段 chuck_norris_fact

整条查询就是一个简洁的 RAG(Retrieval Augmented Generation)流程,完全在 Elasticsearch 内完成。


下一步怎么玩?

COMPLETION 目前仍处于技术预览,但它已经能实现摘要、内容生成、数据补充甚至「讲故事」等多种玩法。

不妨自己试试:

• 换一部你喜欢的电影

• 调整指令,让 LLM 写诗、写笑话,甚至把 SQL 错误改成五言绝句

欢迎分享你的创意!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你需要准备
  • 创建推理端点
  • 一条查询串起全部流程
  • 逐步拆解查询
    • 1. 找到最相关的电影
    • 2. 构造 Prompt
    • 3. 调用 LLM
  • 下一步怎么玩?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档