google / google/adk-python

feat: Add LangExtract tool integration for structured information extraction

已关闭
#4,548 1 条评论 0 个 reaction 已指派 1 人 已被 @GWeale 认领 在 GitHub 查看
community repo needs review tools
主要语言
Python
星标
21.5k
派生
4k
平均合并
1 天 14 小时
30 天内合并 PR
37

描述

## 🔴 Required Information

### Is your feature request related to a specific problem?

ADK currently has tool adapters for LangChain (`LangchainTool`) and CrewAI (`CrewaiTool`), but lacks a native integration for [LangExtract](https://github.com/google/langextract) — Google's own library for extracting structured information from unstructured text using LLMs with precise source grounding.

Users who want to use LangExtract within ADK agents currently have to manually wrap `lx.extract()` in a `FunctionTool` or `BaseTool` subclass, which requires boilerplate and doesn't follow ADK conventions.

### Describe the Solution You'd Like

Add a first-class `LangExtractTool` adapter in `src/google/adk/tools/langextract_tool.py` that:

- Extends `BaseTool` with a custom function declaration exposing `text` and `prompt_description` as LLM-visible parameters
- Pre-configures extraction settings (examples, model_id, extraction_passes, etc.) at construction time
- Runs `lx.extract()` via `asyncio.to_thread()` to avoid blocking the event loop
- Includes a companion `LangExtractToolConfig` for YAML-based agent configuration
- Follows the same patterns as `LangchainTool` and `CrewaiTool` (ImportError handling, `from_config()`, etc.)

### Impact on your work

This enables ADK agents to perform structured extraction (entities, attributes, relationships) from documents out of the box, which is a common use case for enterprise AI workflows. Since LangExtract is a Google library, having native ADK support is a natural fit.

### Willingness to contribute

Yes — I have an implementation ready to submit as a PR.

---

## 🟡 Recommended Information

### Proposed API / Implementation

```python
import langextract as lx
from google.adk.tools.langextract_tool import LangExtractTool

tool = LangExtractTool(
name='extract_entities',
description='Extract named entities from text.',
examples=[lx.data.ExampleData(...)],
model_id='gemini-2.5-flash',
)

agent = Agent(model='gemini-2.5-flash', name='extraction_agent', tools=[tool])
```

### Additional Context

- LangExtract repo: https://github.com/google/langextract
- Follows the same adapter pattern as `LangchainTool` and `CrewaiTool`
- Includes unit tests with mocked `lx.extract()` calls

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。