From 0bb37728be728d3a6c5d3ee509e9bb0fe2741903 Mon Sep 17 00:00:00 2001 From: reeb Date: Sun, 13 Sep 2026 20:45:14 +0300 Subject: [PATCH 1/2] RDoc-4056 - agents view page documented in /dashboard/manage-an-app/app-agents-view --- quill/channels/discord-bot.mdx | 8 +- quill/channels/overview.mdx | 22 +- quill/channels/slack-bot.mdx | 8 +- quill/channels/telegram-bot.mdx | 8 +- .../manage-an-app/app-agents-view.mdx | 359 ++++++++++++++++++ .../dashboard/manage-an-app/app-overview.mdx | 4 +- .../assets/app-agents-view_agent-actions.png | Bin 0 -> 55226 bytes ...pp-agents-view_agent-actions_configure.png | Bin 0 -> 137844 bytes .../app-agents-view_agent-parameters.png | Bin 0 -> 74574 bytes ...agents-view_agent-parameters_configure.png | Bin 0 -> 111665 bytes .../assets/app-agents-view_agent-tools.png | Bin 0 -> 89397 bytes .../app-agents-view_agent-tools_configure.png | Bin 0 -> 130687 bytes .../assets/app-agents-view_agent-view.png | Bin 0 -> 142178 bytes ...-agents-view_agent-view_basic-settings.png | Bin 0 -> 131953 bytes .../assets/app-agents-view_agents-view.png | Bin 0 -> 164065 bytes .../assets/app-agents-view_delete-refused.png | Bin 0 -> 47857 bytes .../app-agents-view_overview-agents.png | Bin 0 -> 60458 bytes .../assets/channels-view_box-actions.png | Bin 22068 -> 27838 bytes .../assets/channels-view_channel-details.png | Bin 45655 -> 51425 bytes .../assets/channels-view_channel-menu.png | Bin 7469 -> 13239 bytes .../assets/channels-view_channel-paused.png | Bin 41187 -> 46957 bytes .../assets/channels-view_channels-view.png | Bin 181277 -> 187047 bytes .../assets/channels-view_delete-channel.png | Bin 26359 -> 32129 bytes .../assets/channels-view_edit-channel.png | Bin 55641 -> 61411 bytes .../assets/channels-view_new-channel-menu.png | Bin 59875 -> 65645 bytes .../channels-view_overview-channels.png | Bin 58648 -> 64418 bytes .../app-agents-view_agent-actions.snagx | Bin 0 -> 380327 bytes ...-agents-view_agent-actions_configure.snagx | Bin 0 -> 486976 bytes .../app-agents-view_agent-parameters.snagx | Bin 0 -> 220783 bytes ...ents-view_agent-parameters_configure.snagx | Bin 0 -> 456248 bytes .../snagit/app-agents-view_agent-tools.snagx | Bin 0 -> 450621 bytes ...pp-agents-view_agent-tools_configure.snagx | Bin 0 -> 465679 bytes .../snagit/app-agents-view_agent-view.snagx | Bin 0 -> 589242 bytes ...gents-view_agent-view_basic-settings.snagx | Bin 0 -> 487860 bytes .../snagit/app-agents-view_agents-view.snagx | Bin 0 -> 447727 bytes .../app-agents-view_overview-agents.snagx | Bin 0 -> 387908 bytes .../snagit/channels-view_box-actions.snagx | Bin .../channels-view_channel-details.snagx | Bin .../snagit/channels-view_channel-paused.snagx | Bin .../snagit/channels-view_channels-view.snagx | Bin .../snagit/channels-view_delete-channel.snagx | Bin .../snagit/channels-view_edit-channel.snagx | Bin .../channels-view_new-channel-menu.snagx | Bin .../channels-view_overview-channels.snagx | Bin .../{ => manage-an-app}/channels-view.mdx | 45 +-- quill/dashboard/my-apps.mdx | 3 +- quill/getting-started/adding-an-ai-agent.mdx | 3 +- quill/overview.mdx | 2 +- 48 files changed, 414 insertions(+), 48 deletions(-) create mode 100644 quill/dashboard/manage-an-app/app-agents-view.mdx create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-actions.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-actions_configure.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-parameters.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-parameters_configure.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-tools.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-tools_configure.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-view.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agent-view_basic-settings.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_agents-view.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_delete-refused.png create mode 100644 quill/dashboard/manage-an-app/assets/app-agents-view_overview-agents.png rename quill/dashboard/{ => manage-an-app}/assets/channels-view_box-actions.png (78%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_channel-details.png (88%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_channel-menu.png (55%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_channel-paused.png (86%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_channels-view.png (96%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_delete-channel.png (80%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_edit-channel.png (90%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_new-channel-menu.png (90%) rename quill/dashboard/{ => manage-an-app}/assets/channels-view_overview-channels.png (90%) create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-actions.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-actions_configure.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-parameters.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-parameters_configure.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-tools.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-tools_configure.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-view.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agent-view_basic-settings.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_agents-view.snagx create mode 100644 quill/dashboard/manage-an-app/assets/snagit/app-agents-view_overview-agents.snagx rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_box-actions.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_channel-details.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_channel-paused.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_channels-view.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_delete-channel.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_edit-channel.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_new-channel-menu.snagx (100%) rename quill/dashboard/{ => manage-an-app}/assets/snagit/channels-view_overview-channels.snagx (100%) rename quill/dashboard/{ => manage-an-app}/channels-view.mdx (84%) diff --git a/quill/channels/discord-bot.mdx b/quill/channels/discord-bot.mdx index 6c7a4d99e6..b06f41201f 100644 --- a/quill/channels/discord-bot.mdx +++ b/quill/channels/discord-bot.mdx @@ -216,7 +216,7 @@ The new channel appears in the **Channels** section: 2. **Status** **Active**: the channel is enabled; **Disabled**: the channel is paused. Pausing and resuming a channel is described in - [Dashboard: Channels view](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel). + [App: Channels view](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel). 3. **Active links** Embed links belong to web widget channels; a Discord bot channel has none, so the column shows a dash. @@ -340,7 +340,7 @@ A constant value suits a channel whose users all share the value, like the bot a Once added, the channel is managed from its details view, described in -[Dashboard: Channels view](../dashboard/channels-view.mdx#the-channel-s-details-view): the view's header carries the +[App: Channels view](../dashboard/manage-an-app/channels-view.mdx#the-channel-s-details-view): the view's header carries the **Pause**/**Resume** button and the **⋮** menu with **Edit** and **Delete**, common to every channel type, and the tabs below the header are specific to the channel type. @@ -360,8 +360,8 @@ To pause or resume the channel, click **Pause**/**Resume** in the header; to del ![Pause and the channel's menu in the details view's header](./assets/discord-bot_channel-menu.png) Both actions are explained in the Channels view article, in -[Pausing and resuming a channel](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel) and -[Deleting a channel](../dashboard/channels-view.mdx#deleting-a-channel). Each of them also has a Discord side, explained here: +[Pausing and resuming a channel](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel) and +[Deleting a channel](../dashboard/manage-an-app/channels-view.mdx#deleting-a-channel). Each of them also has a Discord side, explained here: * A paused bot stops answering, and Quill closes its connection to Discord, so the bot appears offline on Discord. Messages users send while the channel is paused do not reach Quill, and will not be answered when the channel is resumed. diff --git a/quill/channels/overview.mdx b/quill/channels/overview.mdx index 7eda6ebcc3..0f58e53acb 100644 --- a/quill/channels/overview.mdx +++ b/quill/channels/overview.mdx @@ -61,7 +61,8 @@ A channel's type is selected in the **Add channel** menu, described in [Adding a -A channel is added for one of the app's agents, and carries conversations to this agent alone. +A channel is added for one of the app's [agents](../dashboard/manage-an-app/app-agents-view.mdx), and carries +conversations to this agent alone. The following holds for channels of every type: * **An agent can serve several channels at once.** @@ -78,16 +79,16 @@ The following holds for channels of every type: Channels of every type are added and managed in the same places of Quill's management dashboard, described in -[Dashboard: Channels view](../dashboard/channels-view.mdx). +[App: Channels view](../dashboard/manage-an-app/channels-view.mdx). * **Adding a channel starts with selecting the channel's type in the Add channel menu.** - The menu opens from the [Channels view](../dashboard/channels-view.mdx#adding-a-channel), from the - [channels list in the app's Overview](../dashboard/channels-view.mdx#an-additional-entry-point-the-channels-list-in-the-overview), + The menu opens from the [Channels view](../dashboard/manage-an-app/channels-view.mdx#adding-a-channel), from the + [channels list in the app's Overview](../dashboard/manage-an-app/channels-view.mdx#an-additional-entry-point-the-channels-list-in-the-overview), and at the last stage of the [Add agent wizard](../getting-started/adding-an-ai-agent.mdx#saving-the-agent), right after an agent is created. Selecting a type opens the type's form, described in the type's article. * **Once added, a channel is managed from its details view.** - The [details view](../dashboard/channels-view.mdx#the-channel-s-details-view) opens from the channel's box in the Channels view. + The [details view](../dashboard/manage-an-app/channels-view.mdx#the-channel-s-details-view) opens from the channel's box in the Channels view. The view's header carries the **Pause**/**Resume** button and the **⋮** menu with **Edit** and **Delete**, common to every channel type, and the tabs below the header are specific to the channel type. The tabs and the other type-specific parts of the view are described in the type's article. @@ -96,15 +97,16 @@ Channels of every type are added and managed in the same places of Quill's manag -Some agents have **parameters**: values the agent's queries require, and that must come from the channel rather than be chosen by -the LLM, like the phone number of the customer whose orders the agent looks up. +Some agents have [parameters](../dashboard/manage-an-app/app-agents-view.mdx#agent-parameters): values the agent's +queries require, and that must come from the channel rather than be chosen by the LLM, like the phone number of the +customer whose orders the agent looks up. Agent parameters are bound by the channel, and the source of a parameter's value depends on the channel type: * A **bot channel** binds each parameter when the channel is added, to a constant value or to a selected detail of each user who sends the channel a message; the user details that can be bound differ by platform, and are listed in each bot's article. A parameter left unbound, e.g., a parameter added to the agent after the channel was added, stops the bot from answering until the parameter is bound in the **Parameters** tab of the - [channel's details view](../dashboard/channels-view.mdx#the-channel-s-details-view). + [channel's details view](../dashboard/manage-an-app/channels-view.mdx#the-channel-s-details-view). * A **chat widget** binds the parameters into each embed link [when the link is generated](../getting-started/adding-a-chat-widget.mdx#setting-the-link-limits), and a link cannot be generated until every parameter has a value. @@ -150,8 +152,8 @@ Agent parameters are bound by the channel, and the source of a parameter's value gets the reply "I can only read text messages right now." * **Pausing a channel takes it out of service; deleting a channel removes it.** Both actions are described in the Channels view article, in - [Pausing and resuming a channel](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel) and - [Deleting a channel](../dashboard/channels-view.mdx#deleting-a-channel). The conversations a deleted channel carried remain + [Pausing and resuming a channel](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel) and + [Deleting a channel](../dashboard/manage-an-app/channels-view.mdx#deleting-a-channel). The conversations a deleted channel carried remain available in the app's **Conversations** view. What each action means for the channel's users, and for a bot on its platform, depends on the channel type and is described in the type's article. diff --git a/quill/channels/slack-bot.mdx b/quill/channels/slack-bot.mdx index 8acd232b84..a6256d4628 100644 --- a/quill/channels/slack-bot.mdx +++ b/quill/channels/slack-bot.mdx @@ -335,7 +335,7 @@ Back in Quill, you can now see the new channel in the Overview's **Channels** se 2. **Status** **Active**: the channel is enabled; **Disabled**: the channel is paused. Pausing and resuming a channel is described in - [Dashboard: Channels view](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel). + [App: Channels view](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel). 3. **Active links** Embed links belong to web widget channels; a Slack bot channel has none, so the column shows a dash. @@ -447,7 +447,7 @@ A constant value suits a channel whose users all share the value, like the bot a Once added, the channel is managed from its details view, described in -[Dashboard: Channels view](../dashboard/channels-view.mdx#the-channel-s-details-view): the view's header carries the +[App: Channels view](../dashboard/manage-an-app/channels-view.mdx#the-channel-s-details-view): the view's header carries the **Pause**/**Resume** button and the **⋮** menu with **Edit** and **Delete**, common to every channel type, and the tabs below the header are specific to the channel type. @@ -467,8 +467,8 @@ To pause or resume the channel, click **Pause**/**Resume** in the header; to del ![Pause and the channel's menu in the details view's header](./assets/slack-bot_channel-menu.png) Both actions are explained in the Channels view article, in -[Pausing and resuming a channel](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel) and -[Deleting a channel](../dashboard/channels-view.mdx#deleting-a-channel). Each of them also has a Slack side, explained here: +[Pausing and resuming a channel](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel) and +[Deleting a channel](../dashboard/manage-an-app/channels-view.mdx#deleting-a-channel). Each of them also has a Slack side, explained here: * A paused bot stops answering. Nothing changes on Slack: the bot remains installed, and Slack keeps delivering the users' messages, which Quill discards. diff --git a/quill/channels/telegram-bot.mdx b/quill/channels/telegram-bot.mdx index 2dc5c05dfa..4aa5009514 100644 --- a/quill/channels/telegram-bot.mdx +++ b/quill/channels/telegram-bot.mdx @@ -170,7 +170,7 @@ The new channel appears in the **Channels** section: 2. **Status** **Active**: the channel is enabled; **Disabled**: the channel is paused. Pausing and resuming a channel is described in - [Dashboard: Channels view](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel). + [App: Channels view](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel). 3. **Active links** Embed links belong to web widget channels; a Telegram bot channel has none, so the column shows a dash. @@ -320,7 +320,7 @@ A new channel, even one added for the same bot, knows nothing of earlier shares Once added, the channel is managed from its details view, described in -[Dashboard: Channels view](../dashboard/channels-view.mdx#the-channel-s-details-view): the view's header carries the +[App: Channels view](../dashboard/manage-an-app/channels-view.mdx#the-channel-s-details-view): the view's header carries the **Pause**/**Resume** button and the **⋮** menu with **Edit** and **Delete**, common to every channel type, and the tabs below the header are specific to the channel type. @@ -340,8 +340,8 @@ To pause or resume the channel, click **Pause**/**Resume** in the header; to del ![Pause and the channel's menu in the details view's header](./assets/telegram-bot_channel-menu.png) Both actions are explained in the Channels view article, in -[Pausing and resuming a channel](../dashboard/channels-view.mdx#pausing-and-resuming-a-channel) and -[Deleting a channel](../dashboard/channels-view.mdx#deleting-a-channel). Each of them also has a Telegram side, explained here: +[Pausing and resuming a channel](../dashboard/manage-an-app/channels-view.mdx#pausing-and-resuming-a-channel) and +[Deleting a channel](../dashboard/manage-an-app/channels-view.mdx#deleting-a-channel). Each of them also has a Telegram side, explained here: * A paused bot stops answering, and messages users send meanwhile are held by Telegram for up to 24 hours, to be answered if the channel is resumed within this time. diff --git a/quill/dashboard/manage-an-app/app-agents-view.mdx b/quill/dashboard/manage-an-app/app-agents-view.mdx new file mode 100644 index 0000000000..ca91ddd6b9 --- /dev/null +++ b/quill/dashboard/manage-an-app/app-agents-view.mdx @@ -0,0 +1,359 @@ +--- +title: "App: Agents view" +sidebar_label: Agents view +sidebar_position: 3 +description: "The Agents view of a Quill app: the agents that answer your users, listed with their status and activity, and an agent's configuration, where its basic settings, parameters, query tools, and actions are modified, and the agent is tested, saved, or deleted." +--- + +import Admonition from '@theme/Admonition'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import Panel from "@site/src/components/Panel"; +import ContentFrame from "@site/src/components/ContentFrame"; + +# App: Agents view + + +* An [AI agent](../../overview.mdx#ai-agent) answers your users from the app's internal database. + The **Agents** view lists the agents you already created, with their status and activity, and allows you to add new + agents, open an agent to modify and test its configuration, and delete an agent. + +* The Agents view is opened from the app's sidebar, where it is listed under the **Database** group. + The app's [Overview](../../dashboard/manage-an-app/app-overview.mdx) page also lists the existing agents, + to provide an overall view of the app's activity, agents, and channels. + +* An agent is added using the **Add agent** wizard, described in + [Getting started: Adding an AI agent](../../getting-started/adding-an-ai-agent.mdx). + +* In this article: + * [Opening the Agents view](#opening-the-agents-view) + * [The agent's configuration](#the-agent-s-configuration) + * [Basic settings](#basic-settings) + * [Agent parameters](#agent-parameters) + * [Agent tools](#agent-tools) + * [Agent actions](#agent-actions) + * [Deleting an agent](#deleting-an-agent) + * [An additional entry point: the agents list in the Overview](#an-additional-entry-point-the-agents-list-in-the-overview) + + + + + +To open the Agents view, select the app in Quill's management dashboard and click **Agents** in the sidebar, under **Database**. + +![The Agents view](./assets/app-agents-view_agents-view.png) + +1. **Agents** + Open the Agents view. +2. **Add agent** + Add an agent to the app. See + [Getting started: Adding an AI agent](../../getting-started/adding-an-ai-agent.mdx). +3. **The agents list** + Lists the details and actions available for each agent, one row per agent. +4. **Agent information** + Each row shows the following details for a single agent: + * **Agent name** + The agent's name. + * **Status** + The agent's status, **Active** or **Disabled**. + * **Model** + The chat model the agent uses, taken from the AI connection string set for the agent. + A dash is shown when the model cannot be resolved. + * **Last run** + The hour at which the agent's most recent conversation started. + This time does not change while an earlier conversation continues. + * **Conversations** + The number of conversations the agent has held. + * **Prompts** + The number of messages the users have sent the agent. + * **Tokens** + The number of tokens the agent's conversations have consumed. +5. **Edit agent** + Review and modify the agent's configuration. See [The agent's configuration](#the-agent-s-configuration). +6. **Delete agent** + Delete the agent from the app. See [Deleting an agent](#deleting-an-agent). + + + + + +An agent's behaviour is set by its configuration. +To review and modify an agent's configuration, click the agent's pencil icon in the agents list. + +![The agent's configuration](./assets/app-agents-view_agent-view.png) + +You can expand or collapse each configuration section: [Basic settings](#basic-settings), +[Agent parameters](#agent-parameters), [Agent tools](#agent-tools), and [Agent actions](#agent-actions). + +1. **The agent's details** + The agent's name and status, the model it uses, and the channels the agent serves. +2. **The agent's menu** + Holds a single entry, **Delete**. See [Deleting an agent](#deleting-an-agent). +3. **Basic settings** + The agent's name, AI connection string, and system prompt. + + + + ### Basic settings + + ![Basic settings](./assets/app-agents-view_agent-view_basic-settings.png) + + * **A. Agent name** + The **Agent name** field is disabled; it cannot be modified since the agent's identifier is derived from its name + and is set once when the agent is created. + * **B. Connection string** + The [AI connection string](../../dashboard/ai-connection-strings.mdx) that provides the chat model the agent uses. + You can select the connection string the agent uses, remove the current string using the clear icon, or click + **Add connection string** to define a new string. + * **C. System prompt** + Define the instructions the agent follows throughout a conversation. + + + +4. **Agent parameters** + Values that the agent's queries can use. Each value is provided when a conversation starts, and the LLM cannot + override it. + + + + ### Agent parameters + + Expanding the **Agent parameters** section shows the parameters defined for the agent. + The image below lists a single parameter, `customerPhone`. + + ![Agent parameters](./assets/app-agents-view_agent-parameters.png) + + Adding or editing a parameter reveals the following fields: + + ![Configure parameter](./assets/app-agents-view_agent-parameters_configure.png) + + * **A. Parameter name** + The name by which agent queries refer to the parameter. + * **B. Parameter type** + Select a type for the parameter's value: **String**, **Number**, **Boolean**, **String[]**, **Number[]**, **Boolean[]**, + **Any**, or **Null**. + Quill checks the parameter's value against the selected type each time a conversation starts, and the conversation + will not start if the value is of another type. + **Any** applies no type validation. + * **C. Description (optional)** + A description of the parameter's content. + The description is passed to the LLM along with the parameter's value, unless **Send to model** (see below) is set + to **Off**. + * **D. Forbid model generation** + Select whether the LLM may generate a value for this parameter when another agent uses this agent as a sub-agent. + **Default**: the LLM may generate a value for the parameter. + **Forbid model generation**: the LLM may not generate a value. The value can only be inherited from a parameter of + the same name in the calling agent, and the call will fail if the calling agent has no such parameter. + * **E. Send to model** + Set whether the parameter's value is included in the text sent to the LLM, + **On** (default): the parameter's value is sent to the LLM, and the agent's queries receive the value as well. + **Off**: the parameter's value is **not** sent to the LLM. The agent's queries still receive the value. + + + +5. **Agent tools** + Query tools you provide in this section can be used by the agent to query Quill's internal database. + The LLM that the agent uses knows of these tools and is free to use them as needed. + The LLM **cannot** access Quill's database directly: to retrieve data from the database, it must request the agent + to use a query tool. + + + + ### Agent tools + + Expanding the **Agent tools** section shows the query tools defined for the agent. + The image below lists two such tools, `getCustomerByPhone` and `findCategoryProducts`. + + ![Agent tools](./assets/app-agents-view_agent-tools.png) + + Adding or editing a query tool reveals the following fields: + + ![Configure query tool](./assets/app-agents-view_agent-tools_configure.png) + + * **A. Tool name** + The name the LLM uses to trigger the query. + A name can be used only once; you cannot give the same name to two query tools, or to a query tool and an + [action](#agent-actions). + * **B. Description** + A description of the data the query returns. + * **C. Query** + Query tools can only **read** from Quill's internal database, never write into it. + When a `$name` placeholder is included in the query, Quill replaces the placeholder at runtime, each time the query + tool is called, with the value set by an agent parameter of the same name. + When no agent parameter carries the placeholder's name, the value is taken from the parameters the LLM provides + when it requests the query, defined in **D** below. + The query will fail if neither an agent parameter nor the LLM provides a value for the placeholder. + * **D. Sample parameters object / Parameters JSON schema** + Define, either as a **sample object** or as a **JSON schema**, the parameters the LLM provides when it + requests this query. + Defining a sample object is usually easier, since you can describe the parameters in natural language. + e.g., the sample object and the JSON schema in the example below define two parameters, `customerPhone` and + `maxOrders`. + + + + ```json + { + "customerPhone": "The phone number the customer gave", + "maxOrders": "The number of recent orders to return" + } + ``` + + + ```json + { + "type": "object", + "properties": { + "customerPhone": { + "type": "string", + "description": "The phone number the customer gave" + }, + "maxOrders": { + "type": "number", + "description": "The number of recent orders to return" + } + }, + "required": ["customerPhone", "maxOrders"] + } + ``` + + + + Either a sample object or a JSON schema must be defined. If you define both, the schema will be applied. + * **E. Allow model queries** + Select whether the LLM is allowed to run this query tool. + **True**: the LLM can run the tool whenever needed. + **False**: this tool is not offered to the LLM at all. + * **F. Add to initial context** + Select when Quill runs this query tool. + **Default**: run this tool only when the LLM requests its query. + **True**: also run this tool before the conversation starts, and hand the results to the LLM. + e.g., a query that returns the list of product categories can be added to the initial context, so the LLM will + have this data before the first question arrives. + + + + A query that runs before the conversation starts cannot take values from the LLM, since the LLM has not been + called yet. + + + + + +6. **Agent actions** + The agent can use **actions** you define here, that ask Quill to call systems outside Quill. + + * The LLM that the agent uses knows of these actions and is free to apply them as needed. + * The LLM **cannot** call an outside system directly: it can only request an action from the agent, providing values + for any defined parameters, so Quill will make the call. + * An outside system's response is passed back to the LLM as a text, indicating whether the call succeeded, the + status code, notable headers, the response body (up to the set limit), and, when the body is cut, a truncation + marker pointing it out. + + e.g., during a conversation with one of your users, it may turn out that a support ticket should be opened on an + outside system. The LLM will request the `create_ticket` action, Quill will call the address configured for it, + and once the response arrives the LLM will continue the conversation with your user. + + + + ### Agent actions + + Expanding the **Agent actions** section shows the actions defined for the agent. + The image below lists a single action, `create_ticket`. + + ![Agent actions](./assets/app-agents-view_agent-actions.png) + + Adding or editing an action reveals the following fields: + + ![Configure action](./assets/app-agents-view_agent-actions_configure.png) + + * **A. Action name** + The name the LLM uses to trigger this action. + A name can be used only once; you cannot give the same name to two actions, or to an action and a query tool. + * **B. Description** + A description of the situation in which the agent should trigger this action. + * **C. Sample parameters object / Parameters JSON schema** + Define, either as a **sample object** or as a **JSON schema**, the parameters the LLM provides when it triggers + this action. + e.g., + + + + ```json + { + "customerPhone": "The phone number the customer gave", + "issueSummary": "A short summary of the issue the customer described" + } + ``` + + + ```json + { + "type": "object", + "properties": { + "customerPhone": { + "type": "string", + "description": "The phone number the customer gave" + }, + "issueSummary": { + "type": "string", + "description": "A short summary of the issue the customer described" + } + }, + "required": ["customerPhone", "issueSummary"] + } + ``` + + + * **D. Webhook URL** + The address Quill calls when the agent triggers the action. + The address must be absolute, and start with `http://` or `https://`. + * **E. Secret** + An optional value Quill sends with every call, for the receiver to check. + * **F. Max response size (optional)** + The number of response bytes passed back to the agent, 4096 by default and 256 KB at most. + + + +7. **Cancel** + Leave the configuration without saving your changes. +8. **Test agent** + Chat with the agent to try the configuration currently in the form, unsaved changes included. + The button stays disabled until the agent name, the system prompt, and the connection string are all set. +9. **Save changes** + Save the modified configuration. + A save attempted while any configuration section still requires your attention opens all four sections, and marks + each section that needs it with an error icon. + + + + + +Deleting an agent removes it from the app irrevocably along with its configuration and the addresses and secrets set +for its actions. +An agent is deleted using the trash icon in the [agents list](#opening-the-agents-view), or the **Delete** entry in the +agent's menu described in [The agent's configuration](#the-agent-s-configuration). A confirmation is asked first. + +An agent cannot be deleted as long as any channel is bound to it; delete the agent's channels from the +[Channels view](../../dashboard/manage-an-app/channels-view.mdx) first, and only then the agent. + +![Deleting an agent that channels are bound to](./assets/app-agents-view_delete-refused.png) + +The conversations the agent has held are kept, and remain available in the app's **Conversations** view. + + + + + +Similarly to the Agents view discussed here, the app's [Overview](../../dashboard/manage-an-app/app-overview.mdx) page +lists your existing agents and allows you to add an agent or edit an existing agent's configuration. + +![The agents list in the Overview](./assets/app-agents-view_overview-agents.png) + +1. **Add agent** + Start the [Add agent wizard](../../getting-started/adding-an-ai-agent.mdx) to add an agent to the app. +2. **The agents list** + Each row lists a single agent, allowing you to [see the agent's details](#opening-the-agents-view), + [modify its configuration](#the-agent-s-configuration), or [delete the agent](#deleting-an-agent). + + diff --git a/quill/dashboard/manage-an-app/app-overview.mdx b/quill/dashboard/manage-an-app/app-overview.mdx index 748d51a1be..945aaebf3c 100644 --- a/quill/dashboard/manage-an-app/app-overview.mdx +++ b/quill/dashboard/manage-an-app/app-overview.mdx @@ -135,7 +135,9 @@ A chart is not shown when the selected period contains only one bucket. ![App overview - Agents](./assets/app-overview-3.png) The table lists every agent configured in the app. -If the app has no agents, the table displays **No agents yet.** +If the app has no agents, the table displays **No agents yet.** +The agents themselves are added, modified and deleted in the +[App: Agents view](../../dashboard/manage-an-app/app-agents-view.mdx). 1. **Agent name** The name assigned to the agent when it was created. diff --git a/quill/dashboard/manage-an-app/assets/app-agents-view_agent-actions.png b/quill/dashboard/manage-an-app/assets/app-agents-view_agent-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..1c22cdfc7b4ebd3c6b7c6e1330879aae0e8ce386 GIT binary patch literal 55226 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 literal 0 HcmV?d00001 diff --git a/quill/dashboard/manage-an-app/assets/app-agents-view_agent-actions_configure.png b/quill/dashboard/manage-an-app/assets/app-agents-view_agent-actions_configure.png new file mode 100644 index 0000000000000000000000000000000000000000..2809c5bdb9dffa0d27bd61abfa0bc97e55e7703b GIT binary patch literal 137844 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