Contexte statique des modèles de langage de grande taille avec des trous typés
Statically Contextualizing Large Language Models with Typed Holes
September 2, 2024
papers.authors: Andrew Blinn, Xiang Li, June Hyung Kim, Cyrus Omar
cs.AI
papers.abstract
Les grands modèles de langage (LLM) ont remodelé le paysage de la synthèse de programmes. Cependant, les systèmes contemporains de complétion de code basés sur les LLM produisent souvent du code erroné car ils manquent de contexte approprié, particulièrement lorsqu'ils travaillent avec des définitions absentes des données d'entraînement ou éloignées du curseur. Cet article démontre qu'une intégration étroite avec la structure de typage et de liaison d'un langage, telle qu'exposée par son serveur de langage, peut résoudre ce problème de contextualisation de manière efficace en tokens. En bref, nous soutenons que les IA ont aussi besoin d'IDE ! Nous intégrons notamment la génération de code par LLM dans l'environnement d'esquisse de programmes en direct Hazel. Le serveur de langage Hazel identifie le type et le contexte de typage du trou à combler, même en présence d'erreurs, garantissant qu'une ébauche de programme significative est toujours disponible. Cela permet d'inciter le modèle avec des informations contextuelles à l'échelle de la base de code qui ne sont pas lexicalement locales au curseur, ni nécessairement dans le même fichier, mais qui sont probablement sémantiquement locales à l'objectif du développeur. Les complétions synthétisées par le LLM sont ensuite affinées itérativement via un dialogue supplémentaire avec le serveur de langage. Pour évaluer ces techniques, nous présentons MVUBench, un jeu de données d'applications web modèle-vue-mise à jour (MVU). Ces applications servent de problèmes difficiles en raison de leur dépendance à des structures de données spécifiques à l'application. Nous constatons que la contextualisation avec les définitions de types est particulièrement impactante. Après avoir présenté nos idées dans le contexte de Hazel, nous dupliquons nos techniques et portons MVUBench vers TypeScript afin de valider l'applicabilité de ces méthodes à des langages plus riches en ressources. Enfin, nous décrivons ChatLSP, une extension conservative du protocole de serveur de langage (LSP) que les serveurs de langage peuvent implémenter pour exposer des capacités que les systèmes de complétion de code par IA de diverses conceptions peuvent utiliser pour incorporer un contexte statique lors de la génération d'invites pour un LLM.
English
Large language models (LLMs) have reshaped the landscape of program
synthesis. However, contemporary LLM-based code completion systems often
hallucinate broken code because they lack appropriate context, particularly
when working with definitions not in the training data nor near the cursor.
This paper demonstrates that tight integration with the type and binding
structure of a language, as exposed by its language server, can address this
contextualization problem in a token-efficient manner. In short, we contend
that AIs need IDEs, too! In particular, we integrate LLM code generation into
the Hazel live program sketching environment. The Hazel Language Server
identifies the type and typing context of the hole being filled, even in the
presence of errors, ensuring that a meaningful program sketch is always
available. This allows prompting with codebase-wide contextual information not
lexically local to the cursor, nor necessarily in the same file, but that is
likely to be semantically local to the developer's goal. Completions
synthesized by the LLM are then iteratively refined via further dialog with the
language server. To evaluate these techniques, we introduce MVUBench, a dataset
of model-view-update (MVU) web applications. These applications serve as
challenge problems due to their reliance on application-specific data
structures. We find that contextualization with type definitions is
particularly impactful. After introducing our ideas in the context of Hazel we
duplicate our techniques and port MVUBench to TypeScript in order to validate
the applicability of these methods to higher-resource languages. Finally, we
outline ChatLSP, a conservative extension to the Language Server Protocol (LSP)
that language servers can implement to expose capabilities that AI code
completion systems of various designs can use to incorporate static context
when generating prompts for an LLM.