Skip to content

From Prompts to Partners: How Gemini Pro’s Function Calling Ushers in the Era of Autonomous AI Agents

For developers and AI enthusiasts eager to explore the cutting edge, Gemini Pro has emerged as a beacon of innovation. While its language modelling capabilities are formidable, it's the introduction of function calling that truly redefines interaction paradigms. This blog post delves into the technical details of this game-changer, moving beyond hype to dissect its mechanics and transformative potential.

Google Cloud

Forget the limitations of vanilla prompt-based models. Function calling empowers a shift from passive recipient to active collaborator. By integrating external functions via API calls, Gemini Pro goes beyond text generation, operating as a programmable assistant. Imagine crafting code without writing it line by line, or generating data-driven insights without manual manipulation. This is the future envisioned by function calling.

But how does it function under the hood? We’ll dissect the key features:

  • Function description and arguments: Dive into the format and structure used to define the capabilities of external functions.
  • Integration with tools and memory: Explore how Gemini Pro utilises existing code and data to augment responses.
  • Dynamic output generation: Understand how function results are incorporated into the final language output.

This technical deep dive will illuminate the inner workings of this revolutionary feature, equipping you with the knowledge to leverage its power in your own applications. Stay tuned as we unveil the technical nuances of function calling using Langchain, unlocking its potential to transform AI development and interaction.

What is function calling? What are autonomous agents?

Function calling in Gemini Pro represents a paradigm shift from traditional prompt-based interactions with AI. Instead of simply feeding text prompts and receiving textual responses, function calling empowers you to incorporate external functionalities within the language generation process. Imagine these functions as specialised tools in your AI assistant’s toolbox. They can access data, perform calculations, interact with other systems, all while seamlessly integrated into the conversation flow. This dynamic exchange unlocks the potential for autonomous agents: No longer confined to scripted responses, these agents can leverage their access to tools and information to proactively suggest solutions, fulfil requests, and even learn and adapt over time. It’s a revolutionary step towards AI that acts as a true partner, understanding your needs and taking initiative to achieve your goals.

Compared to traditional prompt-based models or RAG systems that simply manipulate prompts, function calling in Gemini Pro represents a big paradigm shift. It goes beyond text-only interactions by introducing external tools and APIs, akin to granting your AI assistant specialised abilities. This shift empowers not just dynamic responses, but autonomous action: the AI can access data, execute code, and even interact with other systems, fundamentally changing how we collaborate with AI. It’s the difference between giving instructions and having a partner who understands your goals and proactively takes steps to achieve them.

Eager to unlock the transformative power of function calling in Gemini Pro? This guide delves into its practical implementation using Langchain. We’ll shed the hype and equip you with the technical know-how to empower your AI assistant with autonomous capabilities, leaving the sales pitches behind.

Function description and arguments

Remember those specialised tools we mentioned earlier? Here’s where we get our hands dirty and define them using Langchain. In essence, you’re equipping your AI assistant with a toolbox, each tool representing a specific function it can call upon. Let’s explore the key elements involved:

  1. Name and Description: Give your tool a clear and concise name that reflects its purpose. Provide a detailed description explaining what the tool does and when it should be used. This guides both you and the AI in identifying relevant situations.
  2. Tool Implementation: Think of arguments as the inputs your tool needs to operate. Define them clearly, specifying their data types (e.g., text, number, list) and any limitations or constraints. Remember, your AI assistant uses these arguments to understand what information to feed the tool. So, be precise!
  3. Tool Implementation: This is where the magic happens! You’ll define the actual logic of your tool using Python code. Think of it as the recipe your assistant follows to utilise the tool effectively.

Langchain offers several mechanisms for implementing tools, including function decorators and subclassing the BaseTool class. Choose the approach that best suits your tool’s complexity and your personal preference.

Remember: Clarity is key! The more clearly you define your tools, the better your AI assistant understands how to leverage them efficiently.

Here is a very simple tool implementation:

Here’s a crucial point: the possibilities for tools are boundless! They can encompass API calls to external services, database interactions to retrieve and store information, custom business logic to automate tasks, or even creative code generation to produce text, music, or art. The scope of your AI assistant’s capabilities expands with each tool you add to its arsenal.

Integration with tools and memory

Now that we’ve crafted our tools, it’s time to connect them to your AI assistant in Gemini Pro. This is where Langchain’s agent executor steps in, acting as the central hub that coordinates interactions between your prompt, tools, and the final response. Let’s explore the key elements involved:

  1. Agent Executor: Imagine the agent executor as a conductor, orchestrating the flow of information. It receives your prompt, identifies any relevant tools based on predefined conditions, and feeds them necessary arguments. Langchain provides various configuration options to customise this process, allowing you to specify how and when specific tools are activated.
  2. Tool Connection: This is where the magic of function calling truly unfolds. When a tool is triggered, the agent executor seamlessly integrates its output back into the response generation process. It’s as if your AI assistant consults its toolbox, uses the right tool for the job, and incorporates the result into its response, all without you needing to manually intervene.
  3. Memory Management: But what if your tool needs to remember something from past interactions? That’s where memory comes in. Langchain allows you to define and manage memory states within your agent, enabling your AI assistant to learn and adapt over time. Imagine your assistant remembering user preferences or storing intermediate results – this empowers it to deliver more personalised and context-aware responses.

