“Hey Care!” —— 由 Elastic 和 OpenAI Realtime API 提供支持的语音助手

181 阅读4分钟

作者:来自 Elastic Zing Zai

我们如何基于使用 Elasticsearch 丰富的语音对语音交互为护理人员构建 AI 助手。

Care 是一款面向护理人员的 AI 助手。它是 Elastic 团队在亚太地区首届 OpenAI 黑客马拉松上构建的原型,使用:

  • OpenAI 的实时 API(OpenAI’s Realtime API),用于快速语音对语音交互
  • Elasticsearch,用于丰富提示,提供私人医疗知识和敏感护理说明
  • 用于护理协调的代理

在本博客中,我们将介绍它的工作原理和功能。点击原型可在此处找到,Github 项目可在此处找到。

OpenAI Realtime API

在 Realtime API 发布之前,要构建语音转语音应用程序,开发人员必须自己手动连接系统。一个典型的例子包括:

  • 捕获和转录语音(音频转文本):检测某人何时开始和停止说话,然后使用 OpenAI Whisper 将捕获的音频转录为文本。
  • 生成响应(文本转文本):使用 OpenAI GPT-4 处理转录的文本以生成响应。
  • 转换为语音(文本转音频):使用 OpenAI 的文本转语音模型将响应文本转换为音频并播放。

该过程很慢,反应速度不够快,无法实现自然交互。此外,捕获和转录语音不会包含太多细节和细微差别,因此很难建立流畅的对话体验。

OpenAI 的 Realtime API 发布后,可以直接从音频输入(或其他输入方式,如文本或视觉)生成语音。交互是实时发生的,不需要经过上述 3 个步骤,从而减少了延迟。

那么... 这一切中的 Elastic 部分在哪里呢?

我们都知道,搜索是使用 OpenAI 等大型语言模型 (large language models - LLM) 的关键基础设施,它能够实现精确高效的搜索功能,从而检索生成 AI 体验的相关数据。Elastic 提供了一个实时搜索 AI 平台,可以补充 OpenAI 的实时 API,通过快速、相关的混合搜索功能在数百万个文档中实现动态、交互式的用户体验。

semantic_text 和 ELSER 用于语义搜索

Care 使用 semantic_text 将特定的医疗保健文档导入 Elastic。semantic_text 会自动将长段落分成较小的部分,并使用 ELSER 推理端点为文本块内容生成嵌入。这提高了搜索性能,更重要的是,通过仅返回最相关的块,提高了搜索相关性。

用于混合搜索的检索器

Care 利用 Elastic 最新的检索器(在 8.16 中正式发布),在单个 _search 调用中拥有多阶段检索管道,并通过函数调用将其集成到 OpenAI 的 Realtime API 中。检索器旨在帮助开发人员简化混合搜索开发。

 `1.        const query = {
2.           "retriever": {
3.             "rrf": {
4.               "retrievers": [
5.                 {
6.                   "standard": {
7.                     "query": {
8.                       "nested": {
9.                         "path": "content.inference.chunks",
10.                         "query": {
11.                           "sparse_vector": {
12.                             "inference_id": "my-elser-endpoint",
13.                             "field": "content.inference.chunks.embeddings",
14.                             "query": search_term
15.                           }
16.                         },
17.                         "inner_hits": {
18.                           "size": 2,
19.                           "name": "content",
20.                           "_source": [
21.                             "content.inference.chunks.text"
22.                           ]
23.                         }
24.                       }
25.                     }
26.                   }
27.                 },
28.                 {
29.                   "standard": {
30.                     "query": {
31.                       "match": {
32.                         "title": search_term
33.                       }
34.                     }
35.                   }
36.                 }
37.               ]
38.             }
39.           }
40.         }`代码解读

在上面的查询中,我们利用了倒数排序融合 (reciprocal rank fusion - RRF) 检索器来执行混合搜索(词汇搜索 + ELSER 稀疏向量嵌套搜索)。API 可组合且灵活,使我们能够构建管道并将不同的检索策略无缝集成到这些管道中。如有必要,还可以添加更高级的技术,例如文本相似性重新排序检索器

结论

随着 LLMs 的最新进展,我们正在超越传统基于文本的聊天机器人的界限。现在,我们可以利用并受益于可以跨语言和模态进行翻译、理解和交互的交互式语音到语音界面。搜索仍然是生成式 AI 体验的关键基石,它以真实信息为基础做出响应并有助于防止幻觉。

Elasticsearch 包含许多新功能,可帮助您为您的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。

原文:“Hey Care!” - Speech-to-speech assistant powered by Elastic and OpenAI Realtime API - Elasticsearch Labs