
? Framework d'application AI qui facilite l'appel avec LLM?
Explorez nos livres de cuisine pour les tutoriels et les exemples!
Discorde
Cahiers pour commencer:
Star nous sur github!
ActionWeaver s'efforce d'être le cadre de soupel de fonction le plus fiable, le plus convivial, haut débit et rentable pour les ingénieurs d'IA.
Caractéristiques:
Vous pouvez installer ActionWeaver à l'aide de PIP:
pip install actionweaver Utilisez la dernière API OpenAI qui prend en charge l'appel de fonction parallèle!
from actionweaver . llms import wrap
from openai import OpenAI
openai_client = wrap ( OpenAI ())ou en utilisant le service Azure Openai
import os
from openai import AzureOpenAI
azure_client = wrap ( AzureOpenAI (
azure_endpoint = os . getenv ( "AZURE_OPENAI_ENDPOINT" ),
api_key = os . getenv ( "AZURE_OPENAI_KEY" ),
api_version = "2023-10-01-preview"
))Le client enveloppé d'actionweaver gérera la boucle d'appel de fonction, qui comprend la réussite des descriptions de fonction, l'exécution des fonctions avec des arguments renvoyés par LLM et la gestion des exceptions.
Ce client exposera une API create construite sur l'API chat.completions.create originale. L'API create améliorée conservera tous les arguments d'origine et comprendra des paramètres supplémentaires tels que:
action : Fournir des actions disponibles à LLM.orch : Orchestrer des actions tout au long de la boucle d'appel de la fonction.exception_handler : un objet guidant la boucle d'appel de fonction sur la façon de gérer les exceptions. Ces arguments seront démontrés dans les sections suivantes. Ces arguments supplémentaires sont facultatifs, et il y a toujours l'option de secours pour accéder au client OpenAI d'origine via openai_client.client .
Remarque : une
actionreprésente un outil qui peut être utilisé par LLM. Chaque action comprend deux éléments principaux: un modèle pydatique qui est généré automatiquement pour faciliter l'incitation, et une fonction python conventionnelle.
Les développeurs peuvent attacher n'importe quelle fonction Python comme une action avec un simple décorateur. Dans l'exemple suivant, nous introduisons Action GetCurrentTime , puis utilisons pour utiliser l'API OpenAI pour l'invoquer.
Actionweaver utilise la signature et le docstring de la méthode décorée comme une description, les transmettant à l'API de fonction d'Openai. Le décorateur d'action est également très adaptable et peut être combiné avec d'autres décorateurs, à condition que la signature d'origine soit conservée.
from actionweaver import action
@ action ( name = "GetCurrentTime" )
def get_current_time () -> str :
"""
Use this for getting the current time in the specified time zone.
:return: A string representing the current time in the specified time zone.
"""
import datetime
current_time = datetime . datetime . now ()
return f"The current time is { current_time } "
# Ask LLM what time is it
response = openai_client . create (
model = "gpt-4o" ,
messages = [{ "role" : "user" , "content" : "what time is it" }],
actions = [ get_current_time ]
)Jetez un œil à ce qui passe à l'API Openai
get_current_weather . get_function_details ()
"""
{'name': 'GetWeather',
'description': 'Get the current weather in a given location',
'parameters': {'properties': {'location': {'title': 'Location'},
'unit': {'default': 'fahrenheit', 'title': 'Unit'}},
'required': ['location'],
'title': 'Get_Current_Weather',
'type': 'object'}}
""" Vous pouvez également obliger le modèle de langue pour exécuter l'action en appelant la méthode invoke d'une action. Ses arguments comprennent le client enveloppé d'actionweaver et d'autres arguments transmis à l'API Créer.
get_current_time . invoke ( openai_client , messages = [{ "role" : "user" , "content" : "what time is it" }], model = "gpt-3.5-turbo" , stream = False , force = True ) Vous pouvez créer un modèle pydante pour définir les données structurelles que vous souhaitez extraire, créer une action en utilisant action_from_model , puis forcer le modèle de langue à extraire des données structurées à partir d'informations dans l'invite.
from pydantic import BaseModel
from actionweaver . actions . factories . pydantic_model_to_action import action_from_model
class User ( BaseModel ):
name : str
age : int
action_from_model ( User , stop = True ). invoke ( client , messages = [{ "role" : "user" , "content" : "Tom is 31 years old" }], model = "gpt-3.5-turbo" , stream = False , force = False )Remarque : La propriété
stopd'une action, avec une valeur par défaut de False, détermine si la boucle d'appel de fonction renvoie immédiatement le résultat de l'action au lieu de le transmettre à LLM s'il est défini sur true.
Remarque : vous pouvez simultanément transmettre des actions générées à la fois à partir des fonctions et des modèles pydantiques.
ActionWeaver permet la conception des hiérarchies et des chaînes d'actions en transmettant un argument orch . orch est une cartographie des actions sous forme de clés des valeurs
Par exemple, disons que nous avons des actions A1, A2, A3.
client . create (
[
{ "role" : "user" , "content" : "message" }
],
actions = [ a1 , a2 , a3 ], # First, LLM respond with either a1, a2 or a3, or text without action
# Define the orchestration logic for actions:
orch = {
a1 . name : [ a2 , a3 ], # If a1 is invoked, the next response will be either a2, a3 or a text response.
a2 . name : a3 , # If a2 is invoked, the next action will be a3
a3 . name : [ a4 ] # If a3 is invoked, the next response will be a4 or a text response.
a4 . name : None # If a4 is invoked, the next response will guarantee to be a text message
}
) Les utilisateurs peuvent fournir une implémentation spécifique de ExceptionHandler, où la méthode handle_exception est invoquée lors de la rencontre d'une exception. Le paramètre info résume les détails contextuels tels que les messages et les réponses API dans un dictionnaire.
La méthode handle_exception dicte la ligne de conduite pour la boucle d'appel de fonction, renvoyant soit:
Return : fournir un contenu immédiat à l'utilisateurContinue : Instruire la boucle de procéder. from actionweaver . llms import ExceptionAction , ChatLoopInfo , Continue , Return
class ExceptionHandler ( ABC ):
"""Base class for exception handlers.
This class provides a framework for handling exceptions within the function calling loop.
"""
@ abstractmethod
def handle_exception ( self , e : Exception , info : ChatLoopInfo ) -> ExceptionAction :
passJetez un œil à cet exemple pour plus de détails.
Les contributions sous forme de corrections de bogues, de nouvelles fonctionnalités, d'améliorations de documentation et de demandes de traction sont très bienvenues.
Si vous trouvez ActionWeaver utile, veuillez envisager de citer le projet:
@software{Teng_Hu_ActionWeaver_2024,
author = {Teng Hu},
license = {Apache-2.0},
month = Aug,
title = {ActionWeaver: Application Framework for LLMs},
url = {https://github.com/TengHu/ActionWeaver},
year = {2024}
}