
? Структура приложения AI, которая облегчает вызов функции с LLM?
Исследуйте наши кулинарные книги для учебных пособий и примеров!
Раздор
Записные книжки для начала:
Сыграйте нас на GitHub!
Actionweaver стремится быть наиболее надежной, удобной, высокоскоростной и экономически эффективной структурой для инженеров ИИ.
Функции:
Вы можете установить ActionWeaver с помощью PIP:
pip install actionweaver Используйте новейший API OpenAI, который поддерживает параллельные функции!
from actionweaver . llms import wrap
from openai import OpenAI
openai_client = wrap ( OpenAI ())или с помощью Azure Openai Service
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"
))Обернутый клиент ActionWeaver будет управлять циклом вызова функции, который включает в себя передачу описаний функций, выполнение функций с аргументами, возвращаемыми LLM, и обработки исключений.
Этот клиент выставит API create API, построенный на оригинальном API chat.completions.create . Enhanced create API сохранит все исходные аргументы и включают дополнительные параметры, такие как:
action : предоставление доступных действий для LLM.orch : оркестрации действий на протяжении всей функции вызовой петли.exception_handler : объект, направляющий петлю вызова функции о том, как обрабатывать исключения. Эти аргументы будут продемонстрированы в последующих разделах. Эти дополнительные аргументы являются необязательными, и всегда есть вариант отступления, чтобы получить доступ к оригинальному клиенту Openai через openai_client.client .
Примечание .
actionпредставляет собой инструмент, который может использоваться LLM. Каждое действие включает в себя два основных элемента: пиддантская модель, которая создается автоматически для облегчения подсказки, и обычная функция Python.
Разработчики могут прикрепить любую функцию Python в качестве действия с простым декоратором. В следующем примере мы вводим Action GetCurrentTime , а затем приступаем к использованию API OpenAI, чтобы вызвать его.
ActionWeaver использует подпись и Docstring оформленного метода в качестве описания, передавая их в API функции OpenAI. Декоратор действий также очень адаптируется и может сочетаться с другими декораторами, при условии, что оригинальная подпись сохранилась.
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 ]
)Посмотрите, что проходит в 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'}}
""" Вы также можете заставить языковую модель выполнить действие, invoke метод действия. Его аргументы включают клиента с облеганием ActionWeaver и другие аргументы, передаваемые API Create.
get_current_time . invoke ( openai_client , messages = [{ "role" : "user" , "content" : "what time is it" }], model = "gpt-3.5-turbo" , stream = False , force = True ) Вы можете создать модель Pydantic для определения структурных данных, которые вы хотите извлечь, создать действие, используя action_from_model , а затем заставить языковую модель извлекать структурированные данные из информации в приглашении.
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 )Примечание . Свойство
stopдействия со значением FALLE по умолчанию определяет, будет ли цикл вызова функции немедленно вернуть результат действия вместо того, чтобы передавать его в LLM, если установить в TRUE.
Примечание . Вы можете одновременно передавать действия, генерируемые как из функций, так и из пидантских моделей.
ActionWeaver позволяет проектировать иерархии и цепочки действий, передавая аргумент в orch . orch - это отображение от действий в качестве ключей к значениям, включая
Например, допустим, у нас есть действия 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
}
) Пользователи могут предоставить конкретную реализацию ExceptionHandler, где метод handle_exception вызывается при столкновении с исключением. info параметр инкапсулирует контекстные детали, такие как сообщения и ответы API в словаре.
Метод handle_exception диктует курс действия для цикла вызова функции, возвращая либо:
Return : предоставление немедленного контента обратно пользователюContinue : инструктировать петлю, чтобы продолжить. 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 :
passВзгляните на этот пример для деталей.
Вклады в виде исправлений ошибок, новых функций, улучшений документации и запросов на привлечение очень приветствуются.
Если вы найдете ActionWeaver полезным, пожалуйста, рассмотрите возможность ссылаться на проект:
@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}
}