Agentic RAG 详解 - 从头开始​​构建你自己的智能体系统

AI摘要

本文介绍 Agentic RAG,它是在 RAG 流水线中引入 AI 代理。先回顾 RAG 和 AI 代理概念,阐述 Agentic RAG 工作方式、架构,包括单代理和多代理 RAG。还说明了实施步骤,如安装、下载代码等,最后进行代码展示及运行,以优化信息检索,提升 LLM 生成内容质量。

虽然检索增强生成(RAG)在 2023 年占据主导地位,但代理工作流正在推动 2024 年的巨大进展。智能体的使用为构建更强大、稳健且多功能的 大型语言模型(LLM)应用程序开辟了新的可能性。其中一种可能性是在 RAG 流水线中引入智能体,形成代理式 RAG 流水线。

本文将介绍 Agentic RAG 的概念、其实现方式,以及其优势和局限性。

Agentic RAG 详解 - 从头开始构建你自己的智能体系统

Agentic RAG 基础知识

Agentic RAG 描述了基于 AI 代理的 RAG 实现。在进一步讨论之前,让我们快速回顾一下 RAG 和 AI 代理的基本概念。

什么是检索增强生成(RAG)?

检索增强生成(Retrieval-Augmented Generation,RAG)是一种构建基于大型语言模型(LLM)应用的技术。它利用外部知识源为 LLM 提供相关上下文,以减少幻觉(hallucination)。

一个基础的 RAG 流水线由两个核心组件组成:

  1. 检索组件 —— 通常包括嵌入模型(embedding model)和向量数据库(vector database)。
  2. 生成组件 —— 基于 LLM 生成回答。

在推理过程中,用户查询会用于对索引文档执行相似性搜索,检索与查询最匹配的文档,并将其提供给 LLM 作为额外的上下文,以提高回答的准确性和相关性。

典型的 RAG 应用有两个相当大的局限性:

  1. 简单的 RAG 管道仅考虑一个外部知识源。但是,某些解决方案可能需要两个外部知识源,而某些解决方案可能需要外部工具和 API,例如网络搜索。
  2. 它们是一次性解决方案,这意味着上下文只检索一次。没有对检索到的上下文的质量进行推理或验证。

不知道大家有没有使用过 DeepSeek 来进行搜索这样的问题?

很显然,由于 DeepSeek 没有模型之前建立的知识,那么,它只能回答在这个模型之前才有的知识。对于 DeepSeek 模型建立之后的知识它是一无所知。很显然它没有使用 AI Agent。如果在 DeepSeek 的网站中使用了 AI Agent,那么我们的情况就有所不同。在今天的展示中,假如我们也搜索和我们的知识库中无关的问题,那么这个搜索结果可以从网上搜索而来,我们最终得到的答案是这样的:

从上面,我们可以看出来使用 AI Agent 的好处!

AI 系统中的代理(智能体)是什么?

随着 LLM 的普及,出现了新的智能体(AI agent)和多智能系统范式。智能体是具有角色和任务的 LLM,可以访问内存和外部工具。LLM 的推理能力可帮助代理规划所需的步骤并采取行动完成手头的任务。

因此,智能体的核心组件是:

  • LLM(具有角色和任务)
  • 内存(短期和长期)
  • 规划(例如反思、自我批评、查询路由等)
  • 工具(例如计算器、网络搜索等)

一个流行的框架是 ReAct 框架。ReAct 代理可以通过将路由、查询规划和工具使用组合成一个实体来处理顺序多部分查询,同时保持状态(在内存中)。

ReAct = Reason + Act(使用 LLM)

该过程涉及以下步骤:

  1. 思考:收到用户查询后,代理会推理下一步要采取的操作
  2. 操作:代理决定操作并执行该操作(例如,使用工具)
  3. 观察:代理观察操作的反馈
  4. 此过程不断迭代,直到代理完成任务并响应用户。

什么是 Agentic RAG?

Agentic RAG 指的是一种基于 AI 代理(AI agents)的 RAG 实现方式。它在 RAG 流水线中引入 AI 代理,不仅用于协调各个组件,还能够执行超越简单信息检索和生成的额外任务,以弥补传统非代理式 RAG 流水线的局限性。

Agentic RAG 描述了基于 AI 代理的 RAG 实现。

Agentic RAG 如何工作?

尽管 AI 代理可以嵌入 RAG 流水线的不同阶段,但 Agentic RAG 最常见的做法是增强检索(retrieval)组件,使其具备智能决策能力。

具体来说,检索组件通过 检索代理(retrieval agents) 变得更加智能化,这些代理可以访问多种检索工具,例如:

  • 向量搜索引擎(又称查询引擎),用于在向量索引上执行向量搜索(类似于传统 RAG 流水线中的检索方式)
  • Web 搜索,用于实时查找最新信息
  • 计算器,支持数值计算
  • API 调用,可用于访问软件程序,例如电子邮件或聊天应用
  • 其他定制化工具,适用于特定业务需求

RAG 代理(RAG agent)可以在检索过程中进行推理和决策,例如:

  1. 决定是否需要检索信息,避免不必要的查询
  2. 选择合适的检索工具,确保获取最相关的信息
  3. 自动构造查询,优化搜索结果
  4. 评估检索到的上下文,判断是否需要重新检索,以提高结果质量

