MySQL AI User Guide
The HEATWAVE_CHAT
routine automatically calls
the ML_RAG
routine which loads an LLM and
runs a semantic search on the available vector stores by
default. If the routine cannot find a vector store, then it
calls the ML_GENERATE
routine and uses
information available in LLM training data, which is primarily
information that is available in public data sources, to
generate a response for the entered query.
This topic contains the following sections:
mysql> CALL sys.HEATWAVE_CHAT('QueryInNaturalLanguage
');
The HEATWAVE_CHAT
routine accepts one input
parameter:
QueryInNaturalLanguage
:
specifies the query in natural language.
For specifying additional chat parameter settings, the
HEATWAVE_CHAT
routine reserves a variable,
@chat_options
. When you run the routine, it
also updates the @chat_options
variable
with any additional information that is used or collected by
the routine to generate the response.
Following is a list of all the parameters that you can set in
the @chat_options
variable:
Input only: you can set these parameters to control the chat behavior. The routine cannot change the values of these parameters.
schema_name
: specifies the name of
a schema. If set, the routine searches for vector
store tables in this schema. This parameter cannot be
used in combination with the tables
parameter. Default value is NULL
report_progress
: specifies whether
information such as routine progress detail is to be
reported. Default value is false
.
skip_generate
: specifies whether
response generation is skipped. If set to
true
, the routine does not generate
a response. Default value is false
.
return_prompt
: specifies whether to
return the prompt that was passed to the
ML_RAG
or
ML_GENERATE
routines. Default value
is false
.
re_run
: if set to
true
, it indicates that the request
is a re-run of the previous request. For example, a
re-run of a query with some different parameters. The
new query and response replaces the last entry stored
in the chat_history
parameter.
Default value is false
.
include_document_uris
: limits the
documents used for context retrieval by including only
the specified document URIs. Default value is
NULL
.
retrieve_top_k
: specifies the
context size. The default value is the value of the
n_citations
parameter of the
ML_RAG
routine. Possible values are integer values between
0
and 100
.
chat_query_id
: specifies the chat
query ID to be printed with the
chat_history
in the GUI. This
parameter is reserved for GUI use. By default, the
routine generates random IDs.
history_length
: specifies the
maximum history length, which is the number of
question and answers, to include in the chat history.
The specified value must be greater than or equal to
0
. Default value is
3
.
vector_store_columns
: optional
parameter which specifies column names for finding
relevant vector and embedding tables for context
retrieval as key-value pairs in JSON format. If
multiple tables contain columns with the same name and
data type, then all such tables are used for context
retrieval.
It can include the following parameters:
JSON_OBJECT('segment', 'SegmentColName
', 'segment_embedding', 'EmbeddingColName
'[,vsckeyvalue
]...)vsckeyvalue
: { 'document_name', 'DocumentName
' |'document_id',DocumentID
|'metadata', 'Metadata
' |'segment_number',SegmentNumber
}
segment
: specifies the name of
the mandatory string column that contains the text
segments. Default value is
segment
.
segment_embedding
: specifies
the name of the mandatory vector column that
contains vector embeddings of the text segments.
Default value is
segment_embedding
.
document_name
: specifies the
name of the optional column that contains the
document names. This column can be of any data
type supported by MySQL. Default value is
document_name
.
document_id
: specifies the name
of the optional integer column that contains the
document IDs. Default value is
document_id
.
metadata
: specifies the name of
the optional JSON column that contains additional
table metadata. Default value is
metadata
.
segment_number
: specifies the
name of the optional integer column that contains
the segment numbers. Default value is
segment_number
.
Default value is {"segment": "segment",
"segment_embedding": "segment_embedding",
"document_id: "document_id", "segment_number":
"segment_number", "metadata": "metadata"}
,
which means that by default, the routine uses the
default values of all column names to find relevant
tables for context retrieval.
embed_model_id
: specifies the
embedding model to use for embedding the input query.
The routine uses vector store tables and embedding
tables created using the same embedding model for
context retrieval. Default value is
multilingual-e5-small
.
To view the list of available embedding models, see In-Database Embedding Model.
retrieval_options
: specifies
optional context retrieval parameters as key-value
pairs in JSON format. If a parameter value in
retrieval_options
is set to
auto
, the default value for that
parameter is used.
It can include the following parameters:
JSON_OBJECT(retrievaloptkeyvalue
[,retrievaloptkeyvalue
]...)retrievaloptkeyvalue
: { 'max_distance',MaxDistance
|'percentage_distance',PercentageDistance
|'segment_overlap',SegmentOverlap
}
max_distance
: specifies a
maximum distance threshold for filtering out
segments from context retrieval. Segments for
which the distance from the input query exceeds
the specified maximum distance threshold are
excluded from content retrieval. This ensures that
only the segments that are closer to the input
query are included during context retrieval.
However, if no segments are found within the
specified distance, the routine fails to run.
If this parameter is set, the default value of
the n_citations
parameter is
automatically updated to 10
.
Default value is 0.6
for all
distance metrics.
Possible values are decimal values between
0
and
999999.9999
.
percentage_distance
: specifies
what percentage of distance to the nearest segment
is to be used to determine the maximum distance
threshold for filtering out segments from context
retrieval.
Following is the formula used for calculating the maximum distance threshold:
MaximumDistanceThreshold
=
DistanceOfInputQueryToNearestSegment
+ [(percentage_distance
/
100
) *
DistanceOfInputQueryToNearestSegment
]
Which means that the segments for which the distance to the input query exceeds the distance of the input query to the nearest segment by the specified percentage are filtered out from context retrieval.
If this parameter is set, the default value of
the n_citations
parameter is
automatically updated to 10
.
Default value is 20
for all
distance metrics.
Possible values are decimal values between
0
and
999999.9999
.
If both max_distance
and
percentage_distance
are set,
the smaller threshold value is considered for
filtering out the segments.
segment_overlap
: specifies the
number of additional segments adjacent to the
nearest segments to the input query to be included
in context retrieval. These additional segments
provide more continuous context for the input
query. Default value is 1
.
Possible values are integer values between
0
and 5
.
Input-output: both you and the routine can change the values of these parameters.
chat_history
: JSON array that
represents the current chat history. Default value is
NULL
.
Syntax for each object in the
chat_history
array is as follows:
JSON_OBJECT('key','value'[,'key','value'] ...) 'key','value': { ['user_message','Message
'] ['chat_bot_message','Message
'] ['chat_query_id','ID
'] }
Each parameter value in the array holds the following keys and their values:
user_message
: message entered
by the user.
chat_bot_message
: message
generated by the chat bot.
chat_query_id
: a query ID.
tables
: JSON array that represents
the following:
For providing input, represents the list of vector store schema or table names to consider for context retrieval.
As routine output, represents the list of discovered vector store tables, if any. Otherwise, it holds the same values as input.
Default value is NULL
.
Syntax for each object in the
tables
array is as follows:
JSON_OBJECT('key','value'[,'key','value'] ...) 'key','value': { ['schema_name','SchemaName
'] ['table_name','TableName
'] }
Each parameter values in the array holds the following keys and their values:
schema_name
: name of the
schema.
table_name
: name of the vector
store table.
task
: specifies the task performed
by the LLM. Default value is
generation
. Possible value is
generation
.
model_options
: optional model
parameters specified as key-value pairs in JSON
format. These are the same options that are available
in the
ML_GENERATE
routine, which alter the text-based response per the
specified settings. Default value is
'{"model_id":
"llama3.2-3b-instruct-v1"}'
.
Output only: only the routine can set or change values of these parameters.
info
: contains information messages
such as routine progress information. Default value is
NULL
. This parameter is populated
only if report_progress
is set to
true
.
error
: contains the error message
if an error occurred. Default value is
NULL
.
error_code
: contains the error code
if an error occurred. Default value is
NULL
.
prompt
: contains the prompt passed
to the ML_RAG
or
ML_GENERATE
routine. Default value
is NULL
. This parameter is
populated only if report_prompt
is
set to true
.
documents
: contains the names of
the documents as well as segments used as context by
the LLM for response generation. Default value is
NULL
.
request_completed
: set to
true
when a response is the last
response message to a request. Default value is
NULL
.
response
: contains the final
response from the routine. Default value is
NULL
.
Entering a natural-language query using the
HEATWAVE_CHAT
routine:
mysql> CALL sys.HEATWAVE_CHAT("What is Lakehouse?");
Modifying chat parameters using the
@chat_options
variable:
Modifying a chat parameter, tables
,
to specify the vector store table to use for context
retrieval in the next chat session:
mysql> SET @chat_options = '{"tables": [{"table_name": "demo_embeddings", "schema_name": "demo_db"}]}';
This example resets the chat session and uses the specified vector store table in the new chat session.
Modifying a chat parameter, tables
,
to specify the vector store table to use for context
retrieval in the same chat session:
mysql> SET @chat_options = JSON_SET(@chat_options,'$.tables', JSON_ARRAY(JSON_OBJECT("table_name", "demo_embeddings", "schema_name", "demo_db")));
This example uses the specified vector store table in the ongoing chat session. It does not reset the chat session.
Modifying a chat parameter,
temperature
, without resetting the
chat session:
mysql> SET @chat_options = json_set(@chat_options, '$.model_options.temperature', 0.5);
Viewing the chat parameters and session details:
mysql> SELECT JSON_PRETTY(@chat_options);
For more information about the output generated by this command, see Section 5.9.2, “Viewing Chat Session Details”.