From 42987cee8117593faa4ee802647a5fb27495e033 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Mon, 8 Sep 2025 17:45:22 +0200 Subject: [PATCH 01/15] WIP: 1chat docs POC --- docset.yml | 1 + .../search/agent-builder/conversations.md | 15 ++ solutions/search/agent-builder/get-started.md | 84 +++++++ .../agent-builder/limitations-known-issues.md | 26 +++ .../agent-builder/programmatic-access.md | 103 +++++++++ solutions/search/agent-builder/tools.md | 208 ++++++++++++++++++ solutions/search/elastic-agent-builder.md | 58 +++++ solutions/toc.yml | 8 + 8 files changed, 503 insertions(+) create mode 100644 solutions/search/agent-builder/conversations.md create mode 100644 solutions/search/agent-builder/get-started.md create mode 100644 solutions/search/agent-builder/limitations-known-issues.md create mode 100644 solutions/search/agent-builder/programmatic-access.md create mode 100644 solutions/search/agent-builder/tools.md create mode 100644 solutions/search/elastic-agent-builder.md diff --git a/docset.yml b/docset.yml index aaa7436f12..40ed3676ad 100644 --- a/docset.yml +++ b/docset.yml @@ -305,3 +305,4 @@ subs: ece-apis: https://www.elastic.co/docs/api/doc/cloud-enterprise/ intake-apis: https://www.elastic.co/docs/api/doc/observability-serverless/ models-app: "Trained Models" + agent-builder: "Elastic Agent Builder" diff --git a/solutions/search/agent-builder/conversations.md b/solutions/search/agent-builder/conversations.md new file mode 100644 index 0000000000..2d5386d4c5 --- /dev/null +++ b/solutions/search/agent-builder/conversations.md @@ -0,0 +1,15 @@ +--- +navigation_title: "Conversations" +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# Conversations UI in {{agent-builder}} + + +The **Conversations** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. + diff --git a/solutions/search/agent-builder/get-started.md b/solutions/search/agent-builder/get-started.md new file mode 100644 index 0000000000..131433d23d --- /dev/null +++ b/solutions/search/agent-builder/get-started.md @@ -0,0 +1,84 @@ +--- +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# Get started + +Learn how get started by enabling the {{agent-builder}} features and begin chatting with your data. + +{{agent-builder}} is disabled by default. Follow these steps to enable the features and start using Chat. + +:::::{stepper} +::::{step} Choose your deployment type + +- **Option 1:** [{{es}} {{serverless-short}}](/solutions/search/serverless-elasticsearch-get-started.md) +- **Option 2:** [{{ech}}](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md) + +:::{tip} +Not sure which deployment type to choose? Learn more in [Compare {{ech}} and {{serverless-short}}](/deploy-manage/deploy/elastic-cloud/differences-from-other-elasticsearch-offerings.md). +::: + +:::: + +::::{step} Enable features + +Choose your preferred method to enable the {{agent-builder}} features. + +::::{tab-set} + +:::{tab-item} API +:sync: api + +Run the following command in the Dev Tools [Console](/explore-analyze/query-filter/tools/console.md): + +```console +POST kbn://internal/kibana/settings +{ + "changes": { + "agentBuilder:enabled": true + } +} +``` + +::: + +:::{tab-item} {{ech}} UI +:sync: stack +```{applies_to} +serverless: unavailable +``` + +On {{ech}} deployments, you can also enable the features in **Advanced Settings**: + +1. Access your Kibana settings through **Stack Management > Advanced Settings**. +2. Enable the `agentBuilder` settings: +```json +uiSettings.overrides: + agentBuilder:enabled: true +``` + +::: + +:::: + +:::: + +::::{step} Start chatting + +Refresh the browser page and find **Chat/Conversations** in the navigation menu to start using the feature. +You can also search for **Chat** in the [global search bar](/explore-analyze/find-and-organize/find-apps-and-objects.md). + +The Chat UI provides a conversational interface where you can interact with agents and explore your data using natural language. Learn more in [Conversations](conversations.md). + +:::{note} +For {{ech}} deployments, make sure you are using the solution navigation instead of classic navigation. +You can set up a new [space](/deploy-manage/manage-spaces.md) to use the solution nav. +::: + +:::: +::::: diff --git a/solutions/search/agent-builder/limitations-known-issues.md b/solutions/search/agent-builder/limitations-known-issues.md new file mode 100644 index 0000000000..b02d233759 --- /dev/null +++ b/solutions/search/agent-builder/limitations-known-issues.md @@ -0,0 +1,26 @@ +--- +navigation_title: "Limitations & known issues" +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# Limitations and known issues in {{agent-builder}} + +## Model Selection + +Today we only use the `rainbow-sprinkles` model running on the Elastic Inference Service which is Claude 3.7, on Cloud / Serverless. Locally this picks the first AI connector available. Currently we do not have UI controls to select which connector (and therefore which model) to use. + + +{{agent-builder}} has some limitations to be aware of: + +Known Bugs +Unable to follow up with a question in a conversation (resolved in latest 9.2-snapshot, affects serverless) +Unable to use MCP server (resolved in latest 9.2-snapshot, affects serverless) + + + +We're continuously working to improve these areas and welcome your feedback to help shape the future development of {{agent-builder}}. \ No newline at end of file diff --git a/solutions/search/agent-builder/programmatic-access.md b/solutions/search/agent-builder/programmatic-access.md new file mode 100644 index 0000000000..beb6b1cc61 --- /dev/null +++ b/solutions/search/agent-builder/programmatic-access.md @@ -0,0 +1,103 @@ +--- +navigation_title: "Programmatic access" +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# Work programmatically with {{agent-builder}} + +{{agent-builder}} provides comprehensive APIs and additional integration options for programmatic access and automation. + +- **APIs**: RESTful APIs for creating, managing, and executing tools programmatically +- **MCP server**: A standardized interface at `/api/chat/mcp` that allows external MCP clients (such as Claude Desktop) to access {{agent-builder}} tools +- **A2A server**: Agent-to-agent communication endpoints that follow the A2A protocol specification, enabling external A2A clients to interact with {{agent-builder}} agents + +These interfaces enable you to build integrations with other applications and extend {{agent-builder}}'s capabilities to fit your specific requirements. + +## Working with the API + +The Chat API allows you to programmatically create and manage tools. You can use this API to: +- Create new tools +- Update existing tool configurations +- Delete tools when they're no longer needed +- List available tools + +Here's an example API call to create a new custom {{esql}} tool: + +```console +POST kbn://api/chat/tools +{ + "id": "recent_orders", + "description": "Find recent orders for a customer", + "configuration": { + "query": "FROM orders | WHERE customer_id == ?customer_id | SORT @timestamp DESC | LIMIT 5", + "params": { + "customer_id": { + "type": "keyword", + "description": "Customer identifier" + } + } + }, + "type": "esql", + "tags": ["orders", "customers"] +} +``` + +## MCP server + +The [**Model Context Protocol (MCP) server**](https://modelcontextprotocol.io/docs/getting-started/intro) server provides a standardized interface for external clients to access {{agent-builder}} tools. + +### MCP server endpoint + +The MCP server is available at: + +``` +/api/chat/mcp +``` + +### Configuring Claude Desktop for MCP integration + +To use Claude Desktop with your Elastic instance: + +```json +{ + "mcpServers": { + "elastic": { + "command": "npx", + "args": [ + "mcp-remote", + "http://your-kibana-url/api/chat/mcp", + "--header", + "Authorization:${AUTH_HEADER}" + ], + "env": { + "AUTH_HEADER": "ApiKey your-api-key-here" + } + } + } +} +``` + +## Agent-to-Agent (A2A) server + +The [**Agent-to-Agent (A2A)server**](https://github.com/a2aproject/A2A) enables external A2A clients to communicate with {{agent-builder}} agents. + +### Agentcards endpoint + +Get metadata about available agents: + +``` +GET /api/chat/a2a/{agentId}.json +``` + +### A2A protocol endpoint + +Interact with agents following the A2A protocol specification: + +``` +POST /api/chat/a2a/{agentId} +``` \ No newline at end of file diff --git a/solutions/search/agent-builder/tools.md b/solutions/search/agent-builder/tools.md new file mode 100644 index 0000000000..78560f9ece --- /dev/null +++ b/solutions/search/agent-builder/tools.md @@ -0,0 +1,208 @@ +--- +navigation_title: "Tools" +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# Tools in {{agent-builder}} + +Agents use tools to search, retrieve, and take meaningful steps on your behalf. + +Tools can be thought of as functions: modular, reusable actions that agents can call to interact with your {{es}} data. + +## How agents use tools + +Tools enable agents to work with {{es}} data. When an agent receives a natural language query, it does the following: + +1. Analyzes the semantic intent of the request +2. Selects appropriate tools from its available toolset +3. Maps the request parameters to tool input parameters +4. Executes the tools in sequence as needed +5. Processes the structured output data + +Each tool is an atomic operation with a defined signature - accepting typed parameters and returning structured results in a format the agent can parse, transform, and incorporate into its response generation. + +## Tool types + +There are two main types of tools in {{agent-builder}}: + +- **{{esql}} tools**: Execute [{{esql}}](elasticsearch://reference/query-languages/esql.md) queries against your indices, allowing agents to retrieve and analyze data using the Elasticsearch query language. +- **Index tools**: Provide core capabilities for working with indices, enabling you to search indices, retrieve documents by ID, view index mappings, discover relevant indices, and list available indices. + +{{agent-builder}} ships with a set of built-in system tools whose names are dot-prefixed. For example: `.execute_esql`. +Users can also create [custom tools](#create-custom-tools). + +Key system tools include: + +- **`.execute_esql`**: Executes an {{esql}} query and returns the results in a tabular format +- **`.generate_esql`**: Generates an {{esql}} query from a natural language query +- **`.get_document_by_id`**: Retrieves the full content of an {{es}} document based on its ID and index name +- **`.get_index_mapping`**: Retrieves mappings for the specified index or indices +- **`.index_explorer`**: Lists relevant indices and corresponding mappings based on a natural language query +- **`.list_indices`**: Lists the indices in the {{es}} cluster the current user has access to +- **`.search`**: A powerful tool for searching and analyzing data within a specific {{es}} index + +System tools cannot be modified or deleted, but serve as building blocks for more complex interactions. + +### Find available tools + +Find the list of available tools on the **Tools** landing page in the UI. + +You can also use the following API call, which returns detailed information about system tools, including their parameters and descriptions. + +``` +GET kbn://api/chat/tools +``` + +## Tool parameters + +Parameters enable tools to be dynamic and adaptable to different queries. Each parameter has: + +- A **name** that identifies it +- A **type** (such as keyword, number, boolean) +- A **description** that helps the agent understand when and how to use it + +For {{esql}} tools, parameters are defined in the query using the syntax `?parameter_name` and must be configured when creating the tool. + +Parameters can be: +- **Manually defined**: You explicitly define the parameters a tool needs +- **Inferred from query**: For {{esql}} tools, you can use the "Infer parameters from query" button to automatically detect parameters in your {{esql}} statement + +Providing clear, descriptive parameter names and descriptions helps agents properly use your tools when answering queries. + +## Create custom tools + +You can create custom tools to help agents interact with your data in specific ways. This section covers how to create and test tools through both the UI and API. + +### Use the UI + +1. Navigate to the Tools page in Kibana +2. Click the blue **New tool** button +3. Select the tool type you want to create +4. Fill in the required fields: + - **Name**: Enter a descriptive name for your tool (without a dot prefix) + - **Description**: Write a clear explanation of what the tool does and when it should be used + - Tool-specific configuration ({{esql}} query or index settings) + - **Parameters**: For {{esql}} tools, define any parameters your query needs + - **Tags**: (Optional) Add labels to categorize and organize your tools +5. Click **Save** to create your tool + +### Use the API + +You can also create tools programmatically: + +For {{esql}} tools: + +```json +POST kbn://api/chat/tools +{ + "id": "recent_orders", <1> + "description": "Find recent orders for a specific customer. Use this tool when users ask about their recent orders or purchase history.", <2> + "configuration": { + "query": "FROM orders | WHERE customer_id == ?customer_id | SORT @timestamp DESC | LIMIT 5", <3> + "params": { + "customer_id": { <4> + "type": "keyword", + "description": "The unique identifier for the customer" + } + } + }, + "type": "esql", <5> + "tags": ["orders", "customers"] <6> +} +``` + +1. A unique identifier for your tool that will be used in API calls +2. Detailed description that helps the agent understand when to use this tool +3. {{esql}} query with parameters prefixed by `?` +4. Parameter definition including type and description +5. Tool type specifier (use "esql" for {{esql}} tools) +6. Optional tags for categorization + +For index search tools: + +```json +POST kbn://api/chat/tools +{ + "id": "search_products", <1> + "description": "Search the products catalog for specific items. Use this when users are looking for product information.", <2> + "configuration": { + "index": "products", <3> + "fields": ["name", "description", "category", "tags"] <4> + }, + "type": "index_search", <5> + "tags": ["products", "catalog"] <6> +} +``` + +1. Unique identifier for the tool +2. Description explaining when and how to use this tool +3. The specific index this tool will search against +4. Fields within the index that should be searchable +5. Tool type specifier (use "index_search" for index search tools) +6. Optional tags for organization + +### Testing your tools + +After creating a tool, test it before assigning it to agents: + +1. Find your tool in the Tools list +2. Click the test icon associated with your tool +3. Enter test values for each parameter or search query +4. Run the test to verify the tool executes correctly and returns the expected results + +Testing helps ensure your tool returns useful results and handles parameters correctly. + + +### Best practices + +1. **Write descriptive names**: Use clear, action-oriented names +2. **Provide detailed descriptions**: Explain when and how the tool should be used +3. **Limit scope**: Focus each tool on a specific task rather than creating overly complex tools +4. **Use meaningful parameter names**: Choose names that clearly indicate what the parameter represents +5. **Add comprehensive parameter descriptions**: Help the agent understand what values to use +6. **Include `LIMIT` clauses in {{esql}} queries**: Prevent returning excessive results +7. **Use appropriate tags**: Add relevant tags to make tools easier to find and organize + +## Tool namespaces + +Tool namespacing helps organize and identify tools by their source. System tools use a dot prefix (`.tool_name`) to indicate they are built-in capabilities. This convention: + +- Prevents naming conflicts between system and custom tools +- Makes it easy to identify tool sources +- Provides a consistent pattern for tool identification + +:::{note} +Custom tool IDs cannot be dot-prefixed, because the ID must start and end with a letter or number. +::: + +## Manage tools + +### List available tools + +Access the complete list of available tools from the Tools page in Kibana. This view shows: +- Tool names and descriptions +- Tool types +- Associated tags +- Actions (edit, delete, test) + +### Assign tools to agents + +Tools must be assigned to agents before they can be used: +1. Navigate to the agent configuration page +2. Select the **Tools** tab +3. Add the desired tools to the agent +4. Save the agent configuration + +### Update and delete tools + +Custom tools can be modified or removed as needed: +1. From the Tools page, find the tool you want to modify +2. Click the edit icon to update the tool or the delete icon to remove it +3. For updates, modify the tool properties and save your changes + +Note that system tools cannot be modified or deleted. \ No newline at end of file diff --git a/solutions/search/elastic-agent-builder.md b/solutions/search/elastic-agent-builder.md new file mode 100644 index 0000000000..5420a5ad65 --- /dev/null +++ b/solutions/search/elastic-agent-builder.md @@ -0,0 +1,58 @@ +--- +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# {{agent-builder}} + +{{agent-builder}} is an AI-powered conversation framework for working with {{es}} data using natural language. It features both a chat UI for synchronous interaction and extensive programmatic access through APIs, MCP and A2A servers. + +## Key capabilities + +- **Interactive chat interface**: Ask questions about your data using natural language in the Chat UI. +- **Agent-based architecture**: Configure AI assistants with customizable behaviors and tool access. +- **Modular and extensible tools**: Extend your system with tools for {{es}} data access and manipulation. +- **ES|QL integration**: Create and execute [ES|QL]([{{esql}}](elasticsearch://reference/query-languages/esql.md))-powered tools for specialized data queries. +- **MCP server**: Connect external MCP clients to access chat tools through a standardized interface. +- **A2A server**: Enable agent-to-agent communication following the A2A protocol specification. +- **Programmatic APIs**: Create, manage, and execute tools and agents through Kibana APIs. + +## Key concepts + +The {{agent-builder}} framework is built around several key components that work together to provide a flexible and powerful conversational experience. + +### Conversations + +The **Conversations** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. + +[**Learn more about conversations**](agent-builder/conversations.md) + +### Agents + +Agents are specialized assistants powered by large language models (LLMs) that use tools to answer questions, take action, or support workflows. Each agent translates natural language requests into specific actions using the tools assigned to it. + +[**Learn more about agents**](agent-builder/agents.md) + +### Tools [tools-concept] + +Tools are modular, reusable functions that agents use to search, retrieve, and manipulate {{es}} data. Tools are the primary mechanism for connecting agent capabilities to your data. + +[**Learn more about tools**](agent-builder/tools.md) + +## Programmatic interfaces + +{{agent-builder}} provides APIs and LLM integration options for programmatic access and automation. +These interfaces enable you to build integrations with other applications and extend {{agent-builder}}'s capabilities to fit your specific requirements. + +[**Learn more about programmatic access**](agent-builder/programmatic-access.md) + +## Get started + +To get started you need an Elastic deployment and you must enable the feature. + +[**Get started with {{agent-builder}}**](agent-builder/get-started.md) + diff --git a/solutions/toc.yml b/solutions/toc.yml index 9547c5c8a6..71846a92aa 100644 --- a/solutions/toc.yml +++ b/solutions/toc.yml @@ -45,6 +45,14 @@ toc: - file: search/semantic-search/semantic-search-elser-ingest-pipelines.md - file: search/semantic-search/cohere-es.md - file: search/using-openai-compatible-models.md + - file: search/elastic-agent-builder.md + children: + - file: search/agent-builder/get-started.md + - file: search/agent-builder/conversations.md + - file: search/agent-builder/agents.md + - file: search/agent-builder/tools.md + - file: search/agent-builder/programmatic-access.md + - file: search/agent-builder/limitations-known-issues.md - file: search/rag.md children: - file: search/rag/playground.md From e4085fe6bb2f491f6617cee34f55383256b60173 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Mon, 8 Sep 2025 17:52:30 +0200 Subject: [PATCH 02/15] rename because agents.md is gitignored --- .../agent-builder/agent-builder-agents.md | 35 +++++++++++++++++++ solutions/search/elastic-agent-builder.md | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 solutions/search/agent-builder/agent-builder-agents.md diff --git a/solutions/search/agent-builder/agent-builder-agents.md b/solutions/search/agent-builder/agent-builder-agents.md new file mode 100644 index 0000000000..a7161c8d9d --- /dev/null +++ b/solutions/search/agent-builder/agent-builder-agents.md @@ -0,0 +1,35 @@ +--- +navigation_title: "Agents" +applies_to: + stack: preview 9.2 + deployment: + self: unavailable + serverless: + elasticsearch: preview +--- + +# Agents + +Agents are AI assistants that engage in natural language conversations with users and interact with your {{es}} data through tools. Each agent manages the conversation flow, interprets user requests, and provides responses based on its configured tools, instructions, and behavior settings. + +## How agents work + +When you ask a question to an agent, it analyzes your request, selects the most appropriate tool, and determines the right arguments to use. After receiving results, the agent evaluates the information and decides whether to use additional tools or formulate a response. This iterative process of tool selection, execution, and analysis continues until the agent can provide a complete answer. + +{{agent-builder}} includes a default agent with access to all system tools. You can create specialized agents with custom instructions and selected tools to address specific use cases or workflows. + +## Create a new agent + +To create a new agent: + +1. Navigate to the Agents subpage under **Chat** +2. Click the **New agent** button in the top right corner +3. Configure the agent settings: + - Enter an **Agent ID** - unique identifier for reference in code + - Add **Custom instructions** (optional) to guide the agent's behavior + - Add **Labels** (optional) to organize your agents + - Set the **Display name** that users will see + - Add a **Display description** to explain the agent's purpose + - Choose an **Avatar color** and **Avatar symbol** (both optional) +4. Switch to the **Tools** tab to assign [tools](/docs/chat/tools.md) to the agent +5. Click the **Save** button to create your agent \ No newline at end of file diff --git a/solutions/search/elastic-agent-builder.md b/solutions/search/elastic-agent-builder.md index 5420a5ad65..afd1bec52a 100644 --- a/solutions/search/elastic-agent-builder.md +++ b/solutions/search/elastic-agent-builder.md @@ -35,7 +35,7 @@ The **Conversations** UI is the synchronous chat interface for interacting with Agents are specialized assistants powered by large language models (LLMs) that use tools to answer questions, take action, or support workflows. Each agent translates natural language requests into specific actions using the tools assigned to it. -[**Learn more about agents**](agent-builder/agents.md) +[**Learn more about agents**](agent-builder/agent-builder-agents.md) ### Tools [tools-concept] From a2581180b8481e3712399eeec2fed713c30116b1 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Mon, 8 Sep 2025 17:53:48 +0200 Subject: [PATCH 03/15] update toc --- solutions/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/toc.yml b/solutions/toc.yml index 71846a92aa..9f49e4ae61 100644 --- a/solutions/toc.yml +++ b/solutions/toc.yml @@ -49,7 +49,7 @@ toc: children: - file: search/agent-builder/get-started.md - file: search/agent-builder/conversations.md - - file: search/agent-builder/agents.md + - file: search/agent-builder/agent-builder-agents.md - file: search/agent-builder/tools.md - file: search/agent-builder/programmatic-access.md - file: search/agent-builder/limitations-known-issues.md From 641f8b1af18b50e01270f52c59d48437b49a5ad9 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Mon, 8 Sep 2025 17:59:47 +0200 Subject: [PATCH 04/15] fix typo, link --- solutions/search/agent-builder/agent-builder-agents.md | 2 +- solutions/search/elastic-agent-builder.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solutions/search/agent-builder/agent-builder-agents.md b/solutions/search/agent-builder/agent-builder-agents.md index a7161c8d9d..3603664ba4 100644 --- a/solutions/search/agent-builder/agent-builder-agents.md +++ b/solutions/search/agent-builder/agent-builder-agents.md @@ -31,5 +31,5 @@ To create a new agent: - Set the **Display name** that users will see - Add a **Display description** to explain the agent's purpose - Choose an **Avatar color** and **Avatar symbol** (both optional) -4. Switch to the **Tools** tab to assign [tools](/docs/chat/tools.md) to the agent +4. Switch to the **Tools** tab to assign [tools](tools.md) to the agent 5. Click the **Save** button to create your agent \ No newline at end of file diff --git a/solutions/search/elastic-agent-builder.md b/solutions/search/elastic-agent-builder.md index afd1bec52a..bcc0283ebd 100644 --- a/solutions/search/elastic-agent-builder.md +++ b/solutions/search/elastic-agent-builder.md @@ -16,7 +16,7 @@ applies_to: - **Interactive chat interface**: Ask questions about your data using natural language in the Chat UI. - **Agent-based architecture**: Configure AI assistants with customizable behaviors and tool access. - **Modular and extensible tools**: Extend your system with tools for {{es}} data access and manipulation. -- **ES|QL integration**: Create and execute [ES|QL]([{{esql}}](elasticsearch://reference/query-languages/esql.md))-powered tools for specialized data queries. +- **ES|QL integration**: Create and execute [ES|QL](elasticsearch://reference/query-languages/esql.md)-powered tools for specialized data queries. - **MCP server**: Connect external MCP clients to access chat tools through a standardized interface. - **A2A server**: Enable agent-to-agent communication following the A2A protocol specification. - **Programmatic APIs**: Create, manage, and execute tools and agents through Kibana APIs. From c1664013bf0797b10434d08e150e5755132ad82b Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:35:22 +0200 Subject: [PATCH 05/15] added step-by-step agent management guides with screenshots, split programmatic access into separate API/MCP/A2A pages **Major changes:** - Renamed "Conversations" to "Agent Chat" throughout - Expanded agent management section with detailed UI instructions and screenshots - Added comprehensive step-by-step agent creation guide with visual elements - Restructured getting started guide to be more user-friendly - Updated programmatic access to be overview-only, with separate dedicated pages for APIs, MCP, and A2A - Renamed system tools to "built-in tools" consistently - Updated API endpoints from `/api/chat/` to `/api/agent_builder/` - Enhanced tool configuration examples with better parameter descriptions - Added troubleshooting for SQL vs ES|QL syntax confusion - Removed self-deployment references (serverless/cloud only) - Updated model details (Claude Sonnet 3.7 via Elastic Inference Service) - Reorganized table of contents with new file structure for programmatic access **Key improvements:** - Better user onboarding flow - More detailed UI guidance with screenshots - Clearer separation between built-in and custom tools - Enhanced API documentation structure - More comprehensive limitations section --- solutions/search/agent-builder/a2a-server.md | 31 +++++ .../agent-builder/agent-builder-agents.md | 108 +++++++++++++++--- solutions/search/agent-builder/chat.md | 13 +++ solutions/search/agent-builder/get-started.md | 79 ++++++------- solutions/search/agent-builder/kibana-api.md | 96 ++++++++++++++++ .../agent-builder/limitations-known-issues.md | 29 +++-- solutions/search/agent-builder/mcp-server.md | 42 +++++++ .../agent-builder/programmatic-access.md | 93 +-------------- solutions/search/agent-builder/tools.md | 35 +++--- solutions/search/elastic-agent-builder.md | 13 +-- solutions/toc.yml | 6 +- 11 files changed, 356 insertions(+), 189 deletions(-) create mode 100644 solutions/search/agent-builder/a2a-server.md create mode 100644 solutions/search/agent-builder/chat.md create mode 100644 solutions/search/agent-builder/kibana-api.md create mode 100644 solutions/search/agent-builder/mcp-server.md diff --git a/solutions/search/agent-builder/a2a-server.md b/solutions/search/agent-builder/a2a-server.md new file mode 100644 index 0000000000..99514104c9 --- /dev/null +++ b/solutions/search/agent-builder/a2a-server.md @@ -0,0 +1,31 @@ +--- +navigation_title: "A2A server" +applies_to: + stack: preview 9.2 + serverless: + elasticsearch: preview +--- + +# Agent-to-Agent (A2A) server + +The [**Agent-to-Agent (A2A) server**](https://github.com/a2aproject/A2A) enables external A2A clients to communicate with {{agent-builder}} agents. + +## Agent cards endpoint + +Returns metadata for a specific agent. The `agentId` is a path parameter that corresponds to your agent IDs: + +``` +GET /api/agent_builder/a2a/{agentId}.json +``` + +## A2A protocol endpoint + +Interact with agents following the A2A protocol specification: + +``` +POST /api/agent_builder/a2a/{agentId} +``` + +:::{important} +Both A2A endpoints require API key authentication. For more information about the A2A protocol, see the [A2A protocol specification](https://a2aprotocol.ai/docs/guide/a2a-protocol-specification-python#protocol-flow-diagram). +::: diff --git a/solutions/search/agent-builder/agent-builder-agents.md b/solutions/search/agent-builder/agent-builder-agents.md index 3603664ba4..2edcff858f 100644 --- a/solutions/search/agent-builder/agent-builder-agents.md +++ b/solutions/search/agent-builder/agent-builder-agents.md @@ -2,34 +2,106 @@ navigation_title: "Agents" applies_to: stack: preview 9.2 - deployment: - self: unavailable serverless: elasticsearch: preview --- -# Agents +# {{agent-builder}}: Agents -Agents are AI assistants that engage in natural language conversations with users and interact with your {{es}} data through tools. Each agent manages the conversation flow, interprets user requests, and provides responses based on its configured tools, instructions, and behavior settings. +Agents engage in natural language conversations with users and interact with your {{es}} data through tools. +Fundamentally, an agent is defined by its custom instructions and the set of tools it's assigned. + +Each agent manages the conversation flow, interprets user requests, and provides responses based on its configured tools, instructions, and behavior settings. ## How agents work When you ask a question to an agent, it analyzes your request, selects the most appropriate tool, and determines the right arguments to use. After receiving results, the agent evaluates the information and decides whether to use additional tools or formulate a response. This iterative process of tool selection, execution, and analysis continues until the agent can provide a complete answer. -{{agent-builder}} includes a default agent with access to all system tools. You can create specialized agents with custom instructions and selected tools to address specific use cases or workflows. +{{agent-builder}} includes a default agent (named `Elastic AI Agent`) with access to all built-in tools. You can create specialized agents with custom instructions and selected tools to address specific use cases or workflows. + +## Manage your agents + +The **Agents** page provides a centralized view of all your agents. From this page you can: + +- View all your agents with their names and labels +- Search for specific agents using the search bar +- Filter agents by labels using the **Labels** dropdown +- Create new agents using the **+ New agent** button +- Start chatting with an agent or perform other actions + - **Elastic AI Agent**: you can **chat** or **clone** the default agent using the chat or clone buttons. + :::{image} images/chat-and-clone-buttons.png + :alt: Chat with agent and clone agent buttons + :width: 120px + ::: + - **Custom agents**: You can **chat**, **edit**, **clone**, or **delete** an agent from the management overview. + :::{image} images/chat-edit-clone-delete.png + :alt: Agent context menu showing Chat, Edit, Clone, and Delete options + :width: 130px + ::: + +## How to create a new agent + +Follow these steps to create a new agent: + +:::::{stepper} +::::{step} Navigate to the Agents page + +Navigate to the **Agents** page to access the agent management interface. + +:::: + +::::{step} Create a new agent + +Click the **New agent** button to start creating a new agent. + +:::{image} images/new-agent-button.png +:alt: Click the New agent button to create a new agent +:width: 150px +::: + + +:::: + +::::{step} Configure essential settings + +Configure the essential agent settings in the **settings** tab: + +1. Enter an **Agent ID**, a unique identifier for reference in code. +1. Add **Custom instructions**.

