Project

func_bot

0.0
Repository is archived
FuncBot is a Rails gem built on top of the ruby-openai gem. It helps you create chatbots that can answer questions by calling on functions you define. It's goal is to provide a simple interface to consume OpenAI's Function Calling API.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

FuncBot

FuncBot is a Rails gem built on top of the ruby-openai gem. It allows you to easily create chatbots that can answer questions by calling on functions you define. It's goal is to provide a simple interface to consume OpenAI's Function Calling API.

Installation

Add this line to your application's Gemfile:

gem "func_bot"

And then execute:

$ bundle

Or install it yourself as:

$ gem install func_bot

Setup

rails func_bot:install
  • Make sure to add your OpenAI API key to your credentials file or update the config/initializers/openai.rb file accordingly.
openai:
  api_key: your-private-key

Usage

  • Generate a new function
rails g func_bot:function <function_name>
  • Update your new function in the list of functions in app/lib/func_bot/functions/list.yml.

    • This list of functions will be available to the bot with every request.
    • Adding good descriptions to the functions will help the bot infer when to use which function.
  • If the user asks a question that is not related to a function in your list, the bot will just ask ChatGPT.

  • A function can be as simple or as complex as you need it to be. Your bot will process the results and express them to the user.

  • All functions must have an execute method.

  • Here's a sample function that returns the current weather for the given location.

    module FuncBot
      module Functions
        class WeatherFunction < BaseFunction
          def execute
            weather_info = {
              location: parsed_response["location"],
              temperature: 98,
              forecast: ["sunny", "windy"]
            }
    
            JSON.dump(weather_info)
          end
        end
      end
    end
    • The parsed_response and response methods are available to all functions.

      • parsed_response is a hash that contains the response relevant to your function from OpenAI.
      • response is the raw response from OpenAI.
    • Functions also have access to the bot attribute which returns the instance of the bot that called the function.

      • This is useful if you need to access the bot's history or other methods.
      • There might be times when you need to ask gpt a question from within a function, but you don't want to trigger the functions again. You can set the bot.include_functions attribute to false before asking the question and then set it back to true after.

bin/rails c

irb(main):001:0> bot = FuncBot::Bot.new
=> #<FuncBot::Bot:0x0000000105ecd8e8 @history=#<FuncBot::Bots::History:0x0000000105ecd848 @history=[]>>
irb(main):002:0> bot.ask "What's the weather like in Miami, FL?"
=> "The current weather in Miami, FL is sunny and windy with a temperature of 98 degrees."
irb(main):003:0>
irb(main):006:0> bot.include_functions = false
=> false
irb(main):007:0> bot.ask "What's the weather like in Miami, FL today?"
=> "I'm sorry, I cannot provide real-time information as my responses are generated based on pre-existing data. Please check a reliable weather source for the most up-to-date information on the weather in Miami, FL."

Testing

cd spec/dummy
bin/setup
bundle exec rspec

Contributing

Contribution directions go here.

License

The gem is available as open source under the terms of the MIT License.