From a12259429cd07fa94bff4fd300a3f6e055c025b6 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 1 Feb 2025 19:05:49 +0800 Subject: [PATCH] Add tool call system prompts for connectors without native tool support - Implemented system prompts for tool calls when connector settings disable native tool handling - Added JSON-formatted tool list and explicit rules for tool call processing - Included guidelines for tool call response formatting and function usage - Preserved existing tool prompts functionality --- neo/assistant/api.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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{}{