通过这些智能化特性,Agentic RAG 能够优化信息检索流程,提高 LLM 生成内容的准确性和相关性。

Agentic RAG 架构

与顺序执行的传统 RAG 架构不同,Agentic RAG 的核心是 AI 代理(Agent)。这种架构可以根据复杂度的不同进行扩展。在最简单的形式下,单代理 RAG(Single-Agent RAG) 充当路由器(Router) 的角色,而在更高级的场景中,可以使用多个代理构建 多代理 RAG(Multi-Agent RAG)。本节介绍这两种基础架构。

单代理 RAG(Single-Agent RAG,Router)

在最简单的形式下,Agentic RAG 充当 路由器(Router)。这意味着:

  • 你的系统至少包含 两个或以上的外部知识源
  • AI 代理决定从哪个知识源获取额外上下文

然而,外部知识源不仅限于 向量数据库(Vector Database),它还可以是各种工具和服务,例如:

  • 向量搜索引擎:从向量数据库(如 Elasticsearch、FAISS)检索相关文档
  • Web 搜索:进行实时查询,获取最新的外部信息
  • API 调用:访问业务系统,如 Slack 频道、电子邮件、CRM 等

例如,代理可以基于用户查询的需求,决定:

  • 是否需要检索信息?(有些问题可能不需要额外查询)
  • 应该从哪里检索?(数据库 vs. Web vs. API)
  • 如何优化查询?(调整关键词,提高检索准确度)

通过引入代理,RAG 系统能够更智能地选择最优的数据来源,提升查询效率和 LLM 生成内容的准确性。

多代理 RAG 系统(Multi-Agent RAG Systems)

尽管单代理 RAG 能够在不同知识源之间进行选择,但它仍然存在局限性:

  • 单一代理 需要同时执行 推理(Reasoning)、检索(Retrieval)和答案生成(Answer Generation),这可能导致性能瓶颈
  • 不同类型的检索任务 可能需要不同的专长,而单一代理可能无法高效处理所有类型的查询

因此,将多个代理 串联(Chain) 起来,形成 多代理 RAG(Multi-Agent RAG),可以更高效地完成复杂的信息检索任务。

多代理 RAG 体系结构

在 Multi-Agent RAG 体系中,通常会设计一个 主代理(Master Agent),负责协调多个专门的检索代理(Specialized Retrieval Agents)。

📌 示例架构:

  • 主代理(Master Agent):接收用户查询,决定如何拆分任务,并分配给适当的子代理
  • 专门检索代理(Specialized Retrieval Agents):每个子代理负责特定的数据源,例如:
    • 🔹 企业内部数据检索代理:从专有数据库或文档存储(如 Confluence、SharePoint)中获取信息
    • 🔹 个人数据检索代理:从用户的 电子邮件、Slack、企业 IM 等个人账户中检索数据
    • 🔹 公共信息检索代理:从 Web 搜索 获取最新的公开信息

多代理 RAG 的优势
  • ✅ 分工明确,提高效率:不同代理处理不同任务,避免单一代理超载
  • ✅ 灵活适配不同数据源:能够组合内部、个人和公开数据,提升查询质量
  • ✅ 更强的推理能力:主代理可以优化查询策略,甚至跨数据源整合信息

通过多代理架构,RAG 系统可以更智能、更高效地进行信息检索,从而提升 LLM 的回答质量和实时性。

超越检索代理(Beyond Retrieval Agents)

前面的示例主要展示了不同类型的检索代理(Retrieval Agents)的作用。然而,在 RAG 系统中,代理(Agents)不仅限于检索任务,它们的应用场景非常广泛,可以大幅增强 RAG 系统的能力。

实施 Agentic RAG

RAG(Retrieval-Augmented Generation,检索增强生成)是一种提升 LLM(大型语言模型)准确性和可靠性的方法,它通过连接 LLM 到某种外部数据源来生成响应。Agentic RAG 则是在这个过程中引入某种 AI 代理(Agent)。

简单来说,AI 代理是一个系统,它的大脑是 LLM,同时它还具备记忆能力,并且可以访问一组工具,利用这些工具自主决策并执行特定任务。LLM 本身其实可以被视为一个基本形式的 AI 代理。例如,ChatGPT 具有 LLM 作为大脑,并且能够在一个会话中记住聊天历史,这就是一种记忆能力。然而,ChatGPT 并不具备工具调用能力,所以它只是最基础的 AI 代理。

普通的 RAG(即 “Vanilla RAG”)的工作流程是:用户提出问题,系统进行检索(可能还会进行重新排序),然后将检索到的信息传递给 LLM 来生成响应。从这个角度来看,RAG 也可以被视为一种 AI 代理,因为它具备 LLM、记忆(聊天历史)和一个工具(检索能力)。

而我们今天要实现的是一个更复杂的 AI 代理。当用户提出问题后,我们会先进行检索,然后检查检索到的内容是否足以回答问题。如果足够,我们直接将检索内容传递给 LLM 生成答案;否则,我们会调用在线搜索工具,获取更多信息,然后再生成答案。