Custom instructions are appended to the system prompt that enables core agent features like visualization and citations. The custom instructions define the agent's personality and determine how it will interact with users and perform tasks. + :::{note} + Your custom instructions are added to the system prompt to define the agent's behavior. The system prompt enables core features like visualization and citations. + ::: + +1. Set the **Display name** that users will see. +1. Add a **Display description** to explain the agent's purpose + +:::: + +::::{step} Assign tools + +Switch to the **Tools** tab to assign [tools](tools.md) to your agent. + +Select the combination of built-in and custom tools available to the agent, based on your use case. + +:::: + +::::{step} Customize appearance (optional) + +Optionally customize the agent's appearance and organization: + +- Add **Labels** to organize your agents +- Choose an **Avatar color** and **Avatar symbol** to help visually distinguish the agent + +:::: + +::::{step} Save your changes -## Create a new agent +Click **Save** to create your agent, or **Save and chat** to create the agent and immediately start a conversation with it. -To create a new agent: +:::{image} images/save-and-chat-buttons.png +:alt: Save and Save and chat buttons +:width: 270px +::: -1. Navigate to the Agents subpage under **Chat** -2. Click the **New agent** button in the top right corner -3. Configure the agent settings: - - Enter an **Agent ID** - unique identifier for reference in code - - Add **Custom instructions** (optional) to guide the agent's behavior - - Add **Labels** (optional) to organize your agents - - Set the **Display name** that users will see - - Add a **Display description** to explain the agent's purpose - - Choose an **Avatar color** and **Avatar symbol** (both optional) -4. Switch to the **Tools** tab to assign [tools](tools.md) to the agent -5. Click the **Save** button to create your agent \ No newline at end of file +:::: +::::: \ No newline at end of file diff --git a/solutions/search/agent-builder/chat.md b/solutions/search/agent-builder/chat.md new file mode 100644 index 0000000000..55ee8bec17 --- /dev/null +++ b/solutions/search/agent-builder/chat.md @@ -0,0 +1,13 @@ +--- +navigation_title: "Agent Chat UI" +applies_to: + stack: preview 9.2 + serverless: + elasticsearch: preview +--- + +# {{agent-builder}}: Agent Chat UI + + +The **Agent Chat** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. + diff --git a/solutions/search/agent-builder/get-started.md b/solutions/search/agent-builder/get-started.md index 131433d23d..c8d6068944 100644 --- a/solutions/search/agent-builder/get-started.md +++ b/solutions/search/agent-builder/get-started.md @@ -1,84 +1,71 @@ --- +navigation_title: "Get started" applies_to: stack: preview 9.2 - deployment: - self: unavailable serverless: elasticsearch: preview --- -# Get started +# Get started with {{agent-builder}} Learn how get started by enabling the {{agent-builder}} features and begin chatting with your data. -{{agent-builder}} is disabled by default. Follow these steps to enable the features and start using Chat. - :::::{stepper} -::::{step} Choose your deployment type +::::{step} Set up an Elastic deployment -- **Option 1:** [{{es}} {{serverless-short}}](/solutions/search/serverless-elasticsearch-get-started.md) -- **Option 2:** [{{ech}}](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md) +If you don't already have an Elastic deployment, refer to [Choose your deployment type](/solutions/search/get-started.md#choose-your-deployment-type). -:::{tip} -Not sure which deployment type to choose? Learn more in [Compare {{ech}} and {{serverless-short}}](/deploy-manage/deploy/elastic-cloud/differences-from-other-elasticsearch-offerings.md). +:::{note} +For {{ech}} deployments, make sure you are using the solution navigation instead of classic navigation. +You can set up a new [space](/deploy-manage/manage-spaces.md) to use the solution nav. ::: :::: -::::{step} Enable features +::::{step} Enable {{agent-builder}} -Choose your preferred method to enable the {{agent-builder}} features. +{{agent-builder}} is disabled by default in the initial release, so you'll need to enable the feature to get started. -::::{tab-set} +You can enable the features using the UI: -:::{tab-item} API -:sync: api +1. Navigate to **Stack Management > Settings** +2. Find **AI > Agent Builder** in the left-hand navigation +3. Toggle **{{agent-builder}}** to on +4. Click **Save changes** -Run the following command in the Dev Tools [Console](/explore-analyze/query-filter/tools/console.md): +Refresh the browser page and find **Agents** in the navigation menu to start using the feature. +You can also search for **Agent Builder** in the [global search bar](/explore-analyze/find-and-organize/find-apps-and-objects.md). -```console -POST kbn://internal/kibana/settings -{ - "changes": { - "agentBuilder:enabled": true - } -} -``` -::: +:::: -:::{tab-item} {{ech}} UI -:sync: stack -```{applies_to} -serverless: unavailable -``` +::::{step} Ingest some data -On {{ech}} deployments, you can also enable the features in **Advanced Settings**: +Before you get started with agents, you need some data in your {{es}} cluster. Otherwise, you'll just be chatting to the underlying LLM without any retrieval-augmented context. -1. Access your Kibana settings through **Stack Management > Advanced Settings**. -2. Enable the `agentBuilder` settings: -```json -uiSettings.overrides: - agentBuilder:enabled: true -``` +To learn about adding data for search use cases, go to [](/solutions/search/ingest-for-search.md). +For a broader overview of ingestion options, go to [](/manage-data/ingest.md). +:::{tip} +If you're not ready to add your own data, you can use the Elastic [sample data](/manage-data/ingest/sample-data.md) or create small data sets when you follow the instructions in the [quickstarts](/solutions/search/get-started/quickstarts.md). +% TODO: we can link to a an agent builder tutorial if we add one in the docs ::: :::: -:::: - ::::{step} Start chatting -Refresh the browser page and find **Chat/Conversations** in the navigation menu to start using the feature. -You can also search for **Chat** in the [global search bar](/explore-analyze/find-and-organize/find-apps-and-objects.md). +The **Agent Chat** UI provides a conversational interface where you can interact with agents and explore your data using natural language. {{agent-builder}} includes a default agent named `Elastic AI Agent` with access to all built-in tools, so you can start chatting immediately. -The Chat UI provides a conversational interface where you can interact with agents and explore your data using natural language. Learn more in [Conversations](conversations.md). +Learn more in [Agent Chat](chat.md). -:::{note} -For {{ech}} deployments, make sure you are using the solution navigation instead of classic navigation. -You can set up a new [space](/deploy-manage/manage-spaces.md) to use the solution nav. -::: :::: + +::::{step} Start building agents and tools + +Once you've tested the built-in **Elastic AI Agent** with the [built-in tools](tools.md#built-in-tools), you'll want to start [building your own agents](agent-builder-agents.md#create-a-new-agent) with custom instructions and creating your own [tools](tools.md) to assign them. + +:::: + ::::: diff --git a/solutions/search/agent-builder/kibana-api.md b/solutions/search/agent-builder/kibana-api.md new file mode 100644 index 0000000000..898a9b19b3 --- /dev/null +++ b/solutions/search/agent-builder/kibana-api.md @@ -0,0 +1,96 @@ +--- +navigation_title: "Kibana APIs" +applies_to: + stack: preview 9.2 + serverless: + elasticsearch: preview +--- + +# Work with {{agent-builder}} using the APIs + +These APIs allow you to programmatically work with the {{agent-builder}} abstractions. + +## API reference + +For the full API documentation, refer to the [Kibana API reference](https://www.elastic.co/docs/api/doc/kibana/). + +For information on generating API keys, see [API keys](https://www.elastic.co/docs/solutions/search/search-connection-details). + +## Available APIs +% TODO: we may remove this list once the API reference is live, but probably helpful in the short term + +### Tools + +List all tools +: `GET kbn://api/agent_builder/tools` + +Create a tool +: `POST kbn://api/agent_builder/tools` + +Get a tool by ID +: `GET kbn://api/agent_builder/tools/{id}` + +Delete a tool by ID +: `DELETE kbn://api/agent_builder/tools/{id}` + +Update a tool by ID +: `PUT kbn://api/agent_builder/tools/{toolId}` + +Execute a tool +: `POST kbn://api/agent_builder/tools/_execute` + +### Agents + +List all agents +: `GET kbn://api/agent_builder/agents` + +Create an agent +: `POST kbn://api/agent_builder/agents` + +Get an agent by ID +: `GET kbn://api/agent_builder/agents/{id}` + +Update an agent by ID +: `PUT kbn://api/agent_builder/agents/{id}` + +Delete an agent by ID +: `DELETE kbn://api/agent_builder/agents/{id}` + +### Chat and Conversations + +Chat with an agent +: `POST kbn://api/agent_builder/converse` + +Chat with an agent and stream events +: `POST kbn://api/agent_builder/converse/async` + +List conversations +: `GET kbn://api/agent_builder/conversations` + +Get conversation by ID +: `GET kbn://api/agent_builder/conversations/{conversation_id}` + +Delete conversation by ID +: `DELETE kbn://api/agent_builder/conversations/{conversation_id}` + +### MCP Server + +Get MCP server configuration +: `GET kbn://api/agent_builder/mcp` + +Create or configure MCP server +: `POST kbn://api/agent_builder/mcp` + +Delete MCP server configuration +: `DELETE kbn://api/agent_builder/mcp` + +### A2A Protocol + +Refer to [](a2a-server.md) for more information. + +Get A2A agent card configuration +: `GET kbn://api/agent_builder/a2a/{agentId}.json` + +Execute A2A agent task +: `POST kbn://api/agent_builder/a2a/{agentId}` + diff --git a/solutions/search/agent-builder/limitations-known-issues.md b/solutions/search/agent-builder/limitations-known-issues.md index b02d233759..100d6950ec 100644 --- a/solutions/search/agent-builder/limitations-known-issues.md +++ b/solutions/search/agent-builder/limitations-known-issues.md @@ -2,25 +2,36 @@ navigation_title: "Limitations & known issues" applies_to: stack: preview 9.2 - deployment: - self: unavailable serverless: elasticsearch: preview --- # Limitations and known issues in {{agent-builder}} -## Model Selection +## Model selection -Today we only use the `rainbow-sprinkles` model running on the Elastic Inference Service which is Claude 3.7, on Cloud / Serverless. Locally this picks the first AI connector available. Currently we do not have UI controls to select which connector (and therefore which model) to use. +Initally, {{agent-builder}} only supports working with the [Elastic Managed LLM](kibana://reference/connectors-kibana/elastic-managed-llm.md) running on the Elastic Inference Service which uses Claude Sonnet 3.7, on {{ech}} and {{serverless-full}}. +Locally this picks the first AI connector available. -{{agent-builder}} has some limitations to be aware of: +Initally, there are no UI controls to select which connector (and therefore which model) to use. -Known Bugs -Unable to follow up with a question in a conversation (resolved in latest 9.2-snapshot, affects serverless) -Unable to use MCP server (resolved in latest 9.2-snapshot, affects serverless) +## Known issues +- **Default agent misinterprets SQL syntax as ES|QL** + - The `.execute_esql` tool is designed only for [{{esql}}](elasticsearch://reference/query-languages/esql.md) syntax, not other query languages + - When using SQL syntax with the default agent, it attempts to use the `.execute_esql` tool instead of recognizing the input as SQL + - This results in parsing errors like this: + ```console-response + [ + { + "type": "error", + "data": { + "message": "parsing_exception\n\tCaused by:\n\t\tinput_mismatch_exception: null\n\tRoot causes:\n\t\tparsing_exception: line 1:15: mismatched input 'WHERE' expecting {, '|', ',', 'metadata'}", + "stack": "ResponseError: parsing_exception\n\tCaused by:\n\t\tinput_mismatch_exception: null\n\tRoot causes:\n\t\tparsing_exception: line 1:15: mismatched input 'WHERE' expecting {, '|', ',', 'metadata'}\n at KibanaTransport._request (Desktop/Dev/kibana/node_modules/@elastic/elasticsearch/node_modules/@elastic/transport/src/Transport.ts:591:17)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at Desktop/Dev/kibana/node_modules/@elastic/elasticsearch/node_modules/@elastic/transport/src/Transport.ts:697:22\n at KibanaTransport.request (Desktop/Dev/kibana/node_modules/@elastic/elasticsearch/node_modules/@elastic/transport/src/Transport.ts:694:14)" + } + } + ] + ``` -We're continuously working to improve these areas and welcome your feedback to help shape the future development of {{agent-builder}}. \ No newline at end of file diff --git a/solutions/search/agent-builder/mcp-server.md b/solutions/search/agent-builder/mcp-server.md new file mode 100644 index 0000000000..8d355ed174 --- /dev/null +++ b/solutions/search/agent-builder/mcp-server.md @@ -0,0 +1,42 @@ +--- +navigation_title: "MCP server" +applies_to: + stack: preview 9.2 + serverless: + elasticsearch: preview +--- + +# MCP server + +The [**Model Context Protocol (MCP) server**](https://modelcontextprotocol.io/docs/getting-started/intro) provides a standardized interface for external clients to access {{agent-builder}} tools. + +## MCP server endpoint + +The MCP server is available at: + +``` +{KIBANA_URL}/api/agent_builder/mcp +``` + +## Configuring MCP clients + +Most MCP clients (such as Claude Desktop, Cursor, VS Code, etc.) have similar configuration patterns. To connect to your Elastic instance, you'll need to provide your Kibana URL and API key in the client's configuration file, typically in the following format: + +```json +{ + "mcpServers": { + "elastic-agent-builder": { + "command": "npx", + "args": ["@elastic/agent-builder-mcp"], + "env": { + "KIBANA_URL": "", + "API_KEY": "" + } + } + } +} +``` + +:::{note} +Replace `` with your actual Kibana URL and `` with your API key. For information on generating API keys, see [API keys](https://www.elastic.co/docs/solutions/search/search-connection-details). +::: diff --git a/solutions/search/agent-builder/programmatic-access.md b/solutions/search/agent-builder/programmatic-access.md index beb6b1cc61..559f3061a7 100644 --- a/solutions/search/agent-builder/programmatic-access.md +++ b/solutions/search/agent-builder/programmatic-access.md @@ -2,8 +2,6 @@ navigation_title: "Programmatic access" applies_to: stack: preview 9.2 - deployment: - self: unavailable serverless: elasticsearch: preview --- @@ -12,92 +10,9 @@ applies_to: {{agent-builder}} provides comprehensive APIs and additional integration options for programmatic access and automation. -- **APIs**: RESTful APIs for creating, managing, and executing tools programmatically -- **MCP server**: A standardized interface at `/api/chat/mcp` that allows external MCP clients (such as Claude Desktop) to access {{agent-builder}} tools -- **A2A server**: Agent-to-agent communication endpoints that follow the A2A protocol specification, enabling external A2A clients to interact with {{agent-builder}} agents +These interfaces enable you to build integrations with other applications and extend Agent Builder's capabilities to fit your specific requirements. -These interfaces enable you to build integrations with other applications and extend {{agent-builder}}'s capabilities to fit your specific requirements. +- **[Kibana API](kibana-api.md)**: RESTful APIs for working with {{agent-builder}} programmatically +- **[MCP server](mcp-server.md)**: A standardized interface that allows external MCP clients (such as Claude Desktop or Cursor) to access {{agent-builder}} tools +- **[A2A server](a2a-server.md)**: Agent-to-agent communication endpoints that follow the A2A protocol specification, enabling external A2A clients to interact with {{agent-builder}} agents -## Working with the API - -The Chat API allows you to programmatically create and manage tools. You can use this API to: -- Create new tools -- Update existing tool configurations -- Delete tools when they're no longer needed -- List available tools - -Here's an example API call to create a new custom {{esql}} tool: - -```console -POST kbn://api/chat/tools -{ - "id": "recent_orders", - "description": "Find recent orders for a customer", - "configuration": { - "query": "FROM orders | WHERE customer_id == ?customer_id | SORT @timestamp DESC | LIMIT 5", - "params": { - "customer_id": { - "type": "keyword", - "description": "Customer identifier" - } - } - }, - "type": "esql", - "tags": ["orders", "customers"] -} -``` - -## MCP server - -The [**Model Context Protocol (MCP) server**](https://modelcontextprotocol.io/docs/getting-started/intro) server provides a standardized interface for external clients to access {{agent-builder}} tools. - -### MCP server endpoint - -The MCP server is available at: - -``` -/api/chat/mcp -``` - -### Configuring Claude Desktop for MCP integration - -To use Claude Desktop with your Elastic instance: - -```json -{ - "mcpServers": { - "elastic": { - "command": "npx", - "args": [ - "mcp-remote", - "http://your-kibana-url/api/chat/mcp", - "--header", - "Authorization:${AUTH_HEADER}" - ], - "env": { - "AUTH_HEADER": "ApiKey your-api-key-here" - } - } - } -} -``` - -## Agent-to-Agent (A2A) server - -The [**Agent-to-Agent (A2A)server**](https://github.com/a2aproject/A2A) enables external A2A clients to communicate with {{agent-builder}} agents. - -### Agentcards endpoint - -Get metadata about available agents: - -``` -GET /api/chat/a2a/{agentId}.json -``` - -### A2A protocol endpoint - -Interact with agents following the A2A protocol specification: - -``` -POST /api/chat/a2a/{agentId} -``` \ No newline at end of file diff --git a/solutions/search/agent-builder/tools.md b/solutions/search/agent-builder/tools.md index 78560f9ece..1ae2f33256 100644 --- a/solutions/search/agent-builder/tools.md +++ b/solutions/search/agent-builder/tools.md @@ -2,8 +2,6 @@ navigation_title: "Tools" applies_to: stack: preview 9.2 - deployment: - self: unavailable serverless: elasticsearch: preview --- @@ -33,10 +31,10 @@ There are two main types of tools in {{agent-builder}}: - **{{esql}} tools**: Execute [{{esql}}](elasticsearch://reference/query-languages/esql.md) queries against your indices, allowing agents to retrieve and analyze data using the Elasticsearch query language. - **Index tools**: Provide core capabilities for working with indices, enabling you to search indices, retrieve documents by ID, view index mappings, discover relevant indices, and list available indices. -{{agent-builder}} ships with a set of built-in system tools whose names are dot-prefixed. For example: `.execute_esql`. +{{agent-builder}} ships with a set of built-in built-in tools whose names are dot-prefixed. For example: `.execute_esql`. Users can also create [custom tools](#create-custom-tools). -Key system tools include: +Key built-in tools include: - **`.execute_esql`**: Executes an {{esql}} query and returns the results in a tabular format - **`.generate_esql`**: Generates an {{esql}} query from a natural language query @@ -46,16 +44,16 @@ Key system tools include: - **`.list_indices`**: Lists the indices in the {{es}} cluster the current user has access to - **`.search`**: A powerful tool for searching and analyzing data within a specific {{es}} index -System tools cannot be modified or deleted, but serve as building blocks for more complex interactions. +Built-in tools cannot be modified or deleted, but serve as building blocks for more complex interactions. ### Find available tools Find the list of available tools on the **Tools** landing page in the UI. -You can also use the following API call, which returns detailed information about system tools, including their parameters and descriptions. +You can also use the following API call, which returns detailed information about built-in tools, including their parameters and descriptions. ``` -GET kbn://api/chat/tools +GET kbn://api/agent_builder/tools ``` ## Tool parameters @@ -84,7 +82,7 @@ You can create custom tools to help agents interact with your data in specific w 2. Click the blue **New tool** button 3. Select the tool type you want to create 4. Fill in the required fields: - - **Name**: Enter a descriptive name for your tool (without a dot prefix) + - **Name**: Enter a descriptive name for your tool - **Description**: Write a clear explanation of what the tool does and when it should be used - Tool-specific configuration ({{esql}} query or index settings) - **Parameters**: For {{esql}} tools, define any parameters your query needs @@ -98,7 +96,7 @@ You can also create tools programmatically: For {{esql}} tools: ```json -POST kbn://api/chat/tools +POST kbn://api/agent_builder/tools { "id": "recent_orders", <1> "description": "Find recent orders for a specific customer. Use this tool when users ask about their recent orders or purchase history.", <2> @@ -126,12 +124,12 @@ POST kbn://api/chat/tools For index search tools: ```json -POST kbn://api/chat/tools +POST kbn://api/agent_builder/tools { "id": "search_products", <1> "description": "Search the products catalog for specific items. Use this when users are looking for product information.", <2> "configuration": { - "index": "products", <3> + "pattern": "products", <3> "fields": ["name", "description", "category", "tags"] <4> }, "type": "index_search", <5> @@ -141,10 +139,12 @@ POST kbn://api/chat/tools 1. Unique identifier for the tool 2. Description explaining when and how to use this tool -3. The specific index this tool will search against +3. The specific index pattern this tool will search against 4. Fields within the index that should be searchable -5. Tool type specifier (use "index_search" for index search tools) +5. Tool type specifier (use `index_search` for index search tools) 6. Optional tags for organization +7. **Use appropriate tags**: Add relevant tags to make tools easier to find and organize +8. **Limit tool count**: More tools are not always better. Try to keep each agent focused with a limited number of relevant tools. ### Testing your tools @@ -167,19 +167,16 @@ Testing helps ensure your tool returns useful results and handles parameters cor 5. **Add comprehensive parameter descriptions**: Help the agent understand what values to use 6. **Include `LIMIT` clauses in {{esql}} queries**: Prevent returning excessive results 7. **Use appropriate tags**: Add relevant tags to make tools easier to find and organize +8. **Limit tool count**: More tools are not always better. Try to keep each agent focused with a limited number of relevant tools. ## Tool namespaces -Tool namespacing helps organize and identify tools by their source. System tools use a dot prefix (`.tool_name`) to indicate they are built-in capabilities. This convention: +Tool namespacing helps organize and identify tools by their source. Built-in tools use a consistent prefix (`platform.core`) to indicate they are built-in capabilities. This convention: - Prevents naming conflicts between system and custom tools - Makes it easy to identify tool sources - Provides a consistent pattern for tool identification -:::{note} -Custom tool IDs cannot be dot-prefixed, because the ID must start and end with a letter or number. -::: - ## Manage tools ### List available tools @@ -205,4 +202,4 @@ Custom tools can be modified or removed as needed: 2. Click the edit icon to update the tool or the delete icon to remove it 3. For updates, modify the tool properties and save your changes -Note that system tools cannot be modified or deleted. \ No newline at end of file +Note that built-in tools cannot be modified or deleted. \ No newline at end of file diff --git a/solutions/search/elastic-agent-builder.md b/solutions/search/elastic-agent-builder.md index bcc0283ebd..4540e4d087 100644 --- a/solutions/search/elastic-agent-builder.md +++ b/solutions/search/elastic-agent-builder.md @@ -1,8 +1,7 @@ --- +navigation_title: "Agent Builder" applies_to: stack: preview 9.2 - deployment: - self: unavailable serverless: elasticsearch: preview --- @@ -13,8 +12,8 @@ applies_to: ## Key capabilities -- **Interactive chat interface**: Ask questions about your data using natural language in the Chat UI. -- **Agent-based architecture**: Configure AI assistants with customizable behaviors and tool access. +- **Interactive chat interface**: Ask questions about your {{es}} data using natural language in the Agent Chat UI. +- **Agent-based architecture**: Configure AI-powered agents with customizable behaviors and tool access. - **Modular and extensible tools**: Extend your system with tools for {{es}} data access and manipulation. - **ES|QL integration**: Create and execute [ES|QL](elasticsearch://reference/query-languages/esql.md)-powered tools for specialized data queries. - **MCP server**: Connect external MCP clients to access chat tools through a standardized interface. @@ -25,15 +24,15 @@ applies_to: The {{agent-builder}} framework is built around several key components that work together to provide a flexible and powerful conversational experience. -### Conversations +### Agent Chat UI -The **Conversations** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. +The **Agent Chat** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. [**Learn more about conversations**](agent-builder/conversations.md) ### Agents -Agents are specialized assistants powered by large language models (LLMs) that use tools to answer questions, take action, or support workflows. Each agent translates natural language requests into specific actions using the tools assigned to it. +Agents are powered by custom LLM instructions and the ability to use tools to answer questions, take action, or support workflows. Each agent translates natural language requests into specific actions using the tools assigned to it. [**Learn more about agents**](agent-builder/agent-builder-agents.md) diff --git a/solutions/toc.yml b/solutions/toc.yml index 9f49e4ae61..f044ca6e95 100644 --- a/solutions/toc.yml +++ b/solutions/toc.yml @@ -48,10 +48,14 @@ toc: - file: search/elastic-agent-builder.md children: - file: search/agent-builder/get-started.md - - file: search/agent-builder/conversations.md + - file: search/agent-builder/chat.md - file: search/agent-builder/agent-builder-agents.md - file: search/agent-builder/tools.md - file: search/agent-builder/programmatic-access.md + children: + - file: search/agent-builder/kibana-api.md + - file: search/agent-builder/mcp-server.md + - file: search/agent-builder/a2a-server.md - file: search/agent-builder/limitations-known-issues.md - file: search/rag.md children: From f72a6a92bec4d6dd2df8c8fbb83b5957ba2c907a Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:37:45 +0200 Subject: [PATCH 06/15] rename file --- solutions/search/agent-builder/conversations.md | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 solutions/search/agent-builder/conversations.md diff --git a/solutions/search/agent-builder/conversations.md b/solutions/search/agent-builder/conversations.md deleted file mode 100644 index 2d5386d4c5..0000000000 --- a/solutions/search/agent-builder/conversations.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -navigation_title: "Conversations" -applies_to: - stack: preview 9.2 - deployment: - self: unavailable - serverless: - elasticsearch: preview ---- - -# Conversations UI in {{agent-builder}} - - -The **Conversations** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. - From 1d6e2a550797b3dfa9bbbebc61dd47709c5b5eb3 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:41:41 +0200 Subject: [PATCH 07/15] fix links --- solutions/search/agent-builder/get-started.md | 2 +- solutions/search/elastic-agent-builder.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solutions/search/agent-builder/get-started.md b/solutions/search/agent-builder/get-started.md index c8d6068944..be12083b27 100644 --- a/solutions/search/agent-builder/get-started.md +++ b/solutions/search/agent-builder/get-started.md @@ -64,7 +64,7 @@ Learn more in [Agent Chat](chat.md). ::::{step} Start building agents and tools -Once you've tested the built-in **Elastic AI Agent** with the [built-in tools](tools.md#built-in-tools), you'll want to start [building your own agents](agent-builder-agents.md#create-a-new-agent) with custom instructions and creating your own [tools](tools.md) to assign them. +Once you've tested the built-in **Elastic AI Agent** with the [default Elastic tools](tools.md, you'll want to start [building your own agents](agent-builder-agents.md#create-a-new-agent) with custom instructions and creating your own [tools](tools.md#create-custom-tools) to assign them. :::: diff --git a/solutions/search/elastic-agent-builder.md b/solutions/search/elastic-agent-builder.md index 4540e4d087..b30846cf4b 100644 --- a/solutions/search/elastic-agent-builder.md +++ b/solutions/search/elastic-agent-builder.md @@ -28,7 +28,7 @@ The {{agent-builder}} framework is built around several key components that work The **Agent Chat** UI is the synchronous chat interface for interacting with agents through natural language. The chat UI enables real-time communication where you can ask questions, request data analysis, and receive immediate responses from your configured agents. -[**Learn more about conversations**](agent-builder/conversations.md) +[**Learn more about Agent Chat**](agent-builder/chat.md) ### Agents From 2cbf75278c1b9b32742cf14fc0255c55162da8ef Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:41:59 +0200 Subject: [PATCH 08/15] add images --- .../images/chat-and-clone-buttons.png | Bin 0 -> 5829 bytes .../images/chat-edit-clone-delete.png | Bin 0 -> 20370 bytes .../agent-builder/images/new-agent-button.png | Bin 0 -> 9552 bytes .../images/save-and-chat-buttons.png | Bin 0 -> 14081 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 solutions/search/agent-builder/images/chat-and-clone-buttons.png create mode 100644 solutions/search/agent-builder/images/chat-edit-clone-delete.png create mode 100644 solutions/search/agent-builder/images/new-agent-button.png create mode 100644 solutions/search/agent-builder/images/save-and-chat-buttons.png diff --git a/solutions/search/agent-builder/images/chat-and-clone-buttons.png b/solutions/search/agent-builder/images/chat-and-clone-buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..0f1f1c6880f964e9f4252e4a18fd0a75a5049183 GIT binary patch literal 5829 zcmcgvby(Ef(_czjkd_WAKdx4dfmQX}dIz*(TS5iVkx}{6HJ7opl z_1^p5d!P6H`}aG~GiT<^%xC7DIp2An?|H7Ptx8HnPXqt}NY&Mp^)VcUA$@{dnE7hx zx�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 literal 0 HcmV?d00001 diff --git a/solutions/search/agent-builder/images/new-agent-button.png b/solutions/search/agent-builder/images/new-agent-button.png new file mode 100644 index 0000000000000000000000000000000000000000..75c30fec3fc938f3f6f7f4fc2df4747aea0dbb8f GIT binary patch literal 9552 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 Td-0&JhyjYSsxp;QCc*y;m|>S= literal 0 HcmV?d00001 diff --git a/solutions/search/agent-builder/images/save-and-chat-buttons.png b/solutions/search/agent-builder/images/save-and-chat-buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..574812f2e37e6fd2940f11062c8bc7ab0f43908e GIT binary patch literal 14081 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 W=?!n9kbl4H1CbP!6R8l=^ZP%4bpe Date: Wed, 17 Sep 2025 18:43:17 +0200 Subject: [PATCH 09/15] fix note syntax --- solutions/search/agent-builder/agent-builder-agents.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/search/agent-builder/agent-builder-agents.md b/solutions/search/agent-builder/agent-builder-agents.md index 2edcff858f..3e58f52431 100644 --- a/solutions/search/agent-builder/agent-builder-agents.md +++ b/solutions/search/agent-builder/agent-builder-agents.md @@ -68,10 +68,10 @@ Configure the essential agent settings in the **settings** tab: 1. Enter an **Agent ID**, a unique identifier for reference in code. 1. Add **Custom instructions**.

