𝗢𝗹𝗹𝗮𝗺𝗮 𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲𝗱 𝗢𝘂𝘁𝗽𝘂𝘁𝘀 𝗜𝗻 𝗣𝗿𝗮𝗰𝘁𝗶𝗰𝗲

உள்ளூர் (local) LLM-களை இயக்குவது பெரும்பாலும் JSON parsing பிழைகளுக்கு வழிவகுக்கிறது. மாடலிடம் JSON-ஐ மட்டும் திருப்பித் தருமாறு நீங்கள் கூறினாலும், அது இன்னும் markdown fences அல்லது கூடுதல் உரையைச் சேர்க்கிறது. இது உங்கள் குறியீட்டை (code) உடைத்துவிடும்.

Ollama 0.3.0 முதல், நீங்கள் format அளவுருவைப் (parameter) பயன்படுத்தி இதைச் சரிசெய்யலாம். இது மாடல் ஒரு JSON schema-வைப் பின்பற்றுவதை உறுதி செய்கிறது. இதன் மூலம் மாடல் கூடுதல் உரையையோ அல்லது markdown-ஐயோ சேர்ப்பது இயற்பியல் ரீதியாகவே சாத்தியமற்றதாகிறது.

நான் இதை Gemma4 மற்றும் Ollama 0.30.7 உடன் சோதித்தேன். அதன் முடிவுகள் இதோ.

இயல்பான உரையில் உள்ள சிக்கல் மாடல்கள் உரையாடலுக்காகப் பயிற்றுவிக்கப்படுகின்றன. அவை "இதோ உங்கள் JSON" என்று சொல்ல விரும்புகின்றன. கடுமையான ப்ராம்ப்ட்கள் (prompts) இருந்தாலும், அவை பெரும்பாலும் பதில்களை code blocks-க்குள் சுற்றுகின்றன. Python-ன் json.loads() அந்த பிளாக்குகளைச் சந்திக்கும் போது தோல்வியடைகிறது.

வேகத்தின் நன்மை format அளவுருவைப் பயன்படுத்துவது மிகவும் வேகமானது.

  • Structured output இல்லாமல்: 32 வினாடிகள்
  • Structured output உடன்: 5 வினாடிகள்

இது 6.4 மடங்கு வேக முன்னேற்றமாகும். உரை எவ்வாறு வடிவமைக்கப்பட வேண்டும் என்று தீர்மானிக்க மாடல் நேரத்தை வீணாக்குவதில்லை. உங்கள் schema-விற்குப் பொருந்தும் டோக்கன்களை (tokens) மட்டுமே அது உருவாக்குகிறது.

Type Safety-க்காக Pydantic-ஐப் பயன்படுத்துதல் நீங்கள் JSON schemas-களைக் கையால் எழுதத் தேவையில்லை. அவற்றை தானாகவே உருவாக்க Pydantic models-களைப் பயன்படுத்தலாம்.

  1. உங்கள் Pydantic model-ஐ வரையறுக்கவும்.
  2. Schema-வை உருவாக்க model_json_schema()-ஐப் பயன்படுத்தவும்.
  3. அந்த schema-வை Ollama-விற்கு அனுப்பவும்.
  4. தரவை ஒரே நேரத்தில் parse செய்து சரிபார்க்க (validate) model_validate_json()-ஐப் பயன்படுத்தவும்.

இந்த அணுகுமுறை AI agents-களுக்கு மிகவும் பொருத்தமானது. ஒரு agent அடுத்து எந்த கருவியைப் (tool) பயன்படுத்த வேண்டும் என்பதைத் தீர்மானிக்க இதைப் பயன்படுத்தலாம். மாடல் இல்லாத ஒரு கருவியின் பெயரை உருவாக்க முயன்றால், Pydantic அதை உடனடியாகக் கண்டறிந்துவிடும்.

தற்போதைய வரம்புகள்

  • சிறிய மாடல்களில் ஆழமாகத் தொகுக்கப்பட்ட (deeply nested) schemas சில நேரங்களில் காலியான அரேக்களை (empty arrays) வழங்கலாம்.
  • Optional புலங்கள் (fields) null-க்கு பதிலாக காலியான சரங்களை (empty strings) வழங்கலாம்.
  • பெரிய schemas உங்கள் context window-வில் அதிக இடத்தைப் பயன்படுத்தும்.

சிறந்த நடைமுறைகள்

  • சிறிய மாடல்களுக்கு எளிய பிரித்தெடுத்தலைப் (simple extraction) பயன்படுத்தவும்.
  • Validation மற்றும் agent tool selection-களுக்கு Pydantic-ஐப் பயன்படுத்தவும்.
  • சிக்கலான, nested தரவுகளுக்குப் பெரிய மாடல்களைப் பயன்படுத்தவும்.
  • Pydantic ஒரு validation error-ஐத் தரும்போது, retry logic-ஐச் சேர்க்கவும்.

உங்கள் ப்ராம்ப்ட்கள் வேலை செய்யும் என்று நம்புவதை நிறுத்துங்கள். உங்கள் உள்ளூர் LLM pipelines-களை நம்பகமானதாக மாற்ற structured outputs-ஐப் பயன்படுத்துங்கள்.

Source: https://dev.to/jangwook_kim_e31e7291ad98/ollama-structured-outputs-in-practice-getting-type-safe-json-from-local-llms-with-pydantic-m38

Optional learning community: https://t.me/GyaanSetuAi