在上面的这张图中,你可以看到 Agentic RAG 的基本架构:

  1. 用户提出问题。
  2. 系统判断是否可以直接使用检索到的内容回答问题。
  3. 如果可以,就传递给 LLM 生成答案。
  4. 如果不行,就调用 AI 代理,使用工具(例如在线搜索)来查找额外的信息,然后再生成答案。

除了在线搜索,还有其他工具可用,例如:

  • 数学计算工具(用于计算任务)。
  • 摘要工具(用于文本总结)。
  • 翻译工具(用于语言转换)。

这些工具本质上就是一组函数,AI 代理可以根据需要调用它们。

你可能会问:“OpenAI 的 LLM 不是已经具备很强的推理能力吗?为什么还需要 AI 代理?”。确实,当你向 ChatGPT 提出一般性问题时,它可以直接进行推理并给出答案。但当涉及到外部信息的获取(例如在线搜索或数据库检索),LLM 本身是无法完成的。通过显式地设计我们的 AI 代理,我们可以完全掌控推理步骤,选择要使用的工具,并定义它们的工作模式。LLM 的推理能力是一种通用能力,而 AI 代理是一种可以执行特定任务的系统,例如执行在线搜索或文本处理。

安装

我们首先需要安装 Elasticsearch 及 Kibana。我们可以参考如下的文章来进行安装:

当我们安装的时候,选择 Elastic Stack 8.x 的文章来进行安装。在本展示中,我们将使用 Elastic Stack 8.17.2 来进行展示。当我们首次运行 Elasticsearch 时,我们可以看到如下的界面:

请记下上面的 elastic 超级用户的密码,以备在下面进行使用。

下载代码

为了展示方便,我们在地址 https://github.com/liu-xiao-guo/twosetai/blob/main/13_agentic_rag_es.ipynb 下载最新的代码。

拷贝证书

为了能够使得我们的代码能够正常工作,我们必须拷贝 Elasticsearch 的证书:

$ pwd
/Users/liuxg/python/twosetai
$ cp ~/elastic/elasticsearch-8.17.2/config/certs/http_ca.crt .
$ ls 13_agentic_rag_es.ipynb 
13_agentic_rag_es.ipynb
$ ls http_ca.crt 
http_ca.crt

创建一个 .env 文件

我们还需要创建一个叫做 .env 的本地文件,并置于项目的根目录下:

.env

ES_USER="elastic"
ES_PASSWORD="zhHdJmd5oBEVwEfoH2Cr"
ES_ENDPOINT="localhost"

MODEL_NAME=text-embedding-ada-002
AZURE_EMBEDDING_ENDPOINT=https://YourAzureEmbeddingName.openai.azure.com/
AZURE_EMBEDDING_API_KEY=YourEmbeddingKey
AZURE_EMBEDDING_API_VERSION=2023-05-15
 
AZURE_API_KEY=YourCompletionKey
AZURE_EDNPOINT="https://YourAzureChatCompletionName.openai.azure.com"
AZURE_API_VERSION="YourVersion"
AZURE_DEPLOYMENT_ID="YourDeploymentID"

如上所示,我们将使用 AzureOpenAI 来完成我们的展示。你需要按照文章 “Elasticsearch 开放 inference API 增加了对 Azure OpenAI 嵌入的支持” 来创建相应的资源。如果你的 Elasticsearch 有不同的地址及相应的账号,你需要针对上面的配置做响应的改动。

安装 Python 依赖项

我们使用如下的命令来安装 Python 包:

pip3 install openai elasticsearch python-dotenv PyPDF2 langchain langchain-community litellm langchain-openai langchain-elasticsearch duckduckgo_search

我们可以通过如下的命令来查看 Python 及 Elasticsearch 包的版本:

$ pip3 list | grep elasticsearch
elasticsearch             8.17.1
langchain-elasticsearch   0.3.2
$ python --version
Python 3.11.8

搜索的页面

在本示例中,我们将从一个页面下载其内容,并写入到 Elasticsearch 向量库中,然后针对它进行搜索。这个页面的地址是:What is Meta's Llama 3? Everything you Need to Know | Enterprise Tech News EM360Tech

当然,我们也可以使用 Elastic Stack 自带的 Crawler 来对它进行摄入。详细教程请参考文章 “Elastic:开发者上手指南”。

代码展示及运行

读入变量,创建 ES 连接及创建 AzureOpenAI 使用的变量

import os
import PyPDF2
from tqdm.notebook import tqdm
import re
import json

from dotenv import load_dotenv
from elasticsearch import Elasticsearch
from langchain_openai import AzureOpenAIEmbeddings
# from langchain.chat_models import AzureChatOpenAI
from openai import AzureOpenAI

load_dotenv()

ES_USER= os.getenv("ES_USER")
ES_PASSWORD = os.getenv("ES_PASSWORD")
ES_ENDPOINT = os.getenv("ES_ENDPOINT")

MODEL_NAME = os.getenv("MODEL_NAME")
AZURE_EMBEDDING_ENDPOINT = os.getenv("AZURE_EMBEDDING_ENDPOINT")
AZURE_EMBEDDING_API_KEY = os.getenv("AZURE_EMBEDDING_API_KEY")
AZURE_EMBEDDING_API_VERSION = os.getenv("AZURE_EMBEDDING_API_VERSION")