Custom instructions are appended to the system prompt that enables core agent features like visualization and citations. The custom instructions define the agent's personality and determine how it will interact with users and perform tasks. + :::{note} Your custom instructions are added to the system prompt to define the agent's behavior. The system prompt enables core features like visualization and citations. ::: - 1. Set the **Display name** that users will see. 1. Add a **Display description** to explain the agent's purpose From 5c786bf62ea0f16ff05933e1e34f2fe2b954c333 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:48:37 +0200 Subject: [PATCH 10/15] Clarify tools terminology --- solutions/search/agent-builder/tools.md | 37 +++++++++++++------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/solutions/search/agent-builder/tools.md b/solutions/search/agent-builder/tools.md index 1ae2f33256..09f1a03db9 100644 --- a/solutions/search/agent-builder/tools.md +++ b/solutions/search/agent-builder/tools.md @@ -24,15 +24,9 @@ Tools enable agents to work with {{es}} data. When an agent receives a natural l Each tool is an atomic operation with a defined signature - accepting typed parameters and returning structured results in a format the agent can parse, transform, and incorporate into its response generation. -## Tool types +## Built-in tools -There are two main types of tools in {{agent-builder}}: - -- **{{esql}} tools**: Execute [{{esql}}](elasticsearch://reference/query-languages/esql.md) queries against your indices, allowing agents to retrieve and analyze data using the Elasticsearch query language. -- **Index tools**: Provide core capabilities for working with indices, enabling you to search indices, retrieve documents by ID, view index mappings, discover relevant indices, and list available indices. - -{{agent-builder}} ships with a set of built-in built-in tools whose names are dot-prefixed. For example: `.execute_esql`. -Users can also create [custom tools](#create-custom-tools). +{{agent-builder}} ships with a comprehensive set of built-in tools that provide core capabilities for working with your {{es}} data. These tools are ready to use. They cannot be modified or deleted. Key built-in tools include: @@ -44,7 +38,16 @@ Key built-in tools include: - **`.list_indices`**: Lists the indices in the {{es}} cluster the current user has access to - **`.search`**: A powerful tool for searching and analyzing data within a specific {{es}} index -Built-in tools cannot be modified or deleted, but serve as building blocks for more complex interactions. +Built-in tools serve as building blocks for more complex interactions and provide the foundation for agent capabilities. + +## Custom tools + +You can extend the built-in tool catalog with your own custom tool definitions. Custom tools offer flexibility in how they interact with your data: + +- **Scoped tools**: Define tools that are scoped to a specific index or pattern, allowing the LLM to decide how to query those indices based on the user's request +- **Explicit query tools**: Define tools with explicit {{esql}} queries for precise, pre-defined data retrieval operations + +This flexibility allows you to create tools that match your specific use cases and data access patterns. ### Find available tools @@ -64,11 +67,11 @@ Parameters enable tools to be dynamic and adaptable to different queries. Each p - A **type** (such as keyword, number, boolean) - A **description** that helps the agent understand when and how to use it -For {{esql}} tools, parameters are defined in the query using the syntax `?parameter_name` and must be configured when creating the tool. +For tools with explicit queries, parameters are defined in the query using the syntax `?parameter_name` and must be configured when creating the tool. Parameters can be: - **Manually defined**: You explicitly define the parameters a tool needs -- **Inferred from query**: For {{esql}} tools, you can use the "Infer parameters from query" button to automatically detect parameters in your {{esql}} statement +- **Inferred from query**: For tools with explicit queries, you can use the "Infer parameters from query" button to automatically detect parameters in your query statement Providing clear, descriptive parameter names and descriptions helps agents properly use your tools when answering queries. @@ -84,8 +87,8 @@ You can create custom tools to help agents interact with your data in specific w 4. Fill in the required fields: - **Name**: Enter a descriptive name for your tool - **Description**: Write a clear explanation of what the tool does and when it should be used - - Tool-specific configuration ({{esql}} query or index settings) - - **Parameters**: For {{esql}} tools, define any parameters your query needs + - Tool-specific configuration (explicit query or index settings) + - **Parameters**: For tools with explicit queries, define any parameters your query needs - **Tags**: (Optional) Add labels to categorize and organize your tools 5. Click **Save** to create your tool @@ -93,7 +96,7 @@ You can create custom tools to help agents interact with your data in specific w You can also create tools programmatically: -For {{esql}} tools: +For tools with explicit {{esql}} queries: ```json POST kbn://api/agent_builder/tools @@ -118,7 +121,7 @@ POST kbn://api/agent_builder/tools 2. Detailed description that helps the agent understand when to use this tool 3. {{esql}} query with parameters prefixed by `?` 4. Parameter definition including type and description -5. Tool type specifier (use "esql" for {{esql}} tools) +5. Tool type specifier (use "esql" for tools with explicit {{esql}} queries) 6. Optional tags for categorization For index search tools: @@ -143,8 +146,6 @@ POST kbn://api/agent_builder/tools 4. Fields within the index that should be searchable 5. Tool type specifier (use `index_search` for index search tools) 6. Optional tags for organization -7. **Use appropriate tags**: Add relevant tags to make tools easier to find and organize -8. **Limit tool count**: More tools are not always better. Try to keep each agent focused with a limited number of relevant tools. ### Testing your tools @@ -165,7 +166,7 @@ Testing helps ensure your tool returns useful results and handles parameters cor 3. **Limit scope**: Focus each tool on a specific task rather than creating overly complex tools 4. **Use meaningful parameter names**: Choose names that clearly indicate what the parameter represents 5. **Add comprehensive parameter descriptions**: Help the agent understand what values to use -6. **Include `LIMIT` clauses in {{esql}} queries**: Prevent returning excessive results +6. **Include `LIMIT` clauses in explicit queries**: Prevent returning excessive results 7. **Use appropriate tags**: Add relevant tags to make tools easier to find and organize 8. **Limit tool count**: More tools are not always better. Try to keep each agent focused with a limited number of relevant tools. From 0a3e2607b2dd2630013b8176cc0cc4d66f3162fd Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:52:18 +0200 Subject: [PATCH 11/15] =?UTF-8?q?=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- solutions/search/agent-builder/get-started.md | 2 +- solutions/search/agent-builder/tools.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/solutions/search/agent-builder/get-started.md b/solutions/search/agent-builder/get-started.md index be12083b27..c0e3fae997 100644 --- a/solutions/search/agent-builder/get-started.md +++ b/solutions/search/agent-builder/get-started.md @@ -64,7 +64,7 @@ Learn more in [Agent Chat](chat.md). ::::{step} Start building agents and tools -Once you've tested the built-in **Elastic AI Agent** with the [default Elastic tools](tools.md, you'll want to start [building your own agents](agent-builder-agents.md#create-a-new-agent) with custom instructions and creating your own [tools](tools.md#create-custom-tools) to assign them. +Once you've tested the default **Elastic AI Agent** with the [built-in Elastic tools](tools.md), you'll want to start [building your own agents](agent-builder-agents.md#create-a-new-agent) with custom instructions and [creating your own tools](tools.md#create-custom-tools) to assign them. :::: diff --git a/solutions/search/agent-builder/tools.md b/solutions/search/agent-builder/tools.md index 09f1a03db9..3c1ca79097 100644 --- a/solutions/search/agent-builder/tools.md +++ b/solutions/search/agent-builder/tools.md @@ -8,6 +8,10 @@ applies_to: # Tools in {{agent-builder}} +:::{warning} +WIP: this page needs better IA +::: + Agents use tools to search, retrieve, and take meaningful steps on your behalf. Tools can be thought of as functions: modular, reusable actions that agents can call to interact with your {{es}} data. From 4f4a56868e0bb6b24c928cbff4a5730e3cd12187 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 17 Sep 2025 19:29:25 +0200 Subject: [PATCH 12/15] tweak system prompt info --- solutions/search/agent-builder/agent-builder-agents.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/search/agent-builder/agent-builder-agents.md b/solutions/search/agent-builder/agent-builder-agents.md index 3e58f52431..76e934f4c8 100644 --- a/solutions/search/agent-builder/agent-builder-agents.md +++ b/solutions/search/agent-builder/agent-builder-agents.md @@ -67,7 +67,7 @@ Click the **New agent** button to start creating a new agent. Configure the essential agent settings in the **settings** tab: 1. Enter an **Agent ID**, a unique identifier for reference in code. -1. Add **Custom instructions**.