Remember: Integration is key! The smoother the connection between your prompt, tools, and memory, the more sophisticated and autonomous your AI assistant becomes.

Now, concretely, let’s start building the AgentExecutor, it serves as the link between our agent, the tools, and a memory:

The next step is to build the memory. For that, the ConversationSummaryBufferMemory class comes in handy, as it automatically summarises the overflowing information so that your prompt never exceeds the model’s input token limit:

The “chat_memory” parameter needs to be a regular Langchain ChatMessageHistory instance. While for the choice of Large Language Model, we opt for Google’s latest and greatest Gemini Pro:

Then, we need to effectively build our agent:

We first need to bind our tools to Gemini Pro, using the “bind” method. Then, our agent is a suite of:

  1. Preparing the input variables to be in the right format
    For this, we have:
    message, the actual input from the user.
    chat_history, the history, fed by our ConversationSummaryBufferMemory.
    agent_scratchpad, the notebook of our agent. Note that we need to format the AgentExecutor’s intermediate steps into a specific schema, which needs to be performed by the format_to_openai_function_messages function (hopefully, this function should be renamed soon).
  2. Our chat prompt should be pretty straightforward, the only difference being that you need two placeholders: one for the chat history, one for the agent’s scratchpad. Here is an example of chat prompt:

    Please note that Gemini Pro does not currently support SystemMessagePromptTemplate, hence why we use a HumanMessagePromptTemplate. 
  3. Our large language model with tools binded. 
  4. A custom output parser. This serves to interpret the API answer from Gemini Pro, and effectively execute the desired function, or answer to the user. This part is described in the following section.

Dynamic output generation

With the parsed response in hand, it’s time to weave the magic of our tools and memory into the final output. Let’s explore how Gemini Pro dynamically integrates these elements to deliver intelligent and context-aware responses.

This part is a bit tricky. In normal times, you should use the PydanticFunctionsOutputParser class to parse the output of your agent, and decide what action to take next. Because the feature is very recent, it unfortunately does not work yet. For this reason, we had to dig into the integration tests of Langchain, and come up with the following (slightly adapted) custom output parser:

As you can see, this output parser either invokes the function selected by Gemini Pro with the correct parameters, and logs it into the scratchpad. Or, it will give its final answer to the user.

We’ve embarked on a journey through the intricacies of function calling in Gemini Pro, unveiling its potential to revolutionise AI interactions. This paradigm shift transcends mere prompt-based systems, empowering us to create autonomous, tools-based agents: intelligent partners capable of leveraging external functionalities to fulfil tasks and solve problems.

Imagine the possibilities:

  • Seamlessly combine outputs from complex systems: Forget the tedious integration work. Gemini Pro effortlessly harmonises the outputs of diverse systems, delivering unified solutions and saving precious development time.
  • Unparalleled personalization and user experience: Tailor interactions to individual needs and preferences by dynamically incorporating user data and context through tool calls. Imagine AI assistants that truly understand you and anticipate your requirements.
  • Collaborative multi-agent systems: Foster intelligent collaboration between multiple AI agents, each equipped with specialised tools and expertise. Orchestrate complex tasks and decision-making processes with unprecedented efficiency.

This glimpse into the future of AI is closer than you think. Ready to experience the power of Gemini Pro and build your own autonomous agents? Contact Devoteam G Cloud today for a personalised demo showcasing Gemini Pro, autonomous agents, and the possibilities of multi-agent collaboration. We’ll guide you on this transformative journey and help you unlock the boundless potential of AI.

Unlock AI’s potential

Contact our experts to leverage Gemini Pro’s autonomous agents for your organisation.


Cyril Maréchal

ML Tribe Presales Lead

Cyril is an engineer with a lifelong passion for making things happen. Since his youngest age, the drive to build concrete solutions from the ground up has helped him develop strong analytical and technological skills in low-resource, entrepreneurial environments. Ambitious, hardworking, and outgoing are the three principal traits that push him to deliver impactful changes. In his current capacity as a Lead Machine Learning engineer, Cyril continues to demonstrate his prowess in the technical domain. His exceptional abilities were recognized through the prestigious Google Cloud BeNeLux Most Certified Individual Contributor awards for both 2022 and 2023. Additionally, Cyril spearheads the presales operations for machine learning at Devoteam G Cloud, overseeing operations across the EMEA region.