diff --git a/bootcamp/tutorials/integration/function_calling.ipynb b/bootcamp/tutorials/integration/function_calling.ipynb new file mode 100644 index 000000000..1f256ebc8 --- /dev/null +++ b/bootcamp/tutorials/integration/function_calling.ipynb @@ -0,0 +1,450 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a44d29dd-ae02-4180-a59c-ff4e6965b7f2", + "metadata": {}, + "source": [ + "# Function Calling with Ollama, Llama 3.1 and Milvus\n", + "\n", + "Function calling with LLMs is like giving your AI the power to connect with the world. By integrating your LLM with external tools such as user-defined functions or APIs, you can build applications that solve real-world problems." + ] + }, + { + "cell_type": "markdown", + "id": "f6486026-7af1-4ee8-9a9f-6efdb1a3fac9", + "metadata": {}, + "source": [ + "# Milvus Lite \n", + "\n", + "Milvus Lite is the lightweight version of Milvus, a high-performance vector database that powers AI applications with vector similarity search.\n", + "\n", + "Milvus Lite shares the same API with Milvus Standalone and Distributed, and covers most of the features such as vector data persistence and management, vector CRUD operations, sparse and dense vector search, metadata filtering, multi-vector and hybrid_search.\n", + "\n", + "# Ollama\n", + "\n", + "Run different LLMs on your laptop, simplifying local operation.\n", + "\n", + "### Check out Github on: https://github.com/milvus-io/milvus" + ] + }, + { + "attachments": { + "20e9f4f0-727d-4f2d-b1a4-9982ad6dc294.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABlwAAAJiCAIAAAAt1/i4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAGXKADAAQAAAABAAACYgAAAAA8rdJ2AABAAElEQVR4Aezd3col1aEv/FpBAwqxzQfoAoNpDwzohm4hOUhgR00O9j54Qb0C9Qpsr0C9AtsrsPsK1LP1wlqvmgXxYAXshq0QD2xdCltBo+2BQgz4/qsrmf34fMxnftQY9fUrGp3P88xZNcZv1KyPf40a9S/fffddYyJAgAABAgQIECBAgAABAgQIECCwJIEfLKmy6kqAAAECBAgQIECAAAECBAgQIECgFRCKWQ8IECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIEBCKWQcIECBAgAABAgQIECBAgAABAgQWJyAUW1yTqzABAgQIECBAgAABAgQIECBAgIBQzDpAgAABAgQIECBAgAABAgQIECCwOAGh2OKaXIUJECBAgAABAgQIECBAgAABAgSEYtYBAgQIECBAgAABAgQIECBAgACBxQkIxRbX5CpMgAABAgQIECBAgAABAgQIECAgFLMOECBAgAABAgQIECBAgAABAgQILE5AKLa4JldhAgQIECBAgAABAgQIECBAgAABoZh1gAABAgQIECBAgAABAgQIECBAYHECQrHFNbkKEyBAgAABAgQIECBAgAABAgQICMWsAwQIECBAgAABAgQIECBAgAABAosTEIotrslVmAABAgQIECBAgAABAgQIECBAQChmHSBAgAABAgQIECBAgAABAgQIEFicgFBscU2uwgQIECBAgAABAgQIECBAgAABAkIx6wABAgQIECBAgAABAgQIECBAgMDiBIRii2tyFSZAgAABAgQIECBAgAABAgQIELgFAYFlCnzwdfPl35vuvxH48OuWIT+umX5xe/vHO29pzvyw+cVt7ev8t/tl+4OJAAECBAgQIECAAAECBAgQmI6AUGw6baWkOwl0ydeVr5or15vr3zZ50f1mp5kd/6HEZInG7ry1OXdHc/a25tyZ9vX5O45/s98SIECAAAECBAgQIECAAAECYxD4l++++24M5VAGAn0JpLfXG39tI7APv2ne+KyNwAaZkpSdP3MzJnvkp4OUwkIJECBAgAABAgQIECBAgACB4wWEYse7+O2EBBJ7JQJ78/Pmjc/bF0OlYKeKJRdLV7L8N2FZd/flqR/xBgIECBAgQIAAAQIECBAgQKCQgFCsEKzZFhdIBNYFYXkxuSk3V+bfY3c3j/ysHaTMRIAAAQIECBAgQIAAAQIECFQWEIpVBre4vQTSC+zVT5o3P2v/O9oeYdvWMH3HHr+reexfdR/bVs77CRAgQIAAAQIECBAgQIDA7gJCsd3tfLKaQPKvy//dvPppe4PkjKf0HXv4p82F+6RjM25kVSNAgAABAgQIECBAgACBsQgIxcbSEspxVKDrF3b5o5lnYUcrnnTswtnm4Z9Jx47a+A0BAgQIECBAgAABAgQIEOhHQCjWj6O59CuQHmG5QTJx2GzukdzNJ3dWPnVP8+TPd/u0TxEgQIAAAQIECBAgQIAAAQInCgjFTqTxh/oCC7lNclvYPKoy6dhzv9RxbFs57ydAgAABAgQIECBAgAABAicKCMVOpPGHmgIffNP2C7v4/tK7hq03f/zu5pmz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fGQBkfiTAAECBAgQIECgFLgyXDYBAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvDrTmAkAAARjSURBVMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUcIotrqITAQIECBAgQIAAAQIECBAgQIBAKuAUS3mFEyBAgAABAgQIECBAgAABAgQILAo4xRZX0YkAAQIECBAgQIAAAQIECBAgQCAVcIqlvMIJECBAgAABAgQIECBAgAABAgQWBZxii6voRIAAAQIECBAgQIAAAQIECBAgkAo4xVJe4QQIECBAgAABAgQIECBAgAABAosCTrHFVXQiQIAAAQIECBAgQIAAAQIECBBIBZxiKa9wAgQIECBAgAABAgQIECBAgACBRQGn2OIqOhEgQIAAAQIECBAgQIAAAQIECKQCTrGUVzgBAgQIECBAgAABAgQIECBAgMCigFNscRWdCBAgQIAAAQIECBAgQIAAAQIEUgGnWMornAABAgQIECBAgAABAgQIECBAYFHAKba4ik4ECBAgQIAAAQIECBAgQIAAAQKpgFMs5RVOgAABAgQIECBAgAABAgQIECCwKOAUW1xFJwIECBAgQIAAAQIECBAgQIAAgVTAKZbyCidAgAABAgQIECBAgAABAgQIEFgUeD5ludDNigvyAAAAAElFTkSuQmCC" + } + }, + "cell_type": "markdown", + "id": "b6729b87-f8cb-4c92-bd2f-46e776279d7c", + "metadata": {}, + "source": [ + "![image.png](attachment:20e9f4f0-727d-4f2d-b1a4-9982ad6dc294.png)" + ] + }, + { + "cell_type": "markdown", + "id": "6012963b-e122-4af4-80e7-4899b3eb163e", + "metadata": {}, + "source": [ + "# Download Llama3.1 with Ollama \n", + "\n", + "Run in your terminal: `ollama run llama3.1`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6448353d-a7fa-4399-89bf-2124e39b2ec8", + "metadata": {}, + "outputs": [], + "source": [ + "! pip install -U ollama openai \"pymilvus[model]\"" + ] + }, + { + "cell_type": "markdown", + "id": "d2571b84-67af-47a6-8ed7-1b98f23ed640", + "metadata": {}, + "source": [ + "# Create Embeddings\n", + "\n", + "Milvus, with the `model` subpackage, supports the generation of Embeddings. By integrating mainstream embedding models, you can easily transform original text into searchable vectors or rerank the results using powerful models to achieve more accurate results for RAG." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8b5d397c-ff67-4891-a32a-b5c3da0fcdb8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dim: 768 (768,)\n", + "Data has 3 entities, each with fields: dict_keys(['id', 'vector', 'text', 'subject'])\n", + "Vector dim: 768\n" + ] + } + ], + "source": [ + "import random\n", + "from pymilvus import model\n", + "\n", + "docs = [\n", + " \"Artificial intelligence was founded as an academic discipline in 1956.\",\n", + " \"Alan Turing was the first person to conduct substantial research in AI.\",\n", + " \"Born in Maida Vale, London, Turing was raised in southern England.\",\n", + "]\n", + "\n", + "embedding_fn = model.DefaultEmbeddingFunction() # all-MiniLM-L6-v2 by default\n", + "\n", + "vectors = embedding_fn.encode_documents(docs)\n", + "\n", + "# The output vector has 768 dimensions, matching the collection that we just created.\n", + "print(\"Dim:\", embedding_fn.dim, vectors[0].shape) # Dim: 768 (768,)\n", + "\n", + "# Each entity has id, vector representation, raw text, and a subject label that we use\n", + "# to demo metadata filtering later.\n", + "data = [\n", + " {\"id\": i, \"vector\": vectors[i], \"text\": docs[i], \"subject\": \"history\"}\n", + " for i in range(len(vectors))\n", + "]\n", + "\n", + "print(\"Data has\", len(data), \"entities, each with fields: \", data[0].keys())\n", + "print(\"Vector dim:\", len(data[0][\"vector\"]))\n" + ] + }, + { + "cell_type": "markdown", + "id": "33257be6-d444-495d-8188-bcdb61031c95", + "metadata": {}, + "source": [ + "# Insert the data in Milvus\n", + "\n", + "Our data has been transformed into vectors now, we can insert it into Milvus. By doing so, we can then have access to it, search it and this is what our Agent will do. " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e436489d-eede-4b20-981a-d61327822d30", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'insert_count': 3, 'ids': [0, 1, 2], 'cost': 0}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pymilvus import MilvusClient\n", + "\n", + "client = MilvusClient('./milvus_local.db')\n", + "\n", + "if client.has_collection('demo_collection'):\n", + " client.drop_collection('demo_collection')\n", + " \n", + "client.create_collection(\n", + " collection_name=\"demo_collection\",\n", + " dimension=768, # The vectors we will use in this demo has 768 dimensions\n", + ")\n", + "\n", + "client.insert(collection_name=\"demo_collection\", data=data)\n" + ] + }, + { + "cell_type": "markdown", + "id": "f05169f6-1f47-4fbf-8d44-c91acda01839", + "metadata": {}, + "source": [ + "# Define the functions!\n", + "\n", + "Being able to use tools makes it possible for LLMs to perform more complex tasks and interact with the outside world.\n", + "\n", + "In this tutorial, we're defining two functions. The first one simulates an API call to get flight times. The second one runs a search query in Milvus.\n", + "\n", + "When defining a function that can be called by an LLM, the description of the function matters significantely, it can help with: \n", + "* **Understanding Functionality** - The description explains what the function does, the parameters it expects, and the type of output it returns. \n", + "* **Matching Intent** - When a user makes a request, the LLM uses the function descriptions to match the user's intent with the appropriate function.\n", + "* **Parameter Handling** - This helps the LLM extract the necessary information from the user's input to correctly call the function." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "f990f1d7-d68b-47c2-9552-daa78cc41d70", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import ollama\n", + "\n", + "# Simulates an API call to get flight times\n", + "# In a real application, this would fetch data from a live database or API\n", + "def get_flight_times(departure: str, arrival: str) -> str:\n", + " flights = {\n", + " 'NYC-LAX': {'departure': '08:00 AM', 'arrival': '11:30 AM', 'duration': '5h 30m'},\n", + " 'LAX-NYC': {'departure': '02:00 PM', 'arrival': '10:30 PM', 'duration': '5h 30m'},\n", + " 'LHR-JFK': {'departure': '10:00 AM', 'arrival': '01:00 PM', 'duration': '8h 00m'},\n", + " 'JFK-LHR': {'departure': '09:00 PM', 'arrival': '09:00 AM', 'duration': '7h 00m'},\n", + " 'CDG-DXB': {'departure': '11:00 AM', 'arrival': '08:00 PM', 'duration': '6h 00m'},\n", + " 'DXB-CDG': {'departure': '03:00 AM', 'arrival': '07:30 AM', 'duration': '7h 30m'},\n", + " }\n", + "\n", + " key = f'{departure}-{arrival}'.upper()\n", + " return json.dumps(flights.get(key, {'error': 'Flight not found'}))\n", + "\n", + "# Search data related to Artificial Intelligence in a vector database\n", + "def search_data_in_vector_db(query: str) -> str:\n", + " query_vectors = embedding_fn.encode_queries([query])\n", + "\n", + " res = client.search(\n", + " collection_name=\"demo_collection\",\n", + " data=query_vectors,\n", + " limit=2,\n", + " output_fields=[\"text\", \"subject\"], # specifies fields to be returned\n", + " )\n", + " print(res)\n", + " return json.dumps(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "4982d3ed-d0db-433b-894a-6cf061ed4fca", + "metadata": {}, + "outputs": [], + "source": [ + "def run(model: str, question: str):\n", + " client = ollama.Client()\n", + " # Initialize conversation with a user query\n", + " messages = [{'role': 'user', 'content': question}]\n", + "\n", + " # First API call: Send the query and function description to the model\n", + " response = client.chat(\n", + " model=model,\n", + " messages=messages,\n", + " tools=[\n", + " {\n", + " 'type': 'function',\n", + " 'function': {\n", + " 'name': 'get_flight_times',\n", + " 'description': 'Get the flight times between two cities',\n", + " 'parameters': {\n", + " 'type': 'object',\n", + " 'properties': {\n", + " 'departure': {\n", + " 'type': 'string',\n", + " 'description': 'The departure city (airport code)',\n", + " },\n", + " 'arrival': {\n", + " 'type': 'string',\n", + " 'description': 'The arrival city (airport code)',\n", + " },\n", + " },\n", + " 'required': ['departure', 'arrival'],\n", + " },\n", + " },\n", + " },\n", + " {\n", + " 'type': 'function',\n", + " 'function': {\n", + " 'name': 'search_data_in_vector_db',\n", + " 'description': 'Search about Artificial Intelligence data in a vector database',\n", + " 'parameters': {\n", + " 'type': 'object',\n", + " 'properties': {\n", + " 'query': {\n", + " 'type': 'string',\n", + " 'description': 'The search query',\n", + " },\n", + " },\n", + " 'required': ['query'],\n", + " },\n", + " },\n", + " },\n", + " ],\n", + " )\n", + "\n", + " # Add the model's response to the conversation history\n", + " messages.append(response['message'])\n", + "\n", + " # Check if the model decided to use the provided function\n", + " if not response['message'].get('tool_calls'):\n", + " print(\"The model didn't use the function. Its response was:\")\n", + " print(response['message']['content'])\n", + " return\n", + "\n", + " # Process function calls made by the model\n", + " if response['message'].get('tool_calls'):\n", + " available_functions = {\n", + " 'get_flight_times': get_flight_times,\n", + " 'search_data_in_vector_db': search_data_in_vector_db,\n", + " }\n", + " for tool in response['message']['tool_calls']:\n", + " function_to_call = available_functions[tool['function']['name']]\n", + " function_args = tool['function']['arguments']\n", + " function_response = function_to_call(**function_args)\n", + " # Add function response to the conversation\n", + " messages.append(\n", + " {\n", + " 'role': 'tool',\n", + " 'content': function_response,\n", + " }\n", + " )\n", + " \n", + " print(messages)\n", + " # Second API call: Get final response from the model\n", + " final_response = client.chat(model=model, messages=messages)\n", + " print(final_response['message']['content'])" + ] + }, + { + "cell_type": "markdown", + "id": "a51b8822-b9ee-406a-8ed3-21ae68fca8c9", + "metadata": {}, + "source": [ + "# Examples\n", + "\n", + "In the examples below, you will see the Agent in action: \n", + "1. Pass the content to the LLM\n", + "2. The LLM picks the right function to call\n", + "3. Infers the arguments needed to call the function\n", + "4. Get the result from the said function\n", + "5. Generate some text based on the answer of the tool.\n", + "\n", + "### First example\n", + "In the first example, we ask: `What is the flight time from New York (NYC) to Los Angeles (LAX)?`. We can see that we call the function `get_flight_times()`, with the arguments `{'arrival': 'LAX', 'departure': 'NYC'}`. \n", + "We get the `content` as a return `{\"departure\": \"08:00 AM\", \"arrival\": \"11:30 AM\", \"duration\": \"5h 30m\"}`. \n", + "\n", + "Then, this is given to the LLM, and it can generate the text we have below, saying that it takes approximately 5 hours and 30 minutes.\n", + "\n", + "### Second Example\n", + "In the second one, we ask `What is Artificial Intelligence?`. This is stored in Milvus, so the LLM picks the `search_data_in_vector_db` with the query `Artificial Intelligence`, we then get a result from Milvus saying: `Artificial intelligence was founded as an academic discipline in 1956`. \n", + "Finally, we give this result back to our LLM, which then generates quick a long text with the result we just got back.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "a056688a-8400-4211-92b6-decbd6787140", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'role': 'user', 'content': 'What is the flight time from New York (NYC) to Los Angeles (LAX)?'}, {'role': 'assistant', 'content': '', 'tool_calls': [{'function': {'name': 'get_flight_times', 'arguments': {'arrival': 'LAX', 'departure': 'NYC'}}}]}, {'role': 'tool', 'content': '{\"departure\": \"08:00 AM\", \"arrival\": \"11:30 AM\", \"duration\": \"5h 30m\"}'}]\n", + "The flight time from New York (NYC) to Los Angeles (LAX) is approximately 5 hours and 30 minutes. However, please note that this can vary depending on several factors such as the airline, flight schedule, and any potential layovers or delays.\n", + "\n", + "In reality, flights from NYC to LAX typically take around 5-6 hours with no stops, but it's always best to check with your airline or a flight search engine for the most up-to-date and accurate information.\n" + ] + } + ], + "source": [ + "question = \"What is the flight time from New York (NYC) to Los Angeles (LAX)?\"\n", + "run('llama3.1', question)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "17edd602-bb6b-4a8c-9fa5-cd87f1c0bde6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "data: [\"[{'id': 0, 'distance': 0.4702666699886322, 'entity': {'text': 'Artificial intelligence was founded as an academic discipline in 1956.', 'subject': 'history'}}, {'id': 1, 'distance': 0.2702862620353699, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.', 'subject': 'history'}}]\"] , extra_info: {'cost': 0}\n", + "[{'role': 'user', 'content': 'What is Artificial Intelligence?'}, {'role': 'assistant', 'content': '', 'tool_calls': [{'function': {'name': 'search_data_in_vector_db', 'arguments': {'query': 'Artificial Intelligence'}}}]}, {'role': 'tool', 'content': '[[{\"id\": 0, \"distance\": 0.4702666699886322, \"entity\": {\"text\": \"Artificial intelligence was founded as an academic discipline in 1956.\", \"subject\": \"history\"}}, {\"id\": 1, \"distance\": 0.2702862620353699, \"entity\": {\"text\": \"Alan Turing was the first person to conduct substantial research in AI.\", \"subject\": \"history\"}}]]'}]\n", + "Artificial Intelligence (AI) refers to the development of computer systems that can perform tasks that typically require human intelligence, such as visual perception, speech recognition, decision-making, and language translation. AI systems use algorithms and data to make decisions or take actions without being explicitly programmed to do so.\n", + "\n", + "In simpler terms, AI is a type of computer science that enables machines to think and learn like humans, but with the ability to process vast amounts of data and perform tasks much faster than humans. This technology has many applications in various fields, including healthcare, finance, education, and transportation, among others.\n", + "\n", + "Some common examples of AI include:\n", + "\n", + "1. Virtual assistants, such as Siri or Alexa\n", + "2. Image recognition software used by social media platforms to tag photos\n", + "3. Self-driving cars and drones\n", + "4. Chatbots that can have basic conversations with humans\n", + "5. Personalized product recommendations on e-commerce websites\n", + "\n", + "Artificial Intelligence has its roots in the 1950s, when computer scientists began exploring ways to create machines that could think and learn like humans. The field has since evolved significantly, with advancements in machine learning algorithms, natural language processing, and other areas leading to the development of more sophisticated AI systems.\n", + "\n", + "Overall, Artificial Intelligence is a rapidly growing field that has the potential to transform many aspects of our lives, making them easier, faster, and more efficient.\n" + ] + } + ], + "source": [ + "question = \"What is Artificial Intelligence?\"\n", + "run('llama3.1', question)" + ] + }, + { + "attachments": { + "e1c1a891-e60e-4842-b859-b2afda130455.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "710fe879-0a93-406b-8100-cd6ff838c78d", + "metadata": {}, + "source": [ + "# ⭐️ Github\n", + "\n", + "We hope you liked this tutorial showcasing how to use Function Calling using Ollama, Llama 3.1 and Milvus. \n", + "\n", + "If you liked it and our project, please **give us a star on [Github](https://github.com/milvus-io/milvus)!** ⭐\n", + "\n", + "![image.png](attachment:e1c1a891-e60e-4842-b859-b2afda130455.png)" + ] + }, + { + "attachments": { + "ce2c8e23-d563-4260-9c40-0b2f05f9ed23.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "4eebc8b7-c771-464b-aa18-628d1105e49e", + "metadata": {}, + "source": [ + "# 🤝 Add me on Linkedin!\n", + "If you have some questions related to Milvus, GenAI, etc, I am Stephen Batifol, you can add me on [LinkedIn](https://www.linkedin.com/in/stephen-batifol/) and I'll gladly help you. \n", + "\n", + "![image.png](attachment:ce2c8e23-d563-4260-9c40-0b2f05f9ed23.png)\n", + "\n", + "\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}