LLM4Data est une bibliothèque Python conçue pour faciliter l'application de grands modèles de langage (LLM) et de l'intelligence artificielle pour les données de développement et la découverte de connaissances. Il vise à permettre aux utilisateurs et aux organisations de découvrir et d'interagir avec les données de développement de manière innovante grâce au langage naturel.
Le LLM4Data alimente l'application DevData Chat, qui sera bientôt disponible en tant que projet open source. Cette application démontre les différentes manières dont le LLM (Language Model) et l'IA améliorent la découverte et l'interaction avec les données et les connaissances, en apportant des solutions innovantes pour aider à combler les lacunes en matière de découvrabilité et d'accessibilité.
La bibliothèque LLM4Data contient une collection de solutions de découverte et d'augmentation des données pour divers types de données, notamment des documents, des indicateurs, des microdonnées, des données géospatiales, etc. La version actuelle de la bibliothèque comprend des solutions pour les indicateurs WDI. Des solutions supplémentaires seront ajoutées dans les prochaines versions.
Construits autour des normes et schémas de métadonnées existants, les utilisateurs et les organisations peuvent bénéficier des LLM pour améliorer les applications basées sur les données, permettant le traitement du langage naturel, la génération de texte et bien plus encore avec LLM4Data. La bibliothèque sert de pont entre les LLM et les données de développement à l'aide de bibliothèques open source, offrant une interface transparente pour exploiter les capacités de ces puissants modèles de langage.
Utilisez le pip du gestionnaire de packages pour installer LLM4Data.
pip install llm4data
Les exemples suivants montrent comment utiliser LLM4Data pour générer des URL d'API WDI et des requêtes SQL à partir d'invites.
Des exemples supplémentaires peuvent être trouvés ici.
This example uses the OpenAI API. Before you proceed, make sure to set your API keys in the `.env` file. See the [setup instructions](https://worldbank.github.io/llm4data/notebooks/examples/getting-started/openai-api.html) for more details.
from llm4data . prompts . indicators import wdi
# Create a WDI API prompt object
wdi_api = wdi . WDIAPIPrompt ()
# Send a prompt to the LLM to get a WDI API URL relevant to the prompt
response = wdi_api . send_prompt (
"What is the gdp and the co2 emissions of the philippines and its neighbors in the last decade?"
)
# Parse the response to get the WDI API URL
wdi_api_url = wdi_api . parse_response ( response )
print ( wdi_api_url )
Le résultat ressemblera à ce qui suit :
https://api.worldbank.org/v2/country/PHL;IDN;MYS;SGP;THA;VNM/indicator/NY.GDP.MKTP.CD;EN.ATM.CO2E.KT?date=2013:2022&format=json&source=2
Notez que l'URL générée inclut déjà les codes de pays et les indicateurs pertinents pour l'invite. Il comprend quels pays sont voisins des Philippines. Il comprend également quels codes d'indicateurs sont susceptibles de fournir les données pertinentes sur le PIB et les émissions de CO2.
L'URL inclut également la plage de dates, le format et la source des données. L'utilisateur peut ensuite modifier l'URL selon ses besoins et l'utiliser pour interroger l'API WDI.
Make sure you have set up your environment first. The example below requires a working database engine, e.g., postgresql. If you want to use SQLite, make sure to update the `.env` file and set the environment variables.
Bien que les données WDI puissent être chargées dans une trame de données Pandas, ce n'est pas toujours pratique de le faire ; par exemple, développer des applications capables de répondre à des questions de données arbitraires.
La bibliothèque LLM4Data comprend une interface SQL vers les données WDI, permettant aux utilisateurs d'interroger les données à l'aide de SQL.
Cette interface permettra aux utilisateurs d'interroger les données à l'aide de SQL et de renvoyer les résultats sous forme de trame de données Pandas. L'interface permet également aux utilisateurs d'interroger les données à l'aide de SQL et de renvoyer les résultats sous forme d'objet JSON.
import json
from llm4data . prompts . indicators import templates , wdi
from llm4data . llm . indicators import wdi_sql
prompt = "What is the GDP and army spending of the Philippines in 2020?"
sql_data = wdi_sql . WDISQL (). llm2sql_answer ( prompt , as_dict = True )
print ( sql_data )
# # {'sql': "SELECT country, value AS gdp, (SELECT value FROM wdi WHERE country_iso3 = 'PHL' AND indicator = 'MS.MIL.XPND.GD.ZS' AND year = 2020) AS army_spending FROM wdi WHERE country_iso3 = 'PHL' AND indicator = 'NY.GDP.MKTP.CD' AND year = 2020 AND value IS NOT NULL",
# # 'params': {},
# # 'data': {'data': [{'country': 'Philippines',
# # 'gdp': 361751116292.541,
# # 'army_spending': 1.01242392260698}],
# # 'sample': [{'country': 'Philippines',
# # 'gdp': 361751116292.541,
# # 'army_spending': 1.01242392260698}]},
# # 'num_samples': 20}
La bibliothèque LLM4Data inclut également la prise en charge de la génération d'explications narratives des réponses aux requêtes SQL. Ceci est utile pour générer des descriptions de données en langage naturel, qui peuvent être utilisées pour fournir un contexte aux utilisateurs et pour expliquer les résultats des requêtes de données.
from llm4data . prompts . indicators import templates
# Send the prompt to the LLM for a narrative explanation of the response.
# This is optional and can be skipped.
# Note that we pass only a sample in the `context_data`.
# This could limit the quality of the response.
# This is a limitation of the current version of the LLM which is constrained by the context length and cost.
explainer = templates . IndicatorPrompt ()
description = explainer . send_prompt ( prompt = prompt , context_data = json . dumps ( sql_data [ "data" ][ "sample" ]))
print ( description [ "content" ])
# # Based on the data provided, the GDP of the Philippines in 2020 was approximately 362 billion USD. Meanwhile, the country's army spending in the same year was around 1.01 billion USD. It is worth noting that while army spending is an important aspect of a country's budget, it is not the only factor that contributes to its economic growth and development. Other factors such as infrastructure, education, and healthcare also play a crucial role in shaping a country's economy.
Langchain est une excellente bibliothèque et dispose d'un wrapper pour les bases de données SQL qui vous permet de les interroger en utilisant le langage naturel. Le wrapper s'appelle SQLDatabaseChain
et peut être utilisé comme suit :
from langchain import OpenAI , SQLDatabase , SQLDatabaseChain
db = SQLDatabase . from_uri ( "sqlite:///../llm4dev/data/sqldb/wdi.db" )
llm = OpenAI ( temperature = 0 , verbose = True )
db_chain = SQLDatabaseChain . from_llm ( llm , db , verbose = True , return_intermediate_steps = True )
out = db_chain ( "What is the GDP and army spending of the Philippines in 2020?" )
> Entering new SQLDatabaseChain chain...
What is the GDP and army spending of the Philippines in 2020 ?
SQLQuery:SELECT " value " FROM wdi WHERE " name " = ' GDP (current US$) ' AND " country_iso3 " = ' PHL ' AND " year " = 2020
UNION
SELECT " value " FROM wdi WHERE " name " = ' Military expenditure (% of GDP) ' AND " country_iso3 " = ' PHL ' AND " year " = 2020
SQLResult: [(1.01242392260698,), (361751116292.541,)]
Answer:The GDP of the Philippines in 2020 was 1.01242392260698 and the military expenditure (% of GDP) was 361751116292.541.
> Finished chain.
Malheureusement, la réponse The GDP of the Philippines in 2020 was 1.01242392260698 and the military expenditure (% of GDP) was 361751116292.541.
est incorrect car les valeurs ont été échangées.
L'un des objectifs de LLM4Data est de développer des solutions autour des limites des solutions open source existantes appliquées aux données de développement et à la découverte de connaissances.
Les demandes de tirage sont les bienvenues. Pour les changements majeurs, veuillez d'abord ouvrir un ticket pour discuter de ce que vous souhaitez changer.
Veuillez consulter CONTRIBUTING.md pour plus d'informations.
LLM4Data est sous licence en vertu du contrat de licence communautaire principal de la Banque mondiale.