AZURE_API_KEY = os.getenv("AZURE_API_KEY")
AZURE_EDNPOINT = os.getenv("AZURE_EDNPOINT")
AZURE_API_VERSION = os.getenv("AZURE_API_VERSION")
AZURE_DEPLOYMENT_ID = os.getenv("AZURE_DEPLOYMENT_ID")

url = f"https://{ES_USER}:{ES_PASSWORD}@{ES_ENDPOINT}:9200"
es = Elasticsearch(url, ca_certs = "./http_ca.crt", verify_certs = True)

print(es.info())

elastic_index_name = "agent_rag_index"

embeddings = AzureOpenAIEmbeddings(
    model=MODEL_NAME,
    azure_endpoint=AZURE_EMBEDDING_ENDPOINT, 
    api_key= AZURE_EMBEDDING_API_KEY,
    openai_api_version=AZURE_EMBEDDING_API_VERSION
)

chat = AzureOpenAI(
  api_key = AZURE_API_KEY,  
  api_version = AZURE_API_VERSION,
  azure_endpoint = AZURE_EDNPOINT
)


def read_pdfs_from_folder(folder_path):
    pdf_list = []
    
    # Loop through all files in the specified folder
    for filename in tqdm(os.listdir(folder_path)):
        if filename.endswith('.pdf'):
            file_path = os.path.join(folder_path, filename)
            
            # Open each PDF file
            with open(file_path, 'rb') as file:
                reader = PyPDF2.PdfReader(file)
                content = ""
                
                # Read each page's content and append it to a string
                for page_num in range(len(reader.pages)):
                    page = reader.pages[page_num]
                    content += page.extract_text()
                
                # Add the PDF content to the list
                pdf_list.append({"content": content, "filename": filename})
    
    return pdf_list

folder_path = "./rag_data"

上面的代码输出为:

它显示我们的 ES 客户端连接是成功的。

读取 Web URL 里的内容

from typing import Optional
import requests

def fetch_url_content(url: str) -> Optional[str]:
    """
    Fetches content from a URL by performing an HTTP GET request.

    Parameters:
        url (str): The endpoint or URL to fetch content from.

    Returns:
        Optional[str]: The content retrieved from the URL as a string,
                       or None if the request fails.
    """
    prefix_url: str = "https://r.jina.ai/"
    full_url: str = prefix_url + url  # Concatenate the prefix URL with the provided URL
    
    try:
        response = requests.get(full_url)  # Perform a GET request
        if response.status_code == 200:
            return response.content.decode('utf-8')  # Return the content of the response as a string
        else:
            print(f"Error: HTTP GET request failed with status code {response.status_code}")
            return None
    except requests.RequestException as e:
        print(f"Error: Failed to fetch URL {full_url}. Exception: {e}")
        return None
# Replace this with the specific endpoint or URL you want to fetch
url: str = "https://em360tech.com/tech-article/what-is-llama-3"  
content: Optional[str] = fetch_url_content(url)


if content is not None:
    print("Content retrieved successfully:")
else:
    print("Failed to retrieve content from the specified URL.")

我们读取过后的 content 里的内容如下:

把文本分成块

from langchain_text_splitters import MarkdownHeaderTextSplitter
from langchain_text_splitters import RecursiveCharacterTextSplitter
from litellm import completion

token_size = 150
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
            model_name="gpt-4",
            chunk_size=token_size,
            chunk_overlap=0,
        )


text_chunks = text_splitter.split_text(content)
print(f"Total chunks: {len(text_chunks)}")

分成块后,我们可以通过如下方法查看第一个块:

写入数据到 Elasticsearch 中

我们可以通过如下的方法把数据写入到 Elasticsearch 中:

from langchain_elasticsearch import ElasticsearchStore

def ingest_data_into_es(texts):
    if not es.indices.exists(index=elastic_index_name):
        print("The index does not exist, going to generate embeddings")   
        docsearch = ElasticsearchStore.from_texts( 
            texts,
            embedding = embeddings, 
            es_url = url, 
            es_connection = es,
            index_name = elastic_index_name, 
            es_user = ES_USER,
            es_password = ES_PASSWORD
    )
    else: 
        print("The index already existed")
    
        docsearch = ElasticsearchStore(
            es_connection=es,
            embedding=embeddings,
            es_url = url, 
            index_name = elastic_index_name, 
            es_user = ES_USER,
            es_password = ES_PASSWORD    
        )

    return docsearch
    
docsearch = ingest_data_into_es(text_chunks)

我们可以在 Kibana 里进行查看:

上面显示共有 74 个文档。

搜索文档

def search(str):
    docs = docsearch.similarity_search(str)
    return docs

question = "what is openai o1 model?"
docs = search(question)
print("Found docs: ", len(docs))
print(docs)

判定搜索的结果是否相关

def azure_openai_completion(question, context, is_system_prompt=False):
    prompt = system_prompt if is_system_prompt else decision_system_prompt
    summary = chat.chat.completions.create(
    model = AZURE_DEPLOYMENT_ID,
    messages=[
            {"role": "system", "content": prompt.format(context=context) },
            {"role": "user", "content": user_prompt.format(question=question)},
        ]
    )

    print(summary)
    return summary