Custom instructions are appended to the system prompt that enables core agent features like visualization and citations. The custom instructions define the agent's personality and determine how it will interact with users and perform tasks. +1. Add **Custom instructions**.

Custom instructions define the agent's personality and determine how it will interact with users and perform tasks. :::{note} Your custom instructions are added to the system prompt to define the agent's behavior. The system prompt enables core features like visualization and citations. From 8f0d6a24d3d741cca17d88eeb0176580db24a210 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Thu, 18 Sep 2025 10:28:11 +0200 Subject: [PATCH 13/15] Tidy up Kibana API page, make non-Console usage clear --- solutions/search/agent-builder/kibana-api.md | 103 +++++++++++++++---- 1 file changed, 81 insertions(+), 22 deletions(-) diff --git a/solutions/search/agent-builder/kibana-api.md b/solutions/search/agent-builder/kibana-api.md index 898a9b19b3..957217f9ee 100644 --- a/solutions/search/agent-builder/kibana-api.md +++ b/solutions/search/agent-builder/kibana-api.md @@ -14,7 +14,24 @@ These APIs allow you to programmatically work with the {{agent-builder}} abstrac For the full API documentation, refer to the [Kibana API reference](https://www.elastic.co/docs/api/doc/kibana/). -For information on generating API keys, see [API keys](https://www.elastic.co/docs/solutions/search/search-connection-details). +## Using the APIs + +The examples in this documentation use Dev Tools [Console](/explore-analyze/query-filter/tools/console.md) syntax. +```console +GET kbn://api/agent_builder/tools +``` + +To use these APIs with tools like `curl`, replace the `kbn://` protocol with your Kibana URL. + + +```bash +curl -X GET "https:///api/agent_builder/tools" \ + -H "Authorization: ApiKey " +``` +:::{tip} +To generate API keys, search for `API keys` in the [global search bar](/explore-analyze/find-and-organize/find-apps-and-objects.md). +[Learn more](https://www.elastic.co/docs/solutions/search/search-connection-details). +::: ## Available APIs % TODO: we may remove this list once the API reference is live, but probably helpful in the short term @@ -22,75 +39,117 @@ For information on generating API keys, see [API keys](https://www.elastic.co/do ### Tools List all tools -: `GET kbn://api/agent_builder/tools` +: ```console + GET kbn://api/agent_builder/tools + ``` Create a tool -: `POST kbn://api/agent_builder/tools` +: ```console + POST kbn://api/agent_builder/tools + ``` Get a tool by ID -: `GET kbn://api/agent_builder/tools/{id}` +: ```console + GET kbn://api/agent_builder/tools/{id} + ``` Delete a tool by ID -: `DELETE kbn://api/agent_builder/tools/{id}` +: ```console + DELETE kbn://api/agent_builder/tools/{id} + ``` Update a tool by ID -: `PUT kbn://api/agent_builder/tools/{toolId}` +: ```console + PUT kbn://api/agent_builder/tools/{toolId} + ``` Execute a tool -: `POST kbn://api/agent_builder/tools/_execute` +: ```console + POST kbn://api/agent_builder/tools/_execute + ``` ### Agents List all agents -: `GET kbn://api/agent_builder/agents` +: ```console + GET kbn://api/agent_builder/agents + ``` Create an agent -: `POST kbn://api/agent_builder/agents` +: ```console + POST kbn://api/agent_builder/agents + ``` Get an agent by ID -: `GET kbn://api/agent_builder/agents/{id}` +: ```console + GET kbn://api/agent_builder/agents/{id} + ``` Update an agent by ID -: `PUT kbn://api/agent_builder/agents/{id}` +: ```console + PUT kbn://api/agent_builder/agents/{id} + ``` Delete an agent by ID -: `DELETE kbn://api/agent_builder/agents/{id}` +: ```console + DELETE kbn://api/agent_builder/agents/{id} + ``` ### Chat and Conversations Chat with an agent -: `POST kbn://api/agent_builder/converse` +: ```console + POST kbn://api/agent_builder/converse + ``` Chat with an agent and stream events -: `POST kbn://api/agent_builder/converse/async` +: ```console + POST kbn://api/agent_builder/converse/async + ``` List conversations -: `GET kbn://api/agent_builder/conversations` +: ```console + GET kbn://api/agent_builder/conversations + ``` Get conversation by ID -: `GET kbn://api/agent_builder/conversations/{conversation_id}` +: ```console + GET kbn://api/agent_builder/conversations/{conversation_id} + ``` Delete conversation by ID -: `DELETE kbn://api/agent_builder/conversations/{conversation_id}` +: ```console + DELETE kbn://api/agent_builder/conversations/{conversation_id} + ``` ### MCP Server Get MCP server configuration -: `GET kbn://api/agent_builder/mcp` +: ```console + GET kbn://api/agent_builder/mcp + ``` Create or configure MCP server -: `POST kbn://api/agent_builder/mcp` +: ```console + POST kbn://api/agent_builder/mcp + ``` Delete MCP server configuration -: `DELETE kbn://api/agent_builder/mcp` +: ```console + DELETE kbn://api/agent_builder/mcp + ``` ### A2A Protocol Refer to [](a2a-server.md) for more information. Get A2A agent card configuration -: `GET kbn://api/agent_builder/a2a/{agentId}.json` +: ```console + GET kbn://api/agent_builder/a2a/{agentId}.json + ``` Execute A2A agent task -: `POST kbn://api/agent_builder/a2a/{agentId}` +: ```console + POST kbn://api/agent_builder/a2a/{agentId} + ``` From d273fa0fd82599b193dbab174755d0863b04ad21 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Thu, 18 Sep 2025 11:44:47 +0200 Subject: [PATCH 14/15] Hide pages so we can publish them, add warnings --- solutions/search/agent-builder/a2a-server.md | 6 +++++ .../agent-builder/agent-builder-agents.md | 6 +++++ solutions/search/agent-builder/chat.md | 6 +++++ solutions/search/agent-builder/get-started.md | 11 ++++++++++ solutions/search/agent-builder/kibana-api.md | 6 +++++ .../agent-builder/limitations-known-issues.md | 6 +++++ solutions/search/agent-builder/mcp-server.md | 6 +++++ .../agent-builder/programmatic-access.md | 6 +++++ solutions/search/agent-builder/tools.md | 8 ++++--- solutions/search/elastic-agent-builder.md | 6 +++++ solutions/toc.yml | 22 +++++++++---------- 11 files changed, 74 insertions(+), 15 deletions(-) diff --git a/solutions/search/agent-builder/a2a-server.md b/solutions/search/agent-builder/a2a-server.md index 99514104c9..45b08710f8 100644 --- a/solutions/search/agent-builder/a2a-server.md +++ b/solutions/search/agent-builder/a2a-server.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # Agent-to-Agent (A2A) server The [**Agent-to-Agent (A2A) server**](https://github.com/a2aproject/A2A) enables external A2A clients to communicate with {{agent-builder}} agents. diff --git a/solutions/search/agent-builder/agent-builder-agents.md b/solutions/search/agent-builder/agent-builder-agents.md index 76e934f4c8..d3350c4a3d 100644 --- a/solutions/search/agent-builder/agent-builder-agents.md +++ b/solutions/search/agent-builder/agent-builder-agents.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # {{agent-builder}}: Agents Agents engage in natural language conversations with users and interact with your {{es}} data through tools. diff --git a/solutions/search/agent-builder/chat.md b/solutions/search/agent-builder/chat.md index 55ee8bec17..df244a1b40 100644 --- a/solutions/search/agent-builder/chat.md +++ b/solutions/search/agent-builder/chat.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # {{agent-builder}}: Agent Chat UI diff --git a/solutions/search/agent-builder/get-started.md b/solutions/search/agent-builder/get-started.md index c0e3fae997..bc58fbb3de 100644 --- a/solutions/search/agent-builder/get-started.md +++ b/solutions/search/agent-builder/get-started.md @@ -6,8 +6,19 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # Get started with {{agent-builder}} +:::{tip} +See the [overview page](../elastic-agent-builder.md) for full list of docs pages. +::: +% TODO: Delete this tip when unhide pages + Learn how get started by enabling the {{agent-builder}} features and begin chatting with your data. :::::{stepper} diff --git a/solutions/search/agent-builder/kibana-api.md b/solutions/search/agent-builder/kibana-api.md index 957217f9ee..65dd7993ff 100644 --- a/solutions/search/agent-builder/kibana-api.md +++ b/solutions/search/agent-builder/kibana-api.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # Work with {{agent-builder}} using the APIs These APIs allow you to programmatically work with the {{agent-builder}} abstractions. diff --git a/solutions/search/agent-builder/limitations-known-issues.md b/solutions/search/agent-builder/limitations-known-issues.md index 100d6950ec..3efd60810d 100644 --- a/solutions/search/agent-builder/limitations-known-issues.md +++ b/solutions/search/agent-builder/limitations-known-issues.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # Limitations and known issues in {{agent-builder}} ## Model selection diff --git a/solutions/search/agent-builder/mcp-server.md b/solutions/search/agent-builder/mcp-server.md index 8d355ed174..fd0f408073 100644 --- a/solutions/search/agent-builder/mcp-server.md +++ b/solutions/search/agent-builder/mcp-server.md @@ -8,6 +8,12 @@ applies_to: # MCP server +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + The [**Model Context Protocol (MCP) server**](https://modelcontextprotocol.io/docs/getting-started/intro) provides a standardized interface for external clients to access {{agent-builder}} tools. ## MCP server endpoint diff --git a/solutions/search/agent-builder/programmatic-access.md b/solutions/search/agent-builder/programmatic-access.md index 559f3061a7..ca9c9a5232 100644 --- a/solutions/search/agent-builder/programmatic-access.md +++ b/solutions/search/agent-builder/programmatic-access.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # Work programmatically with {{agent-builder}} {{agent-builder}} provides comprehensive APIs and additional integration options for programmatic access and automation. diff --git a/solutions/search/agent-builder/tools.md b/solutions/search/agent-builder/tools.md index 3c1ca79097..ac1238e155 100644 --- a/solutions/search/agent-builder/tools.md +++ b/solutions/search/agent-builder/tools.md @@ -6,12 +6,14 @@ applies_to: elasticsearch: preview --- -# Tools in {{agent-builder}} - :::{warning} -WIP: this page needs better IA +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. ::: +# Tools in {{agent-builder}} + Agents use tools to search, retrieve, and take meaningful steps on your behalf. Tools can be thought of as functions: modular, reusable actions that agents can call to interact with your {{es}} data. diff --git a/solutions/search/elastic-agent-builder.md b/solutions/search/elastic-agent-builder.md index b30846cf4b..f51ba17033 100644 --- a/solutions/search/elastic-agent-builder.md +++ b/solutions/search/elastic-agent-builder.md @@ -6,6 +6,12 @@ applies_to: elasticsearch: preview --- +:::{warning} +WIP + +These pages are hidden from the docs TOC and have `noindexed` meta headers. +::: + # {{agent-builder}} {{agent-builder}} is an AI-powered conversation framework for working with {{es}} data using natural language. It features both a chat UI for synchronous interaction and extensive programmatic access through APIs, MCP and A2A servers. diff --git a/solutions/toc.yml b/solutions/toc.yml index 4922e46b38..311bdd4f0f 100644 --- a/solutions/toc.yml +++ b/solutions/toc.yml @@ -45,18 +45,16 @@ toc: - file: search/semantic-search/semantic-search-elser-ingest-pipelines.md - file: search/semantic-search/cohere-es.md - file: search/using-openai-compatible-models.md - - file: search/elastic-agent-builder.md - children: - - file: search/agent-builder/get-started.md - - file: search/agent-builder/chat.md - - file: search/agent-builder/agent-builder-agents.md - - file: search/agent-builder/tools.md - - file: search/agent-builder/programmatic-access.md - children: - - file: search/agent-builder/kibana-api.md - - file: search/agent-builder/mcp-server.md - - file: search/agent-builder/a2a-server.md - - file: search/agent-builder/limitations-known-issues.md + - hidden: search/elastic-agent-builder.md + - hidden: search/agent-builder/get-started.md + - hidden: search/agent-builder/chat.md + - hidden: search/agent-builder/agent-builder-agents.md + - hidden: search/agent-builder/tools.md + - hidden: search/agent-builder/programmatic-access.md + - hidden: search/agent-builder/kibana-api.md + - hidden: search/agent-builder/mcp-server.md + - hidden: search/agent-builder/a2a-server.md + - hidden: search/agent-builder/limitations-known-issues.md - file: search/rag.md children: - file: search/rag/playground.md From 9c50c0a66fe3ba0b92c9abfe30c4816ff1c03a53 Mon Sep 17 00:00:00 2001 From: Sean Story Date: Thu, 18 Sep 2025 04:59:11 -0500 Subject: [PATCH 15/15] add known issues for agent builder (#3001) --- .gitignore | 4 ++++ .../agent-builder/limitations-known-issues.md | 23 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index c4f17bc242..011dd3465d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ .artifacts .DS_store +# Jetbrains files +.idea +*.iml + # Add LLM/AI related files AGENTS.md .github/copilot-instructions.md diff --git a/solutions/search/agent-builder/limitations-known-issues.md b/solutions/search/agent-builder/limitations-known-issues.md index 3efd60810d..2cf4ce3827 100644 --- a/solutions/search/agent-builder/limitations-known-issues.md +++ b/solutions/search/agent-builder/limitations-known-issues.md @@ -20,12 +20,12 @@ Initally, {{agent-builder}} only supports working with the [Elastic Managed LLM] Locally this picks the first AI connector available. -Initally, there are no UI controls to select which connector (and therefore which model) to use. +This can be changed under Stack Management -> AI -> GenAI Settings -> Default AI Connector. ## Known issues -- **Default agent misinterprets SQL syntax as ES|QL** +- **Default agent can misinterpret SQL syntax as ES|QL** - The `.execute_esql` tool is designed only for [{{esql}}](elasticsearch://reference/query-languages/esql.md) syntax, not other query languages - When using SQL syntax with the default agent, it attempts to use the `.execute_esql` tool instead of recognizing the input as SQL - This results in parsing errors like this: @@ -41,3 +41,22 @@ Initally, there are no UI controls to select which connector (and therefore whic ] ``` +- **Not all LLMs are compatible** + - While Elastic offers LLM connectors for many different vendors and models, not all LLMs are robust enough to be used with {{agent-builder}}. + - Errors such as: + ```console-response + Error: Invalid function call syntax + ``` + or + ``` + Error executing agent: No tool calls found in the response. + ``` + may indicate that your selected model is ill-equipped for the precise response structure necessary for {{agent-builder}}. + - We recommend using the [Elastic Managed LLM](kibana://reference/connectors-kibana/elastic-managed-llm.md) + +- **{{agent-builder}} is not accessible** + - {{agent-builder}} was added in a private preview in September, 2025 for Serverless, and in 9.2.0 for Elastic Cloud. + - While in this preview stage, {{agent-builder}} is not enabled by default. + - To enable it, you must go to Stack Management -> Kibana -> Advanced Settings -> Elastic Agent Builder, and enable it. + + \ No newline at end of file