
? Kerangka kerja aplikasi AI yang membuat panggilan fungsi dengan LLM lebih mudah?
Jelajahi buku masak kami untuk tutorial & contoh!
Perselisihan
Notebook untuk memulai:
Bintang kami di GitHub!
ActionWeaver berusaha untuk menjadi kerangka kerja panggilan fungsi yang paling andal, ramah pengguna, berkecepatan tinggi, dan hemat biaya untuk insinyur AI.
Fitur:
Anda dapat menginstal ActionWeaver menggunakan PIP:
pip install actionweaver Gunakan API OpenAI terbaru yang mendukung panggilan fungsi paralel!
from actionweaver . llms import wrap
from openai import OpenAI
openai_client = wrap ( OpenAI ())atau menggunakan layanan 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"
))Klien ActionWeaver yang dibungkus akan mengelola fungsi panggilan fungsi, yang mencakup deskripsi fungsi yang lewat, mengeksekusi fungsi dengan argumen yang dikembalikan oleh LLM, dan menangani pengecualian.
Klien ini akan mengekspos API create yang dibangun di atas chat.completions.create asli. API create Enhanced akan mempertahankan semua argumen asli dan menyertakan parameter tambahan seperti:
action : Memberikan tindakan yang tersedia untuk LLM.orch : Mengatur tindakan di seluruh fungsi loop panggilan.exception_handler : Suatu objek yang memandu fungsi panggilan tentang cara menangani pengecualian. Argumen ini akan ditunjukkan di bagian berikutnya. Argumen tambahan ini opsional, dan selalu ada opsi fallback untuk mengakses klien OpenAI asli melalui openai_client.client .
Catatan : Suatu
actionmewakili alat yang dapat digunakan oleh LLM. Setiap tindakan terdiri dari dua elemen utama: model Pydantic yang dihasilkan secara otomatis untuk memfasilitasi dorongan, dan fungsi python konvensional.
Pengembang dapat melampirkan fungsi Python apa pun sebagai tindakan dengan dekorator sederhana. Dalam contoh berikut, kami memperkenalkan tindakan GetCurrentTime , dan kemudian melanjutkan untuk menggunakan API OpenAI untuk memohonnya.
ActionWeaver menggunakan tanda tangan dan docstring metode yang dihiasi sebagai deskripsi, meneruskannya ke API fungsi Openai. Dekorator aksi juga sangat mudah beradaptasi dan dapat dikombinasikan dengan dekorator lain, asalkan tanda tangan asli dipertahankan.
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 ]
)Lihatlah Apa yang Melewati 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'}}
""" Anda juga dapat memaksa model bahasa untuk menjalankan tindakan dengan memanggil metode invoke dari suatu tindakan. Argumennya termasuk klien yang dibungkus aksi dan argumen lain yang diteruskan ke CREATE API.
get_current_time . invoke ( openai_client , messages = [{ "role" : "user" , "content" : "what time is it" }], model = "gpt-3.5-turbo" , stream = False , force = True ) Anda dapat membuat model Pydantic untuk menentukan data struktural yang ingin Anda ekstrak, membuat tindakan menggunakan action_from_model dan kemudian memaksa model bahasa untuk mengekstrak data terstruktur dari informasi dalam prompt.
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 )Catatan : Properti
stopsuatu tindakan, dengan nilai default False, menentukan apakah fungsi panggilan fungsi akan segera mengembalikan hasil tindakan alih -alih meneruskannya ke LLM jika diatur ke True.
Catatan : Anda dapat secara bersamaan mengeluarkan tindakan yang dihasilkan dari kedua fungsi dan model Pydantic.
ActionWeaver memungkinkan desain hierarki dan rantai tindakan dengan meloloskan argumen orch . orch adalah pemetaan dari tindakan sebagai kunci ke nilai termasuk
Misalnya, katakanlah kami memiliki tindakan 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
}
) Pengguna dapat memberikan implementasi spesifik dari ExceptionHandler, di mana metode handle_exception dipanggil setelah menemukan pengecualian. Parameter info merangkum detail kontekstual seperti pesan dan respons API dalam kamus.
Metode handle_exception menentukan tindakan untuk fungsi panggilan, mengembalikan:
Return : Menyediakan konten langsung kembali ke penggunaContinue : Menginstruksikan loop untuk melanjutkan. 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 :
passLihatlah contoh ini untuk detailnya.
Kontribusi dalam bentuk perbaikan bug, fitur baru, peningkatan dokumentasi, dan permintaan tarik sangat disambut.
Jika Anda menemukan ActionWeaver bermanfaat, silakan pertimbangkan mengutip proyek:
@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}
}