LLM FOO ist ein modernes Projekt, das die Kunst von Kung Fu mit der Wissenschaft großer Sprachmodelle mischt ... oder tatsächlich geht es darum, das OpenAI-Tool-JSON-Schema automatisch zu erstellen, den Anruf zu analysieren und das Ergebnis mit dem Chat-Modell zu konstruieren. Und dann gibt es ein zweites Dienstprogramm is_statement_true , das genius logit_bias trick verwendet, das nur einen Ausgangs -Token verwendet.
Aber hey, ich hoffe, dies wird zu einer Reihe kleiner nützlicher LLM -Helferfunktionen, die das Erstellen von Sachen erleichtern, da aktuelle APIs der Blutung ein bisschen ein Chaos sind und ich denke, wir können es besser machen.

pip install llmfoo Sie müssen OpenAI_API_Key in Env und die Fähigkeit haben gpt-4-1106-preview Modell anzurufen
is_statement_true sollte leicht zu verstehen sein. Machen Sie eine natürliche Sprachaussage und überprüfen Sie es gegen Kriterien oder allgemeine Wahrhaftigkeit. Sie kommen zurück Boolean.
Die neu eingeführte pdf2md Funktionalität ermöglicht die Umwandlung von PDF-Dokumenten in das Markdown-Format, wodurch sie einfacher zu verarbeiten und in LLM-basierte Systeme zu integrieren können. Diese Funktion ist besonders nützlich, um Text und Tabellen aus PDFs zu extrahieren und sie in ein überschaubares Format umzuwandeln.
pdftocairo muss in Ihrem System installiert werden, um PDF -Seiten in Bilder zu konvertieren. from llmfoo . pdf2md import process_pdf
from pathlib import Path
pdf_path = Path ( "path/to/your/document.pdf" )
output_dir = Path ( "path/to/output/directory" )
# Process the PDF and generate Markdown
markdown_file = process_pdf ( pdf_path , output_dir )Diese Funktion verarbeitet jede Seite des PDF, versucht, Text, Abbildungen und Tabellen zu extrahieren und sie in das angegebene Ausgabeverzeichnis in eine Markdown -Datei umzuwandeln.
@tool Annotation hinzu.openai_schema , um das Schema zurückzugeben (Sie können es vom JSON bearbeiten, wenn Sie nicht zufrieden sind, was die Maschinen getan haben)openai_tool_call , um den Tool aufzurufen und das Ergebnis im Chat -API -Nachrichtenformat zurückzugebenopenai_tool_output , um den Tool aufzurufen und das Ergebnis im Assistant API -Tool -Ausgangsformat zurückzugeben from time import sleep
from openai import OpenAI
from llmfoo . functions import tool
from llmfoo import is_statement_true
def test_is_statement_true_with_default_criteria ():
assert is_statement_true ( "Earth is a planet." )
assert not is_statement_true ( "1 + 2 = 5" )
def test_is_statement_true_with_own_criteria ():
assert not is_statement_true ( "Temperature outside is -2 degrees celsius" ,
criteria = "Temperature above 0 degrees celsius" )
assert is_statement_true ( "1984 was written by George Orwell" ,
criteria = "George Orwell is the author of 1984" )
def test_is_statement_true_criteria_can_change_truth_value ():
assert is_statement_true ( "Earth is 3rd planet from the Sun" )
assert not is_statement_true ( "Earth is 3rd planet from the Sun" ,
criteria = "Earth is stated to be 5th planet from the Sun" )
@ tool
def adder ( x : int , y : int ) -> int :
return x + y
@ tool
def multiplier ( x : int , y : int ) -> int :
return x * y
client = OpenAI ()
def test_chat_completion_with_adder ():
number1 = 3267182746
number2 = 798472847
messages = [
{
"role" : "user" ,
"content" : f"What is { number1 } + { number2 } ?"
}
]
response = client . chat . completions . create (
model = "gpt-4-1106-preview" ,
messages = messages ,
tools = [ adder . openai_schema ]
)
messages . append ( response . choices [ 0 ]. message )
messages . append ( adder . openai_tool_call ( response . choices [ 0 ]. message . tool_calls [ 0 ]))
response2 = client . chat . completions . create (
model = "gpt-4-1106-preview" ,
messages = messages ,
tools = [ adder . openai_schema ]
)
assert str ( adder ( number1 , number2 )) in response2 . choices [ 0 ]. message . content . replace ( "," , "" )
def test_assistant_with_multiplier ():
number1 = 1238763428176
number2 = 172388743612
assistant = client . beta . assistants . create (
name = "The Calc Machina" ,
instructions = "You are a calculator with a funny pirate accent." ,
tools = [ multiplier . openai_schema ],
model = "gpt-4-1106-preview"
)
thread = client . beta . threads . create ( messages = [
{
"role" : "user" ,
"content" : f"What is { number1 } * { number2 } ?"
}
])
run = client . beta . threads . runs . create (
thread_id = thread . id ,
assistant_id = assistant . id
)
while True :
run_state = client . beta . threads . runs . retrieve (
run_id = run . id ,
thread_id = thread . id ,
)
if run_state . status not in [ 'in_progress' , 'requires_action' ]:
break
if run_state . status == 'requires_action' :
tool_call = run_state . required_action . submit_tool_outputs . tool_calls [ 0 ]
run = client . beta . threads . runs . submit_tool_outputs (
thread_id = thread . id ,
run_id = run . id ,
tool_outputs = [
multiplier . openai_tool_output ( tool_call )
]
)
sleep ( 1 )
sleep ( 0.1 )
messages = client . beta . threads . messages . list ( thread_id = thread . id )
assert str ( multiplier ( number1 , number2 )) in messages . data [ 0 ]. content [ 0 ]. text . value . replace ( "," , "" )Interessiert an einem Beitrag? Ich habe es geliebt, Ihre Hilfe zu bekommen, um dieses Projekt besser zu machen! Die APIs verändern sich und das System ist immer noch sehr erste Version.
Dieses Projekt ist unter der MIT -Lizenz lizenziert.