Hallucinerende AI - ChatGPT suggereert API's die nooit hebben bestaan
Ik was een stuk code aan het debuggen dat een Java.lang.OutOfMemoryError gaf. Na een kort onderzoek ontdekte ik dat de SQL query die de code uitvoerde geen 'WHERE' clausule bevatte, waardoor een grote tabel bijna volledig gedownload werd, waardoor het proces geen geheugen meer had.
De oplossing was eenvoudig en snel: voeg een WHERE-clausule toe aan de SQL-query. Toen dacht ik, als onderdeel van preventief onderhoud, om te controleren waarom deze query zelfs werd uitgevoerd, omdat de parameters aanwezig waren in de code, klaar om te worden ingevoegd in het SQL statement.
Ik wil dat de NamedParameterJdbcTemplate een exception gooit als 'Hey, je had twee parameters moeten hebben in deze query; je hebt er geen!'. Dus vroeg ik ChatGPT om hulp: hoe kan ik vooraf controleren of alle opgegeven parameters hun weg hebben gevonden naar de SQL in de WHERE-clausule?
Hoe controleer je wanneer je jdbctemplate.query
uitvoert of alle NamedParameterSource
variabelen zijn ingevuld?
Dit is wat het opleverde:
Je kunt controleren of alle
NamedParameterSource
variabelen zijn gevuld door gebruik te maken van deSqlParameterSourceUtils
klasse die wordt geleverd door Spring framework. Hier is een voorbeeld:
1NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
2String sql = "SELECT * FROM my_table WHERE column1 = :param1 AND column2 = :param2";
3MapSqlParameterSource params = new MapSqlParameterSource();
4params.addValue("param1", "value1");
5//params.addValue("param2", "value2"); //Uitgecommentarieerd om een ontbrekende parameter te simuleren
6
7SqlParameterSourceUtils.assertAllParamsSet(params, sql);
8List<MyObject> results = jdbcTemplate.query(sql, params, new MyRowMapper());
In dit voorbeeld zal de
assertAllParamsSet
methode eenIllegalArgumentException
gooien als een genoemde parameter in de SQL query ontbreekt in hetparams
object. Hierdoor kun je ontbrekende parameters opvangen voordat je de query uitvoert. Merk op dat deze methode alleen werkt voorNamedParameterJdbcTemplate
enSqlParameterSource
objecten, maar je kunt het aanpassen aan andere typen JDBC templates en parameterbronnen als dat nodig is.
Dus de 'money shot' (sorry voor mijn Frans) is op regel 7. Aangezien ik op zoek ben naar een manier om te controleren (assert) dat al mijn parameters gebruikt (ingesteld) zijn, maakte het lezen van deze codesuggestie me een blije kleine nerd.
Ik ontdekte al snel dat deze API-aanroep, onderdeel van deze helperklasse, niet bestaat; het heeft nooit bestaan. Nadat de IDE allerlei 'niet gevonden' indicaties gaf, besloot ik dit deel van de code op te zoeken, en dit is wat er gebeurde:
Een oude grap van programmeurs is dat je in de problemen zit als er 0 resultaten zijn als je je probleem googelt.
Bah.
Uiteindelijk moest ik dit zelf implementeren in plaats van te verwachten dat de bibliotheek het voor me zou doen. ChatGPT suggereerde een helperklasse en API-aanroep die gewoon niet bestaat: het zou een mooie toevoeging zijn aan de Util, dus dat ga ik misschien doen.
ChatGPT droomde ervan me te helpen; de bot hallucineerde over API's die in een ideale wereld zouden bestaan, alleen niet in de echte wereld.
Softwareontwikkeling ontmoeilijken
Laat ZEN Software uw softwareontwikkeling analyseren en optimaliseren.
Read more:
The AI Revolution: How Generative AI is Making SEO practices Obsolete!
Artificial Intelligence (AI) and Generative AI are leading a revolution that will obsolete traditional SEO practices lik...
Hallucinerende AI - ChatGPT suggereert API's die nooit hebben bestaan
Ik was een stuk code aan het debuggen dat een Java.lang.OutOfMemoryError veroorzaakte. Na een kort onderzoek ontdekte ik...
Guest trainer multi-cloud at Young Mavericks
As part of the Data Science trajectory at Young Mavericks, ZEN Software provided an introduction to Multi-Cloud. How can...
Code red for Google, chatGPT threatens Google's business model
Since the launch of chatGPT, it’s been DEFCON 1 at Google HQ. ChatGPT could easily lead to a golden-egg-laying-goose kil...
'The End of Programming' is silly sales nonsense
With the recent rise of Github’s CoPilot and ChatGPT you can see the technology for code generation is ‘hot’. (Side note...
Remote Coding Job Interviews are DEAD because of Nvidia and ChatGPT
With the rise of remote work, remote coding job interviews have become increasingly popular. However, this shift has bro...