Elasticsearch 开放推理 API 增加了对 Anthropic 的 Claude 的支持

2024年9月5日   |   by mebius

作者:来自 ElasticJonathan Buttner

%title插图%num

我们很高兴地宣布 Elasticsearch Open Inference API 的最新功能:集成 Anthropic 的 Claude。这项功能使 Elastic 用户能够直接连接到 Anthropic 平台,并使用 Claude 3.5 Sonnet 等大型语言模型来构建 GenAI 应用程序,并实现问答等用例。以前,客户可以从 Amazon Bedrock 等提供商处访问此功能,但现在可以使用他们的 Anthropic 帐户来实现这些目的。

使用 Anthropic 的消息来回答问题

在此博客中,我们将使用 Claude Messages API 在提取(ingestion)过程中回答问题,以便在搜索之前准备好答案。在开始与 Elasticsearch 交互之前,请确保你拥有 Anthropic API 密钥,方法是先创建一个评估帐户生成一个密钥。我们将使用 Kibana 的控制台在 Elasticsearch 中执行这些后续步骤,而无需设置 IDE。

首先,我们配置一个推理端点,它将与 Anthropic 的消息 API 交互:

PUT _inference/completion/anthropic_completion
{
  "service": "anthropic",
  "service_settings": {
    "api_key": "",
    "model_id": "claude-3-5-sonnet-20240620"
  },
  "task_settings": {
    "max_tokens": 1024
  }
}

成功创建推理端点后,我们将收到类似以下的响应,状态代码为 200 OK:

{
  "mtgcodeodel_id": "anthropic_completion",
  "task_type": "completion",
  "service": "anthropic",
  "service_settings": {
    "model_id": "claude-3-5-sonnet-20240620",
    "rate_limit": {
      "requests_per_minute": 50
    }
  },
  "task_settings": {
    "max_tokens": 1024
  }
}

现在,我们可以调用已配置的端点来对任何文本输入执行 completion。让我们向模型询问 GenAI 的简短描述:

POST _inference/completion/anthropic_completion
{
  "input": "What is a short description of GenAI?"
}

我们应该收到状态代码为 200 OK 的响应,其中包含 GenAI 的简短描述:

{
  "completion": [
    {
      "result": "GenAI, short for Generative Artificial Intelligence, refers to AI systems that can create new content, such as text, images, audio, or video, based on patterns learned from existing data. These systems use advanced machine learning techniques, often involving deep neural networks, to generate human-like outputs in response to prompts or inputs. GenAI has diverse applications across industries, including content creation, design, coding, and problem-solving."
    }
  ]
}

现在,我们可以设置一个问题目录,其中包含我们希望在采集期间得到解答的问题。我们将使用 Elasticsearch Bulk API 来索引有关 Elastic 产品的这些问题:

POST _bulk
{ "index" : { "_index" : "questions" } }
{"question": "What is Elasticsearch?"}
{ "index" : { "_index" : "questions" } }
{"question": "What is Kibana?"}
{ "index" : { "_index" : "questions" } }
{"question": "What is Logstash?"}

索引成功后应返回类似以下的响应:

{
  "errors": false,
  "took": 1552829728,
  "items": [
    {
      "index": {
        "_index": "questions",
        "_id": "ipR_qJABkw3SJM5Tm3IC",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 1,
          "failed": 0
        },
        "_seq_no": 0,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "questions",
        "_id": "i5R_qJABkw3SJM5Tm3IC",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 1,
          "failed": 0
        },
        "_seq_no": 1,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "questions",
        "_id": "jJR_qJABkw3SJM5Tm3IC",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 1,
          "failed": 0
        },
        "_seq_no": 2,
        "_primary_term": 1,
        "status": 201
      }
    }
  ]
}

我们现在将使用scriptinferenceremove 处理器来创建我们的问答ingest pipeline

PUT _ingest/pipeline/question_answering_pipeline
{
  "processors": [
    {
      "script": {
        "source": "ctx.prompt = 'Please answer the following question: ' + ctx.question"
      }
    },
    {
      "inference": {
        "model_id": "anthropic_completion",
        "input_output": {
          "input_field": "prompt",
          "output_field": "answer"
        }
      }
    },
    {
      "remove": {
        "field": "prompt"
      }
    }
  ]
}

管道在名为 prompt 的临时字段中为 question 字段添加前缀文本:“Please answer the following question: ”。临时 prompt 字段的内容通过 inferenceAPI 发送到 Anthropic 服务。使用摄取管道提供了广泛的灵活性,因为你可以设置预提示以满足你的需求。这种方法也可用于汇总文档。

接下来,我们将通过调用 reindexAPI 将包含问题的文档通过问答管道发送。

POST _reindex
{
  "source": {
    "index": "questions",
    "size": 50
  },
  "dest": {
    "index": "answers",
    "pipeline": "question_answering_pipeline"
  }
}

我们应该收到类似以下的回应:

{
  "took": 9571,
  "timed_out": false,
  "total": 3,
  "updated": 0,
  "created": 3,
  "deleted": 0,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1,
  "throttled_until_millis": 0,
  "failures": []
}

在生产设置中,你可能会使用另一种提取机制以自动方式提取文档。查看我们的 “将数据添加到 Elasticsearch” 指南,了解有关 Elastic 提供的将数据提取到 Elasticsearch 的各种选项的更多信息。我们还致力于展示提取机制并提供使用第三方工具将数据引入 Elasticsearch 的指导。例如,查看使用 Meltano 将数据从 Snowflake 提取到 Elasticsearch:开发人员的旅程,了解如何使用 Meltano 提取数据。

我们现在可以使用 SearchAPI 搜索我们预先生成的答案:

POST answers/_search
{
  "query": {
    "match_all": {}
  }
}

响应将包含预先生成的答案:

{
  "took": 11,
  "timed_out": false,
  "_shards": { ... },
  "hits": {
    "total": { ... },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "answers",
        "_id": "4RO6YY8Bv2OsAP2iNusn",
        "_score": 1.0,
        "_ignored": [
          "answer.keyword"
        ],
        "_source": {
          "model_id": "azure_openai_completion",
          "question": "What is Elasticsearch?",
          "answer": "Elasticsearch is an open-source, RESTful, distributed search and analytics engine built on Apache Lucene. It can handle a wide variety of data types, including textual, numerical, geospatial, structured, and unstructured data. Elasticsearch is scalable and designed to operate in real-time, making it an ideal choice for use cases such as application search, log and event data analysis, and anomaly detection."
        }
      },
      { ... },
      { ... }
    ]
  }
}

预先生成常见问题的答案对于降低运营成本特别有效。通过最大限度地减少对即时响应生成的需求,你可以显著减少所需的计算资源量。此外,这种方法可确保每个用户都收到相同的精确信息。一致性至关重要,尤其是在需要高可靠性和准确性的领域,例如医疗、法律或技术支持。

准备好自己尝试一下了吗?开始免费试用
Elasticseartgcodech 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GtgcodeenAI 应用程序!

原文:Elasticsearch open inference API adds support for Anthropic’s Claude — Search Labs

文章来源于互联网:Elasticsearch 开放推理 API 增加了对 Anthropic 的 Claude 的支持

相关推荐: Elasticsearch:使用 Amazon Bedrock 的 semantic_text

tgcode 作者:来自 ElasticGustavo Llermaly 使用 semantic_text 新功能,并使用 AWS Bedrock 作为推理端点服务。 Elasticsearch 的新 semantic_text 映射类型旨在简化构建 RAG …

Tags: , ,