question = "what is openai o1 model"
results = search(question)
context = format_docs(results)
response = azure_openai_completion(question, context)

has_answer = response.choices[0].message.content
has_answer

从返回的结果中,我们可以看出来 has_answer 为 0,也即该文章不含有该问题的答案。即便使用 AzureOpenAI 的 completion 端点返回的结果也不是我们所需要的。

我们再来看看另外一个问题:

question = "what is Llama 3?"
results = search(question)
context = format_docs(results)
response = azure_openai_completion(question, context)

has_answer = response.choices[0].message.content
has_answer

has_answer 这次的值是 1,表明这篇文章含有这个问题的答案。

检查检索到的上下文是否可以回答问题

from IPython.display import Markdown, display
from duckduckgo_search import DDGS

def format_search_results(results):
    return "\n\n".join(doc["body"] for doc in results)
    

print(f"Question: {question}")
if has_answer == '1':
    print("Context can answer the question")
    # response = completion(
    #     model="gpt-4o-mini",
    #     messages=[{"content": system_prompt.format(context=context),"role": "system"}, {"content": user_prompt.format(question=question),"role": "user"}],
    #     max_tokens=500
    # )
    response = azure_openai_completion(question, context, True)
    print("Answer:")
    display(Markdown(response.choices[0].message.content))
else:
    print("Context is NOT relevant. Searching online...")
    results = DDGS().text(question, max_results=5)
    context = format_search_results(results)
    print("Found online sources. Generating the response...")
    # response = completion(
    #     model="gpt-4o-mini",
    #     messages=[{"content": system_prompt.format(context=context),"role": "system"}, {"content": user_prompt.format(question=question),"role": "user"}],
    #     max_tokens=500
    # )
    response = azure_openai_completion(question, context, True)
    print("Answer:")
    display(Markdown(response.choices[0].message.content))
    

在上面,我们依赖于用户所提的问题。如果 has_answer 已经得到答案,那么我们就直接展示答案。相反,如果 has_answer 的值为 0,那么我们就到网上去搜索答案,然后再去让 completion 接口去推理答案。

如果我们想使用 DeepSeek 来进行推理,我们必须在 .env 里添加两个变量:

OPENAI_API_KEY="YourDeepSeekKey"
DEEPSEEK_URL="https://api.deepseek.com/v1"

具体的代码可以在地址:https://github.com/liu-xiao-guo/twosetai/blob/main/13_agentic_rag_es_deepseek.ipynb 进行查看。

更多阅读,请参阅 “从零开始使用 LangGraph、LLaMA3 和 Elasticsearch 向量存储构建本地代理的教程”。

相关推荐

AgentHack Shanghai|基于阿里云AI搜索 Elasticsearch x Qoder 构建AI Agent应用

2026年12月12日,Elastic社区、阿里云与Qoder联合举办AgentHack实战活动,聚焦AI编程、搜索检索与智能体工具链融合。参赛者将使用唯一指定工具QoderCN,在一天内完成从需求分析到可演示原型的构建,结合阿里云AI搜索或Elastic生态实现真实场景应用。活动提供技术工作坊、导师答疑及1个月QoderCN专业版会员,鼓励展示数据检索、工具调用与任务闭环的完整链路。参赛者可基于阿里云Elasticsearch、ElasticCloud或自部署环境,打造企业知识问答、业务分析等智能体原型,

Elastic 中国社区官方博客 1380

Elastic 线下 Meetup 将于 2026 年 12 月 19 号下午在西安举行

2026年12月19日,Elastic、阿里云与新智锦绣联合举办西安站ElasticMeetup。活动聚焦Elasticsearch向量搜索、AI Agents构建及企业级知识引擎演进,特邀刘晓国、陈星宇、孔祥超等专家分享技术前沿实践。内容涵盖语义搜索、智能诊断、云原生管控与大模型时代搜索架构升级,助力开发者掌握企业级AI应用落地核心能力。

Elastic 中国社区官方博客 1283

Elastic 线下 Meetup 将于 2026 年 11 月 28 号下午在杭州举行

2026年11月28日,杭州阿里云谷园区将举办AI搜索技术盛会。活动汇聚Elastic社区首席布道师刘晓国、中国电子云高斌、阿里云汤祯捷及预言家科技欧阳楚才等专家,聚焦Elasticsearch向量搜索、AI Agents构建、本体智能体上下文引擎与电商智能导购系统,探讨AgenticSearch 2.0、多模态检索与企业级智能搜索演进。现场设茶歇、合影与抽奖,报名成功后请扫码入群。

Elastic 中国社区官方博客 1069

Elastic 线下 Meetup 将于 2026 年 11 月 7 号下午在南京举行

<think>我们只需要根据内容生成摘要,不超过150字。摘要应涵盖活动基本信息、时间地点、主题亮点等。注意字数限制。</think>2026 Elastic Meetup 南京站由Elastic与新智锦绣联合举办,11月7日在南京浦口举行。聚焦ES向量搜索、AI Agents、零外泄安全分析、大模型记忆中心及集群巡检,多位技术专家分享实战,含茶歇抽奖,诚邀开发者报名参加。

