OpenAI 聊天补全已集成到 Elastic 的 推理 API 中。此功能标志着我们在 Elasticsearch 中集成尖端 AI 功能之旅中的另一个里程碑,提供了更多易于使用的功能,例如生成类似人类的文本补全。
本博客介绍了如何将 OpenAI 聊天补全和 Elasticsearch 用于总结、翻译或对任何文本执行问答。在开始之前,让我们快速了解一下最近的 Elastic 功能和集成。
Elastic 持续创新的精髓
Elastic 在 AI 领域投入巨资。我们最近发布了许多新功能和令人兴奋的集成
- Elasticsearch 开放式推理 API 添加对 Cohere 嵌入的支持
- 在您的数据上推出 Elasticsearch 向量数据库到 Azure OpenAI 服务(预览版)
- 加速多图向量搜索
- ...探索更多 Elastic Search Labs 以了解最新进展
我们 推理 API 中新的补全任务类型,以 OpenAI 作为第一个后端提供商,已在 Elastic Cloud 上的 无状态产品 中提供。它很快将在我们的下一个版本中提供给所有人。
使用 OpenAI 聊天补全与 Elasticsearch 的开放式推理 API
在本简短指南中,我们将展示一个简单的示例,说明如何在文档摄取过程中在推理 API 中使用新的补全任务类型。有关更深入的指南和交互式笔记本,请参阅 Elastic Search Labs GitHub 存储库。
要使以下指南正常工作,您需要拥有一个活动的 OpenAI 帐户并获取 API 密钥。有关您需要遵循的步骤,请参阅 OpenAI 的快速入门指南。您可以从各种 OpenAI 模型中进行选择。在以下示例中,我们使用了 `gpt-3.5-turbo`。
在 Kibana 中,您可以访问一个控制台,以便在 Elasticsearch 中输入这些后续步骤,甚至无需设置 IDE。
首先,您配置一个模型,该模型将执行补全
PUT _inference/completion/openai_chat_completions
{
"service": "openai",
"service_settings": {
"api_key": <api-key>,
"model_id": "gpt-3.5-turbo"
}
}
运行此命令后,您应该会看到相应的 `200 OK` 状态,表明该模型已正确设置为对任意文本执行推理。
您现在可以调用已配置的模型来对任意文本输入执行推理
POST _inference/completion/openai_chat_completions
{
"input": "What is Elastic?"
}
您将收到一个状态代码为 `200 OK` 的响应,类似于以下内容
{
"completion": [
{
"result": "Elastic is a software company that provides a range of products and solutions for search, logging, security, and analytics. Its flagship product, Elasticsearch, is a distributed, RESTful search and analytics engine that is used for full-text search, structured search, and analytics. Elastic also offers other products such as Logstash for log collection and parsing, Kibana for data visualization and dashboarding, and Beats for lightweight data shippers. These products can be combined to create powerful data analysis and monitoring solutions for organizations of all sizes."
}
]
}
下一个命令创建一个示例文档,我们将使用我们刚刚配置的模型对其进行总结
POST _bulk
{ "index" : { "_index" : "docs" } }
{"content": "You know, for search (and analysis) Elasticsearch is the distributed search and analytics engine at the heart of the Elastic Stack. Logstash and Beats facilitate collecting, aggregating, and enriching your data and storing it in Elasticsearch. Kibana enables you to interactively explore, visualize, and share insights into your data and manage and monitor the stack. Elasticsearch is where the indexing, search, and analysis magic happens. Elasticsearch provides near real-time search and analytics for all types of data. Whether you have structured or unstructured text, numerical data, or geospatial data, Elasticsearch can efficiently store and index it in a way that supports fast searches. You can go far beyond simple data retrieval and aggregate information to discover trends and patterns in your data. And as your data and query volume grows, the distributed nature of Elasticsearch enables your deployment to grow seamlessly right along with it. While not every problem is a search problem, Elasticsearch offers speed and flexibility to handle data in a wide variety of use cases: Add a search box to an app or website Store and analyze logs, metrics, and security event data Use machine learning to automatically model the behavior of your data in real time Use Elasticsearch as a vector database to create, store, and search vector embeddings Automate business workflows using Elasticsearch as a storage engine Manage, integrate, and analyze spatial information using Elasticsearch as a geographic information system (GIS) Store and process genetic data using Elasticsearch as a bioinformatics research tool We’re continually amazed by the novel ways people use search. But whether your use case is similar to one of these, or you’re using Elasticsearch to tackle a new problem, the way you work with your data, documents, and indices in Elasticsearch is the same."}
要总结多个文档,我们将使用 摄取管道 以及 脚本-、推理- 和 删除处理器 来设置我们的摘要管道。
PUT _ingest/pipeline/summarization_pipeline
{
"processors": [
{
"script": {
"source": "ctx.prompt = 'Please summarize the following text: ' + ctx.content"
}
},
{
"inference": {
"model_id": "openai_chat_completions",
"input_output": {
"input_field": "prompt",
"output_field": "summary"
}
}
},
{
"remove": {
"field": "prompt"
}
}
]
}
此管道只是在临时字段中以“请总结以下文本:”的指令为前缀,以便已配置的模型知道如何处理文本。当然,您可以将此文本更改为您想要的任何内容,这将解锁各种其他流行的用例
- 问答
- 翻译
- ...以及更多!
管道在执行推理后删除临时字段。
我们现在通过调用 重新索引 API 将我们的文档(s)通过摘要管道发送。
POST _reindex
{
"source": {
"index": "docs",
"size": 50
},
"dest": {
"index": "docs_summaries",
"pipeline": "summarization_pipeline"
}
}
您的文档现在已总结并准备好进行搜索
POST docs_summaries/_search
{
"query": {
"match_all": { }
}
}
基本上就是这样,您只需通过几个简单的 API 调用即可创建一个功能强大的摘要管道,该管道可用于任何摄取机制!有很多用例,摘要非常有用,例如在生成语义嵌入之前总结大量文本或将大型文档转换为简洁的摘要。这可以降低您的存储成本,例如提高价值实现时间,如果您只对大型文档的摘要感兴趣等。顺便说一句,如果您想从二进制文档中提取文本,可以查看我们的开源 数据提取服务!
令人兴奋的未来
但我们不会止步于此。我们已经在努力将 Cohere 的聊天 作为我们 `completion` 任务的另一个提供商进行集成。我们还在积极探索与补全 API 结合的新检索和摄取用例。立即添加 Elastic Search Labs 书签,以随时了解最新信息!
Elasticsearch 与行业领先的生成式 AI 工具和提供商具有原生集成。查看我们正在进行的关于 超越 RAG 基础 或构建生产就绪型应用程序 Elastic 向量数据库 的网络研讨会。