⭐ +154 today Python

google/langextract

🔗 https://github.com/google/langextract ↗

LangExtract Table of Contents Introduction Why LangExtract? Quick Start Installation API Key Setup for Cloud Models Adding Custom Model Providers Using OpenAI Models Using Local LLMs with Ollama More Examples Romeo and Juliet Full Text Extraction Medication Extraction Radiology Report Structuring: RadExtract Community Providers Contributing Testing How to Cite Disclaimer Introduction LangExtract is a Python library that uses LLMs to extract structured information from unstructured text documents based on user-defined instructions. It processes materials such as clinical notes or reports, identifying and organizing key details while ensuring the extracted data corresponds to the source text. Try the live demo → Run grounded extraction on Romeo and Juliet in your browser, no install required. Why LangExtract? Precise Source Grounding: Maps every extraction to its exact location in the source text, enabling visual highlighting for easy traceability and verification. Reliable Structured Outputs: Enforces a consistent output schema based on your few-shot examples, leveraging controlled generation in supported models like Gemini to guarantee robust, structured results. Optimized for Long Documents: Overcomes the "needle-in-a-haystack" challenge of large document extraction by using an optimized strategy of text chunking, parallel processing, and multiple passes for higher recall. Interactive Visualization: Instantly generates a self-contained, interactive HTML file to visualize and review thousands of extracted entities in their original context. Flexible LLM Support: Supports your preferred models, from cloud-based LLMs like the Google Gemini family to local open-source models via the built-in Ollama interface. Adaptable to Any Domain: Define extraction tasks for any domain using just a few examples. LangExtract adapts to your needs without requiring any model fine-tuning. Leverages LLM World Knowledge: Utilize precise prompt wording and few-shot examples to influence how the extraction task may utilize LLM knowledge. The accuracy of any inferred information and its adherence to the task specification are contingent upon the selected LLM, the complexity of the task, the clarity of the prompt instructions, and the nature of the prompt examples. Quick Start Note: Using cloud-hosted models like Gemini requires an API key. See the API Key Setup section for instructions on how to get and configure your key. Extract structured information with just a few lines of code. 1. Define Your Extraction Task First, create a prompt that clearly describes what you want to extract. Then, provide a high-quality example to guide the model. import langextract as lx import textwrap # 1. Define the prompt and extraction rules prompt = textwrap . dedent ( """ \ Extract characters, emotions, and relationships in order of appearance. Use exact text for extractions. Do not paraphrase or overlap entities. Provide meaningful attributes for each entity to add context.""" ) # 2. Provide a high-quality example to guide the model examples = [ lx . data . ExampleData ( text = "ROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun." , extractions = [ lx . data . Extraction ( extraction_class = "character" , extraction_text = "ROMEO" , attributes = { "emotional_state" : "wonder" } ), lx . data . Extraction ( extraction_class = "emotion" , extraction_text = "But soft!" , attributes = { "feeling" : "gentle awe" } ), lx . data . Extraction ( extraction_class = "relationship" , extraction_text = "Juliet is the sun" , attributes = { "type" : "metaphor" } ), ] ) ] Note: Examples drive model behavior. Each extraction_text should ideally be verbatim from the example's text (no paraphrasing), listed in order of appearance. LangExtract raises Prompt alignment warnings by default if examples don't follow this pattern—resolve these for best results. Grounding: LLMs may occasionally extract content from few-shot examples rather than the input text. LangExtract automatically detects this: extractions that cannot be located in the source text will have char_interval = None . Filter these out with [e for e in result.extractions if e.char_interval] to keep only grounded results. 2. Run the Extraction Provide your input text and the prompt materials to the lx.extract function. # The input text to be processed input_text = "Lady Juliet gazed longingly at the stars, her heart aching for Romeo" # Run the extraction result = lx . extract ( text_or_documents = input_text , prompt_description = prompt , examples = examples , model_id = "gemini-3.5-flash" , ) For advanced constraints beyond examples, such as enum values on extraction attributes, Gemini and OpenAI support output_schema with or without few-shot examples. See Custom output schemas . Model Selection : gemini-3.5-flash is the recommended default, offering strong extraction quality for LangExtract's schema-constrained workflows. For high-volume or cost-sensitive workloads, consider the current stable Flash-Lite model, gemini-3.1-flash-lite ; for highly complex tasks requiring deeper reasoning, evaluate a current Gemini Pro model from the official model documentation. For large-scale or production use, a paid Gemini tier is suggested to increase throughput and avoid rate limits. See the rate-limit documentation for details. Model Lifecycle : Note that Gemini models have a lifecycle with defined retirement dates. Users should consult the official model version documentation to stay informed about the latest stable and legacy versions. 3. Visualize the Results The extractions can be saved to a .jsonl file, a popular format for working with language model data. LangExtract can then generate an interactive HTML visualization from this file to review the entities in context. # Save the results to a JSONL file lx . io . save_annotated_documents ([ result ], output_name = "extraction_results.jsonl" , output_dir = "." ) # Generate the visualization from the file html_content = lx . visualize ( "extraction_results.jsonl" ) with open ( "visualization.html" , "w" ) as f : if hasattr ( html_content , 'data' ): f . write ( html_content . data ) # For Jupyter/Colab else : f . write ( html_content ) This creates an animated and interactive HTML file: Note on LLM Knowledge Utilization: This example demonstrates extractions that stay close to the text evidence - extracting "longing" for Lady Juliet's emotional state and identifying "yearning" from "gazed longingly at the stars." The task could be modified to generate attributes that draw more heavily from the LLM's world knowledge (e.g., adding "identity": "Capulet family daughter" or "literary_context": "tragic heroine" ). The balance between text-evidence and knowledge-inference is controlled by your prompt instructions and example attributes. Scaling to Longer Documents For larger texts, you can process entire documents directly from URLs with parallel processing and enhanced sensitivity: # Process Romeo & Juliet directly from Project Gutenberg result = lx . extract ( text_or_documents = "https://www.gutenberg.org/files/1513/1513-0.txt" , prompt_description = prompt , examples = examples , model_id = "gemini-3.5-flash" , extraction_passes = 3 , # Improves recall through multiple passes max_workers = 20 , # Parallel processing for speed max_char_buffer = 1000 # Smaller contexts for better accuracy ) This approach can extract hundreds of entities from full novels while maintaining high accuracy. The interactive visualization seamlessly handles large result sets, making it easy to explore hundreds of entities from the output JSONL file. See the full Romeo and Juliet extraction example → for detailed results and performance insights. Vertex AI Batch Processing Save costs on large-scale tasks by enabling Vertex AI Batch API with language_model_params that include vertexai=True , project , location , and a batch config.

內容為收集當日抓取的 repo 描述原文,完整資訊請見 GitHub 原頁。