Elastic 中国社区官方博客 1364

Elastic:如何成为一名 Elastic 认证工程师,Elastic 认证分析师及 Elastic 认证可观测性工程师

Elasticsearch 无疑是是目前世界上最为流行的大数据搜索引擎。根据 DB - Engines 的统计,Elasticsearch 雄踞排行榜第一名,并且市场还在不断地扩大:能够成为一名 Elastic 认证工程师也是很多开发者的梦想。这个代表了 Elastic 的最高认证,在业界也得到了很高的认知度。得到认证的工程师,必须除了具有丰富的 Elastic Stack 知识,而且必须有丰富的操作及有效的解决问题的能力。拥有这个认证证书,也代表了个人及公司的荣誉。针对个人的好处是,你可以..

Elastic 中国社区官方博客 2万+

Elastic:开发者上手指南

你们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。我们可以按照如下的步骤来学习:1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍2)Elasticsearch中的一些重要概念:cluster,n..........................................................

Elastic 中国社区官方博客 17万+

Elastic:培训视频 - ​在生产环境中配置 Fleet Server 和 Elastic Agent 之间的安全

在这篇文章中,我将会把我写的有些内容录制成视频,供大家参考。希望对大家有所帮助。优酷的视频频道地址在这里。Elastic 简介及Elastic Stack 安装:优酷,腾讯 Elastic Stack docker 部署:优酷,腾讯 Elasticsearch中的一些重要概念(Cluster/Shards/Replica/Document/Type/Index):优酷,腾讯 开始使用El...............

Elastic 中国社区官方博客 1万+

Elasticsearch 简介

Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建并开源维护的。它的开源代码位于https://github.com/elastic/elasticsearch。同时,Elastic公司也拥有Logstash及Kibana开源项目。这个三个开源项目组合在一起,就形成了 ELK软件栈。他们三个共同形成了一个强大的...

Elastic 中国社区官方博客 17万+

对 OpenTelemetry Kafka 接收器的两项改动,避免一个缓慢的租户拖住其他租户

Elastic通过两项改进解决OpenTelemetry Kafka接收器中的“吵闹邻居”问题:一是为每个Kafka分区引入独立工作单元,实现租户间分区隔离;二是添加租户限流处理器,动态限制各租户在共享发送队列中的槽位占用,防止慢租户阻塞其他租户。结合max_in_flight配置提升单分区吞吐量与内存控制,确保记录不丢失、投递至少一次,同时保障多租户环境下稳定高效的数据处理。

Elastic 中国社区官方博客 333

三次模型调用,占据 92% 的等待时间:使用 OpenTelemetry 实现人工智能 agent 可观测性

使用OpenTelemetry追踪LangChain购物助手,发现92%耗时源于三次模型调用。虽将比较模型替换为更便宜的版本后,成本降低76%-83%,但四成问题响应变慢。通过追踪数据定位瓶颈,结合ES|QL分析词元用量与费用,验证了成本优化但延迟未改善。借助Elastic AI Agent建议,进一步测试return_direct=True以跳过冗余调用,实现性能与成本双赢。可观测性助力精准决策,确保答案正确、响应高效。

Elastic 中国社区官方博客 366

Elasticsearch:稠密向量字段类型

dense_vector字段用于存储稠密向量,支持k近邻搜索(kNN),默认启用索引并使用余弦相似度。可接受浮点数数组或Base64编码字符串输入,支持自动量化(如int8、int4、bbq)以降低内存占用。通过index_options配置索引类型(如hnsw、bbq_disk),并可启用过采样与重新评分提升精度。向量默认不存储于_source中以节省空间,可通过fields或_source.exclude_vectors显式返回。支持bit向量及GPU加速索引,适用于高维向量场景。

Elastic 中国社区官方博客 259

使用 Qoder 将 CSV 文件导入 Elasticsearch

本文演示如何通过Qoder智能助手,仅用4轮对话,将IMDB电影数据CSV文件(10,178条)高效导入Elasticsearch。无需编写代码,Qoder自动完成依赖安装、连接配置、字段类型推断(text/keyword/double)、数据验证及导入,支持自定义映射与数据转换,耗时约30秒,显著简化数据导入流程。

Elastic 中国社区官方博客 237

两条规则,一次故障,一条告警:变点检测如何减少告警噪声

Elastic Carlos Crespo揭示了基于ES|QL规则的AI agent如何通过重运行查询验证告警真实性,实现从日志变化到重大事件告警的自动化。系统先通过变点检测识别规则行为突变,再由发现agent核实故障存在性、规模与影响范围,并合并同类信号以减少噪声。每条告警均附带可追溯的查询证据,确保结论可验证。最终生成的告警包含严重程度、置信度、受影响拓扑及量化指标,支持运维决策。该流程结合代码与模型分工,保障可靠性与可解释性,已在多场景测试中验证有效性。

Elastic 中国社区官方博客 327

把词向量“贴”在地球仪上:用球面视角看 Embedding 的真实几何

