diff --git a/neo/assistant/api.go b/neo/assistant/api.go
index b64124ff..33ef8ec0 100644
--- a/neo/assistant/api.go
+++ b/neo/assistant/api.go
@@ -498,6 +498,33 @@ func (ast *Assistant) withPrompts(messages []chatMessage.Message) []chatMessage.
// Add tool_calls
if ast.Tools != nil && ast.Tools.Tools != nil && len(ast.Tools.Tools) > 0 {
if settings, has := connectorSettings[ast.Connector]; has && !settings.Tools {
+ raw, _ := jsoniter.MarshalToString(ast.Tools.Tools)
+ messages = append(messages, *chatMessage.New().Map(map[string]interface{}{
+ "role": "system",
+ "content": raw,
+ }))
+
+ // Add the default system prompts for tool calls
+ messages = append(messages, *chatMessage.New().Map(map[string]interface{}{
+ "role": "system",
+ "content": "## Tool Calls Match Rules:\n" +
+ "1. if the user's question is about the tool_calls, just answer one of the tool_calls, do not provide any additional information.\n" +
+ "2. if the user's question is not about the tool_calls, just answer the user's question directly.\n" +
+ "3. You can only use the functions defined in tool_calls. If none exist, reply directly to the user.",
+ }))
+ messages = append(messages, *chatMessage.New().Map(map[string]interface{}{
+ "role": "system",
+ "content": "## Tool Calls Response Rules:\n" +
+ "1. The response should be a valid JSON object.\n" +
+ "2. The JSON object should be wrapped by and .\n" +
+ "3. The structure of the JSON object is { \"arguments\": {...}, function:\"function_name\"}\n" +
+ "4. The function_name should be the name of the function defined in tool_calls.\n" +
+ "5. The arguments should be the arguments of the function defined in tool_calls.\n" +
+ "6. Do not add any additional information to the response.\n" +
+ "7. e.g: {\"arguments\":{\"assistant_id\":\"xxxx\"},\"function\":\"select_assistant\"}",
+ }))
+
+ // Add tool_calls prompts
if ast.Tools.Prompts != nil && len(ast.Tools.Prompts) > 0 {
for _, prompt := range ast.Tools.Prompts {
messages = append(messages, *chatMessage.New().Map(map[string]interface{}{