Bosquet a pour mission de simplifier la création d’applications d’IA. Toutes les applications d'IA non triviales doivent fonctionner avec des modèles d'invite dont la complexité augmente rapidement, les fenêtres contextuelles LLM limitées nécessitent une gestion de la mémoire et des agents sont nécessaires pour que les applications d'IA puissent interagir avec le monde extérieur.
Bosquet fournit des instruments pour travailler avec ces concepts d'application d'IA :
Documentation complète du projet (WIP)
Les secrets comme les clés sont stockés dans le fichier secrets.edn
et les paramètres locaux sont conservés dans config.edn
. Faites une copie des fichiers config.edn.sample
et config.edn.sample
. Changez si nécessaire.
Démo de l'interface de ligne de commande
Exécutez la commande suivante pour obtenir les options CLI
clojure -M -m bosquet.cli
Définissez le modèle par défaut avec
clojure -M -m bosquet.cli llms set --service openai --temperature 0 --model gpt-4
N'oubliez pas de définir la CLÉ API de votre service (remplacez 'openai' par un nom différent si nécessaire)
clojure -M -m bosquet.cli keys set openai
Avec cet ensemble, vous pouvez exécuter des générations :
clojure -M -m bosquet.cli "2+{{x}}="
Ou en utilisant des fichiers
clojure -M -m bosquet.cli -p demo/play-writer-prompt.edn -d demo/play-writer-data.edn
Une complétion rapide et simple peut être effectuée comme ceci.
(require '[bosquet.llm.generator :refer [generate llm]])
(generate "When I was 6 my sister was half my age. Now I’m 70 how old is my sister?")
=>
"When you were 6, your sister was half your age, which means she was 6 / 2 = 3 years old.nSince then, there is a constant age difference of 3 years between you and your sister.nNow that you are 70, your sister would be 70 - 6 = 64 years old."}
( require '[bosquet.llm :as llm])
( require '[bosquet.llm.generator :refer [generate llm]])
( generate
llm/default-services
{ :question-answer " Question: {{question}} Answer: {{answer}} "
:answer ( llm :openai )
:self-eval [ " Question: {{question}} "
" Answer: {{answer}} "
" "
" Is this a correct answer? "
" {{test}} " ]
:test ( llm :openai )}
{ :question " What is the distance from Moon to Io? " })
=>
{ :question-answer
" Question: What is the distance from Moon to Io? Answer: " ,
:answer
" The distance from the Moon to Io varies, as both are orbiting different bodies. On average, the distance between the Moon and Io is approximately 760,000 kilometers (470,000 miles). However, this distance can change due to the elliptical nature of their orbits. " ,
:self-eval
" Question: What is the distance from Moon to Io? n Answer: The distance from the Moon to Io varies, as both are orbiting different bodies. On average, the distance between the Moon and Io is approximately 760,000 kilometers (470,000 miles). However, this distance can change due to the elliptical nature of their orbits. nn Is this a correct answer? " ,
:test
" No, the answer provided is incorrect. The Moon is Earth's natural satellite, while Io is one of Jupiter's moons. Therefore, the distance between the Moon and Io can vary significantly depending on their relative positions in their respective orbits around Earth and Jupiter. " }
( require '[bosquet.llm.wkk :as wkk])
( generate
[[ :system " You are an amazing writer. " ]
[ :user [ " Write a synopsis for the play: "
" Title: {{title}} "
" Genre: {{genre}} "
" Synopsis: " ]]
[ :assistant ( llm wkk/openai
wkk/model-params { :temperature 0.8 :max-tokens 120 }
wkk/var-name :synopsis )]
[ :user " Now write a critique of the above synopsis: " ]
[ :assistant ( llm wkk/openai
wkk/model-params { :temperature 0.2 :max-tokens 120 }
wkk/var-name :critique )]]
{ :title " Mr. X "
:genre " Sci-Fi " })
=>
#:bosquet{ :conversation
[[ :system " You are an amazing writer. " ]
[ :user
" Write a synopsis for the play: n Title: Mr. X n Genre: Sci-Fi n Synopsis: " ]
[ :assistant " In a futuristic world where technology ... " ]
[ :user " Now write a critique of the above synopsis: " ]
[ :assistant
" The synopsis for the play " Mr. X " presents an intriguing premise ... " ]],
:completions
{ :synopsis
" In a futuristic world where technology has ... " ,
:critique
" The synopsis for the play " Mr. X " presents an intriguing premise set ... " }}
La génération renvoie :bosquet/conversation
répertoriant le chat complet avec les parties générées remplies, et :bosquet/completions
contenant uniquement les données générées