Guidance vous permet de contrôler les modèles de langage modernes de manière plus efficace et efficiente que le prompting ou le chaînage traditionnel. Les programmes Guidance vous permettent d'entrelacer la génération, le prompting et le contrôle logique en un seul flux continu correspondant à la façon dont le modèle de langage traite réellement le texte. Il a été démontré que des structures de sortie simples telles que la Chain of Thought et ses nombreuses variantes (par exemple ART, Auto-CoT, etc.) améliorent les performances du LLM. L'avènement de LLM plus puissants comme GPT-4 permet une structure encore plus riche, et Guidance rend cette structure plus facile et plus abordable.
Caractéristiques :
Installation
Diffusion live
Accélérez votre cycle de développement en diffusant des modèles complexes et des générations live dans votre carnet de notes. À première vue, Guidance ressemble à un langage de création de modèles, et tout comme les modèles Handlebars standard, vous pouvez faire de l'interpolation de variables (par exemple {{proverbe}}) et du contrôle logique. Mais contrairement aux langages de templating standard, les programmes Guidance ont un ordre d'exécution linéaire bien défini qui correspond directement à l'ordre des jetons tel qu'il est traité par le modèle de langage. Cela signifie qu'à tout moment de l'exécution, le modèle de langage peut être utilisé pour générer du texte (à l'aide de la commande {{gen}}) ou pour prendre des décisions concernant le flux de contrôle logique. Cette imbrication de la génération et de l'invite permet d'obtenir une structure de sortie précise qui produit des résultats clairs et analysables.
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Après avoir exécuté un programme, toutes les variables générées sont désormais facilement accessibles :
Dialogue de chat
Guidance prend en charge les modèles de dialogue basés sur l'API, tels que GPT-4, ainsi que les modèles de dialogue ouverts, tels que Vicuna, grâce à une API unifiée basée sur des balises de rôle (par exemple {{#system}}...{{/system}}). Cela permet de développer des dialogues interactifs qui combinent des modèles riches et un contrôle logique avec des modèles de chat modernes.
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Accélération du traitement par Guidance
Lorsque plusieurs générations ou instructions de flux de contrôle dirigées par le LLM sont utilisées dans un seul programme Guidance, il est possible d'améliorer de manière significative la performance de l'inférence en réutilisant de manière optimale les caches de clés/valeurs au fur et à mesure que l'on progresse dans l'invite. Cela signifie que Guidance ne demande au LLM que de générer le texte vert ci-dessous, et non le programme entier. Cela réduit de moitié le temps d'exécution de cette invite par rapport à une approche de génération standard.
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
L'invite ci-dessus prend typiquement un peu plus de 2,5 secondes pour se terminer sur un GPU A6000 en utilisant LLaMA 7B. Si nous devions exécuter la même invite adaptée pour être un appel de génération unique (la pratique standard aujourd'hui), cela prendrait environ 5 secondes (dont 4 pour la génération de jetons et 1 pour le traitement de l'invite). Cela signifie que l'accélération effectuée par Guidance permet de multiplier par deux la vitesse d'exécution de cette invite par rapport à l'approche standard. Dans la pratique, le facteur d'accélération exact dépend du format de votre invite spécifique et de la taille de votre modèle (les modèles plus grands en bénéficient davantage). Pour l'instant, l'accélération n'est prise en charge que pour les Transformers LLM.
Caractéristiques :
- Syntaxe simple et intuitive, basée sur le modèle Handlebars.
- Structure de sortie riche avec de multiples générations, sélections, conditionnelles, utilisation d'outils, etc.
- Diffusion semblable à un playground dans les carnets Jupyter/VSCode.
- Mise en cache intelligente des générations basée sur les seeds.
- Prise en charge des modèles de chat basés sur les rôles (par exemple ChatGPT).
- Intégration facile avec les modèles Hugging Face, y compris l'accélération de Guidance pour des gains de vitesse par rapport au prompting standard, le token healing pour optimiser les limites du prompt, et les guides de motifs regex pour faire respecter les formats.
Installation
Code : | Sélectionner tout |
pip install guidance
Diffusion live
Accélérez votre cycle de développement en diffusant des modèles complexes et des générations live dans votre carnet de notes. À première vue, Guidance ressemble à un langage de création de modèles, et tout comme les modèles Handlebars standard, vous pouvez faire de l'interpolation de variables (par exemple {{proverbe}}) et du contrôle logique. Mais contrairement aux langages de templating standard, les programmes Guidance ont un ordre d'exécution linéaire bien défini qui correspond directement à l'ordre des jetons tel qu'il est traité par le modèle de langage. Cela signifie qu'à tout moment de l'exécution, le modèle de langage peut être utilisé pour générer du texte (à l'aide de la commande {{gen}}) ou pour prendre des décisions concernant le flux de contrôle logique. Cette imbrication de la génération et de l'invite permet d'obtenir une structure de sortie précise qui produit des résultats clairs et analysables.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import guidance # set the default language model used to execute guidance programs guidance.llm = guidance.llms.OpenAI("text-davinci-003") # define a guidance program that adapts a proverb program = guidance("""Tweak this proverb to apply to model instructions instead. {{proverb}} - {{book}} {{chapter}}:{{verse}} UPDATED Where there is no guidance{{gen 'rewrite' stop="\\n-"}} - GPT {{gen 'chapter'}}:{{gen 'verse'}}""") # execute the program on a specific proverb executed_program = program( proverb="Where there is no guidance, a people falls,\nbut in an abundance of counselors there is safety.", book="Proverbs", chapter=11, verse=14 ) |
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Après avoir exécuté un programme, toutes les variables générées sont désormais facilement accessibles :
Code : | Sélectionner tout |
executed_program["rewrite"]
Dialogue de chat
Guidance prend en charge les modèles de dialogue basés sur l'API, tels que GPT-4, ainsi que les modèles de dialogue ouverts, tels que Vicuna, grâce à une API unifiée basée sur des balises de rôle (par exemple {{#system}}...{{/system}}). Cela permet de développer des dialogues interactifs qui combinent des modèles riches et un contrôle logique avec des modèles de chat modernes.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # connect to a chat model like GPT-4 or Vicuna gpt4 = guidance.llms.OpenAI("gpt-4") # vicuna = guidance.llms.transformers.Vicuna("your_path/vicuna_13B", device_map="auto") experts = guidance(''' {{#system~}} You are a helpful and terse assistant. {{~/system}} {{#user~}} I want a response to the following question: {{query}} Name 3 world-class experts (past or present) who would be great at answering this? Don't answer the question yet. {{~/user}} {{#assistant~}} {{gen 'expert_names' temperature=0 max_tokens=300}} {{~/assistant}} {{#user~}} Great, now please answer the question as if these experts had collaborated in writing a joint anonymous answer. {{~/user}} {{#assistant~}} {{gen 'answer' temperature=0 max_tokens=500}} {{~/assistant}} ''', llm=gpt4) experts(query='How can I be more productive?') |
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Accélération du traitement par Guidance
Lorsque plusieurs générations ou instructions de flux de contrôle dirigées par le LLM sont utilisées dans un seul programme Guidance, il est possible d'améliorer de manière significative la performance de l'inférence en réutilisant de manière optimale les caches de clés/valeurs au fur et à mesure que l'on progresse dans l'invite. Cela signifie que Guidance ne demande au LLM que de générer le texte vert ci-dessous, et non le programme entier. Cela réduit de moitié le temps d'exécution de cette invite par rapport à une approche de génération standard.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # we use LLaMA here, but any GPT-style model will do llama = guidance.llms.Transformers("your_path/llama-7b", device=0) # we can pre-define valid option sets valid_weapons = ["sword", "axe", "mace", "spear", "bow", "crossbow"] # define the prompt character_maker = guidance("""The following is a character profile for an RPG game in JSON format. ```json { "id": "{{id}}", "description": "{{description}}", "name": "{{gen 'name'}}", "age": {{gen 'age' pattern='[0-9]+' stop=','}}, "armor": "{{#select 'armor'}}leather{{or}}chainmail{{or}}plate{{/select}}", "weapon": "{{select 'weapon' options=valid_weapons}}", "class": "{{gen 'class'}}", "mantra": "{{gen 'mantra' temperature=0.7}}", "strength": {{gen 'strength' pattern='[0-9]+' stop=','}}, "items": [{{#geneach 'items' num_iterations=5 join=', '}}"{{gen 'this' temperature=0.7}}"{{/geneach}}] }```""") # generate a character character_maker( id="e1f491f7-7ab8-4dac-8c20-c92b5e7d883d", description="A quick and nimble fighter.", valid_weapons=valid_weapons, llm=llama ) |
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
L'invite ci-dessus prend typiquement un peu plus de 2,5 secondes pour se terminer sur un GPU A6000 en utilisant LLaMA 7B. Si nous devions exécuter la même invite adaptée pour être un appel de génération unique (la pratique standard aujourd'hui), cela prendrait environ 5 secondes (dont 4 pour la génération de jetons et 1 pour le traitement de l'invite). Cela signifie que l'accélération effectuée par Guidance permet de multiplier par deux la vitesse d'exécution de cette invite par rapport à l'approche standard. Dans la pratique, le facteur d'accélération exact dépend du format de votre invite spécifique et de la taille de votre modèle (les modèles plus grands en bénéficient davantage). Pour l'instant, l'accélération n'est prise en charge que pour les Transformers LLM.
Source : Guidance
Et vous ?
Quel est votre avis sur le sujet ? Trouvez-vous que cette initiative est utile et pertinente ?
Comment évaluez-vous le langage Guidance par rapport aux autres langages de programmation pour les LLM (LMQL, LangChain, etc.) ?
Pensez-vous que ce langage apportera plus de rigueur dans le travail avec les LLM ?
Voir aussi
La société chinoise Baidu dévoile un chatbot d'IA générative basé sur un modèle de langage plus grand que GPT-3, mais l'on ignore encore de quoi le chatbot d'IA de Baidu est réellement capable
Meta dévoile son propre modèle de langage appelé LLaMA, fonctionnant comme un chatbot d'IA ordinaire, et indique qu'il est plus puissant et moins gourmand en ressources que ses concurrents
Microsoft annonce GPT-4, le modèle de langage, de type transformeur génératif pré-entraîné et assure qu'elle n'utilise pas les données de ses clients pour former ses modèles, il sera multimodal
Google dévoile PaLM-E, un modèle d'IA de type ChatGPT, qui prend en compte les besoins de l'utilisateur, une similitude est dégagée dans le récent article de Microsoft intitulé "ChatGPT for Robotic"
Les capacités émergentes des grands modèles linguistiques sont-elles un mirage ? Les grands modèles linguistiques ne sont pas supérieurs à la somme de leurs parties, selon des chercheurs de Stanford