CodeGeeX4/function_call_demo/README.md
2024-07-17 16:49:19 +08:00

4.8 KiB

English | Chinese

Function Call

The CodeGeeX4 model supports 'Function Call', which allows model to select one or multiple tools from the candidates based on the problem.

Usage Example

1. Install Dependencies

cd function_call_demo
pip install -r requirements.txt

2. Run the Script

python main.py
>>> [{"name": "weather", "arguments": {"location": "Beijing"}}]

Explanation

1. Single Call from Multiple Tools

In the example script, only one tool is provided as a candidate. However, you can also provide multiple tools as candidates as needed. Here is an example:

tool_content = {
    "function": [
        {
            "name": "weather",
            "description": "Use for searching weather at a specific location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "description": "the location need to check the weather",
                        "type": "str",
                    }
                },
                "required": [
                    "location"
                ]
            }
        },
        {
            "name": "Cooking/queryDish",
            "description": "Cooking API, providing cooking methods for different cuisines. It queries dish information based on specified parameters.",
            "parameters": {
                "type": "object",
                "properties": {
                    "cuisine": {
                        "description": "Specify the cuisine to be queried, such as Sichuan cuisine, Cantonese cuisine, Hunan cuisine."
                    },
                    "dish": {
                        "description": "Specify the name of the dish to be queried."
                    },
                    "difficulty": {
                        "description": "Specify the difficulty of the dish to be queried, such as beginner, intermediate, advanced."
                    }
                },
                "required": [
                    "cuisine"
                ]
            }
        }
    ]
}
response, _ = model.chat(
    tokenizer,
    query="How to make Kung-Pao Chicken",
    history=[{"role": "tool", "content": tool_content}],
    max_new_tokens=1024,
    temperature=0.1
)

The following result is obtained

[{'name': 'Cooking/queryDish', 'arguments': {'cuisine': 'Sichuan cuisine', 'dish': 'Kung-Pao Chicken'}}]

2. Multiple Calls from Multiple Tools

Additionally, for complex problems, the model has the ability to select and call multiple tools from the candidates. Here is an example:

tool_content = {
    "function": [
        {
            "name": "flight_book",
            "description": "Book a flight for a specific route and airlines",
            "parameters": {
                "type": "dict",
                "properties": {
                    "from": {
                        "type": "string",
                        "description": "The departure city in full name."
                    },
                    "to": {
                        "type": "string",
                        "description": "The arrival city in full name."
                    },
                    "airlines": {
                        "type": "string",
                        "description": "The preferred airline."
                    }
                },
                "required": [
                    "from",
                    "to",
                    "airlines"
                ]
            }
        },
        {
            "name": "hotel_book",
            "description": "Book a hotel for a specific location for the number of nights",
            "parameters": {
                "type": "dict",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city where the hotel is located."
                    },
                    "nights": {
                        "type": "integer",
                        "description": "Number of nights for the stay."
                    }
                },
                "required": [
                    "location",
                    "nights"
                ]
            }
        }
    ]
}
response, _ = model.chat(
    tokenizer,
    query="Book a flight from Seattle to Boston with American Airlines and book a hotel in Boston for 4 nights.",
    history=[{"role": "tool", "content": tool_content}],
    max_new_tokens=1024,
    temperature=0.1
)

The following result is obtained

[{'name': 'flight_book', 'arguments': {'from': 'Seattle', 'to': 'Boston', 'airlines': 'American Airlines'}}, {'name': 'hotel_book', 'arguments': {'location': 'Boston', 'nights': 4}}]