本文通过将归一化词向量投影至3D球面,利用slerp绘制大圆弧,以真实反映余弦相似度对应的测地线距离。相比传统PCA平面散点图,球面可视化避免几何扭曲,直观呈现词间语义关系。结合Plotly实现交互式“词语地球仪”,可旋转观察聚类、跨语言对齐(如“cat”与“猫”),并对比高维真值与降维后距离的失真。代码简洁(<200行),支持模型替换与扩展,揭示“向量相近”在球面上的真实形态。

Elastic 中国社区官方博客 259

我们的 agent 技能如何调研、构建和测试完整的 Elastic 集成

作者:来自 Elastic我们让 agent 技能处理美国国家标准与技术研究院的国家漏洞数据库接口,得到了两个数据流和一个经过验证的通用表达式语言程序,并通过了流水线测试和系统测试。调研发现,一天中 78% 的通用漏洞与披露记录都是旧记录的重新发布,这一发现改变了设计。Elasticsearch 原生集成了业界领先的生成式人工智能工具和服务提供商。欢迎观看我们的网络研讨会,了解如何,或使用构建可用于生产环境的应用。要为你的使用场景构建最佳搜索解决方案,立即开始,或在你的上试用 Elastic。

Elastic 中国社区官方博客 129

基于 Elasticsearch 与 Jina AI 的全模态智能搜索实践:技术全解析

是一个结构清晰、覆盖全面且极具实操价值的开源项目。它不仅展示了Jina AI 多模态模型在非结构化数据表征上的强悍性能,也展现了在混合检索(BM25 + k-NN + RRF)以及多模态 RAG 架构上的工程实践。无论是准备构建企业级智能知识库、多媒体图库检索系统,还是探索音视频多模态推荐,该项目都提供了非常优秀的代码模版与架构参考。

Elastic 中国社区官方博客 201

你的日志早已写好告警:在 Elasticsearch 中生成 ES|QL 检测查询

Elastic Observability Labs展示如何基于OpenTelemetry日志自动生成精准的ES|QL检测查询。通过30个知识指标(27个推断、3个计算),生成10条查询,其中4条转化为Kibana告警规则。查询严格遵循三条提示词规则:精确匹配短语、不依赖log.level、仅在同文档中组合谓词。正常运行时匹配0条,故障期间捕获676条支付服务异常日志。查询随依赖知识失效自动停用,确保持续有效性。

Elastic 中国社区官方博客 684

基于 Jina OCR v1 与 Elasticsearch 的 PDF 智能混合检索与 RAG 系统实战指南

本文介绍开源项目jina-ocr-v1-pdf,基于JinaOCRv1高精度视觉解析与Elasticsearch的混合检索(RRF),构建端到端PDF智能问答系统。通过PyMuPDF渲染高清图像、并发OCR提取结构化文本(Markdown/HTML),结合自动切片向量化与BM25+语义检索融合,实现精准页码定位与上下文相关性提升。配合Streamlit前端与Kibana监控,支持企业级文档智能处理,有效解决扫描件、多栏、表格等复杂排版难题,为RAG应用提供高效、可扩展的技术范本。

Elastic 中国社区官方博客 547

Elastic Cloud 无服务器服务审计日志:将审计记录发送到可观测性或安全解决方案

ElasticCloud无服务器服务推出审计日志投递功能,支持将Elasticsearch与Kibana的活动日志(如索引变更、登录行为、数据访问)自动投递至同一组织内的可观测性或安全项目。附带8条告警规则和7个仪表板,涵盖凭据攻击检测、对象取证、数据访问追踪等场景。通过忽略筛选条件可降低存储成本,实现按需保留关键证据。支持跨项目日志聚合,助力安全与合规团队高效调查。立即免费试用14天,体验AI驱动的搜索与智能监控。

Elastic 中国社区官方博客 177

Elastic 在《Forrester Wave™:2026 年第四季度智能运维平台》报告中被评为强劲表现者

Elastic在《ForresterWave®:2026年第四季度智能运维平台》中被评为强劲表现者,获五项最高评分,涵盖算法可信度、可观测性即代码、AI技术栈、数据主权与定价透明度。其人工智能站点可靠性工程师以透明推理、完整上下文、持续学习和开放标准为核心,实现可验证排查、高效存储与跨环境兼容,助力团队信任AI、提升响应效率,推动智能运维迈向可验证、可进化的新阶段。

Elastic 中国社区官方博客 187

使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性

Elastic与Claude平台集成,通过OpenTelemetry将AI agent追踪数据实时发送至Elastic,实现无代码观测。用户可在Kibana中查看模型请求、工具调用及上下文协议的完整交互轮次,包含耗时、词元计数与对话内容。支持服务清单、告警规则与SLO设置,结合SDK可实现跨服务追踪。免费云试用已开放,快速接入即可全面掌握Claude agent性能与成本。

Elastic 中国社区官方博客 889

三个区域、三个 Kibana、一个视图:跨集群搜索登陆 Elastic 合成监测

Elastic 9.5推出合成监测跨集群搜索功能,实现多集群监测器统一视图。无需复制数据,中央Kibana可实时查询远程集群的探测结果,展示状态、用户旅程、截图与证书,支持按远程集群筛选与分组。配置仍保留在原集群,仅提供只读访问,管理需返回源Kibana。适用于有状态部署,暂不支持无服务器服务。告警跨集群功能正在开发中。

Elastic 中国社区官方博客 382

Elastic 重大事件功能如何将 100 条日志样本转化为检测规则

本文介绍Elastic重大事件功能如何通过智能日志采样,从100份样本中提取27个知识指标(如服务、依赖关系、技术等),构建有证据支撑的日志源描述,进而生成精准检测规则。相比均匀采样易遗漏罕见故障信息,该系统采用三路分层采样(按实体筛选、多样性、随机)确保覆盖长尾模式,并通过循环迭代与去重机制提升准确性。知识指标可审核、手动保留或排除,支持持续接入。第二部分将基于这些指标生成可执行的查询,实现从“看到”到“检测”的跨越。

Elastic 中国社区官方博客 298

给海量查询“减负”:列式查询改写如何让检索更“省力”

Elasticsearch 9.5.0推出的列式查询改写技术,实现“零改造、高兼容、高精准”的查询优化。通过按需读取字段、谓词下推与嵌套扁平化,显著降低冗余读取与解码开销。基于1.8亿条日志的实测验证:16个用例命中数完全一致,核心时延持平,边界场景稳定,DSL语法兼容。系统自动降级兜底,确保功能可用。该技术特别适用于日志检索等海量数据场景,为集群性能提升提供开箱即用的底层支撑。

Elastic 中国社区官方博客 636

Elastic 如何帮助奥迪 Revolut F1® 车队在工程软件中找到关键信息

Elastic与奥迪RevolutF1®车队达成多年合作,将作为2026年美国大奖赛官方赛事合作伙伴,并自2027年起成为其官方搜索与可观测性供应商。通过Elastic技术栈(Logstash、Elasticsearch、Kibana),车队实现跨系统日志与遥测数据的统一视图,助力工程师在毫秒级内快速排查问题,提升软件可靠性。该合作不仅强化工程效率,更推动AI辅助诊断与决策支持,为赛车性能持续优化提供技术支撑。

Elastic 中国社区官方博客 216

5 分钟内将 56 页扫描文档转化为带引用的答案:面向搜索无法读取的文档的检索增强生成流水线

通过Elasticsearch与jina-ocr-v1结合,可将扫描版PDF(如56页植物指南)快速转化为可检索、可引用的知识库。该流程利用单一模型完成文档解析,输出结构化Markdown,再由Elasticsearch自动分块并生成嵌入向量,支持混合检索(关键词+语义)。用户以自然语言提问,系统返回带页码引用的答案及推荐商品,全程在统一平台内完成,无需自建流水线。

Elastic 中国社区官方博客 497

我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic

Elastic团队历时三年,将OpenTelemetry Java Agent从内联字节码插桩迁移至基于invokedynamic的类加载器隔离模式,支持100+插桩模块,提升可维护性与调试能力。相比此前三人团队的迁移,此次协作规模扩大,通过渐进式发布、运行时开关与自动化工具确保生产稳定。新架构实现插桩代码独立加载、兼容Java平台模块系统,并解决旧版本字节码兼容性问题。2026年7月,相关任务正式关闭,标志着迁移完成。

Elastic 中国社区官方博客 327

将 Elastic 引入 Claude:原因、方法与注意事项

Elastic发布Claude插件,将自身AI能力融入开发者工作流。从提交到上线仅用三周,但过程充满挑战:需绕过权限限制、调整版本管理策略(改用stable分支)、应对审核警告(如凭据提示、图标缺失等),且上线后无通知。插件首发于社区目录,需额外验证才能进入官方市场。作者强调,技术之外,与Anthropic团队的人际沟通是关键。经验表明,文档未覆盖的细节常需实战互动解决。欢迎开发者共享经验,共同推动生态发展。

Elastic 中国社区官方博客 114

告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch

Kabanos是一款专为macOS设计的本地优先桌面客户端,整合Elasticsearch与OpenSearch集群管理痛点。它结合MongoDB Compass式树状浏览与Kibana DevTools高效控制台,支持凭据安全加密、生产环境二次确认、只读模式及沙盒化架构,保障操作安全。内置查询库、自动化Routines与DryRun模式,提升运维效率。基于Electron与Zod校验,实现渲染层与网络请求隔离。快速上手:克隆仓库,启动Docker测试集群,运行pnpm dev即可使用。开源项目欢迎贡献,推

Elastic 中国社区官方博客 390

控制告警如何触发、恢复和发送通知:Elastic 可观测性中的 Kibana 通用告警

Kibana通用告警将ES|QL查询转化为可管理的告警数据,支持灵活的规则定义、精细的延迟与恢复控制、跨系统告警统一视图及基于工作流的通知策略。它与经典告警并行运行,适用于复杂场景,如自定义严重级别、多源告警整合与精细化通知管理。2026年10月起将在Elastic云端无服务器服务中默认启用,兼容托管与自托管部署,助力团队实现高效、可扩展的可观测性告警体系。

Elastic 中国社区官方博客 392
上一篇: Elastic Security 荣获 AV-Comparatives 2024 企业认可产品奖
下一篇: 超越向量:带 Agents 的智能混合搜索
Elastic 中国社区官方博客
Elastic 中国社区官方博客 企业官方账号 企业官方账号 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄12年 5万+粉丝 3109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值