mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-01 13:18:10 +00:00
* feat: adopt directory-based docs versioning with Edge channel Switch docs.crewai.com from navigation-only versioning (every version selector entry rendered the same docs/<lang>/* source files) to Mintlify's directory-based versioning so each version selector entry renders its own snapshot. Add an "Edge" channel under docs/edge/<lang>/* that always reflects main HEAD for unreleased work, eliminating pre-release leakage onto frozen release labels. External links to canonical /<lang>/* URLs are preserved via wildcard redirects that always land on the current default version. Layout: - docs/edge/<lang>/* rolling source (you edit here) - docs/edge/enterprise-api.*.yaml - docs/v<X.Y.Z>/<lang>/* frozen, immutable snapshots - docs/v<X.Y.Z>/enterprise-api.*.yaml - docs/images/ shared, append-only - docs/docs.json nav + redirects URLs follow the Mintlify-idiomatic shape: /edge/<lang>/<page> for Edge, /v<X.Y.Z>/<lang>/<page> for every frozen snapshot. The wildcard redirects /<lang>/:slug* -> /<default>/<lang>/:slug* keep stale links working, and every freeze rewrites them (plus all per-section/per-page redirects) so destinations always resolve to the current default without depending on a second redirect hop. Release flow integration (devtools release): - New module crewai_devtools.docs_versioning.freeze() materialises docs/v<X.Y.Z>/ from docs/edge/, rewrites openapi: refs inside the snapshot, inserts the version into every language block in docs.json, and refreshes all redirect destinations. - _update_docs_and_create_pr() in cli.py now calls that freeze during Phase 2 of devtools release. Edge changelogs are updated first (so the snapshot freeze picks them up), then the snapshot is staged alongside docs.json, branched as docs/freeze-v<X.Y.Z>, and the PR is titled [docs-freeze] docs: snapshot and changelog for v<X.Y.Z> — the title prefix the new CI guard reads. - The PR still gates tag, GitHub release, PyPI publish, and the enterprise release as before; no new PRs are added. - Pre-releases (1.X.YaN, 1.X.YbN, ...) skip the snapshot — they ride Edge — and the docs PR title omits the [docs-freeze] prefix. - docs_check (AI-generated docs scaffolding) writes to docs/edge/<lang>/* so newly-generated unreleased docs land in Edge and never accidentally touch a frozen snapshot. Migration scripts (one-shot): - scripts/docs/freeze_historical_versions.py reconstructs all 16 historical snapshots (v1.10.0 .. v1.14.7) from git tags via git archive | tar, rewriting openapi: MDX refs so each snapshot reads its own enterprise-api YAML rather than the live one. - scripts/docs/prefix_version_paths.py one-shot-migrates docs.json: rewrites every page path in 16 versioned blocks to point under docs/v<X.Y.Z>/, inserts a new Edge entry per language, tags v1.14.7 as Latest (default), prunes pages whose target file doesn't exist in the snapshot (e.g. docs/ar/ didn't exist before v1.12.0), and writes the wildcard + per-section redirects. - scripts/docs/freeze_current_edge.py is now a thin CLI wrapper around docs_versioning.freeze for manual one-off freezes (e.g. retroactively snapshotting a forgotten release). CI guards (.github/workflows/docs-snapshots.yml): - Frozen snapshots under docs/v[0-9]*/ are immutable; only PRs whose title contains [docs-freeze] (i.e. release-cut PRs generated by devtools release or the manual wrapper) may modify them. - Images under docs/images/ are append-only since snapshots share a single image directory. Deleting or renaming an image breaks every historical snapshot that still references it. Restored docs/images/crewai-otel-export.png from PR #3673; it was deleted in PR #4908 but v1.10.0 / v1.10.1 snapshots still reference it. Restoring instead of editing the snapshots preserves historical rendering fidelity and validates the new append-only rule retroactively. Tests: - lib/devtools/tests/test_docs_versioning.py covers the freeze: file copy, openapi rewrite, version insertion, default demotion, redirect upserts, per-section redirect rewriting, idempotency, and invalid inputs. Verified locally with mintlify broken-links: 0 broken links across the full site (Edge + 16 frozen versions, 4 locales). AGENTS.md (repo root) is the contributor guide for the new model; RELEASING.md is the release-cut runbook; README's Contribution section links to both. Co-authored-by: Cursor <cursoragent@cursor.com> * style: resolve linter issues --------- Co-authored-by: Cursor <cursoragent@cursor.com>
203 lines
7.5 KiB
Plaintext
203 lines
7.5 KiB
Plaintext
---
|
|
title: Snowflake Search Tool
|
|
description: O `SnowflakeSearchTool` permite que agentes CrewAI executem consultas SQL e realizem buscas semânticas em data warehouses Snowflake.
|
|
icon: snowflake
|
|
mode: "wide"
|
|
---
|
|
|
|
# `SnowflakeSearchTool`
|
|
|
|
## Descrição
|
|
|
|
O `SnowflakeSearchTool` foi desenvolvido para conectar-se a data warehouses Snowflake e executar consultas SQL com recursos avançados como pool de conexões, lógica de tentativas e execução assíncrona. Esta ferramenta permite que agentes CrewAI interajam com bases de dados Snowflake, sendo ideal para tarefas de análise de dados, relatórios e inteligência de negócios que requerem acesso a dados empresariais armazenados no Snowflake.
|
|
|
|
## Instalação
|
|
|
|
Para utilizar esta ferramenta, é necessário instalar as dependências requeridas:
|
|
|
|
```shell
|
|
uv add cryptography snowflake-connector-python snowflake-sqlalchemy
|
|
```
|
|
|
|
Ou, alternativamente:
|
|
|
|
```shell
|
|
uv sync --extra snowflake
|
|
```
|
|
|
|
## Passos para Começar
|
|
|
|
Para usar eficazmente o `SnowflakeSearchTool`, siga estes passos:
|
|
|
|
1. **Instale as Dependências**: Instale os pacotes necessários usando um dos comandos acima.
|
|
2. **Configure a Conexão com o Snowflake**: Crie um objeto `SnowflakeConfig` com suas credenciais do Snowflake.
|
|
3. **Inicialize a Ferramenta**: Crie uma instância da ferramenta com a configuração necessária.
|
|
4. **Execute Consultas**: Utilize a ferramenta para rodar consultas SQL no seu banco de dados Snowflake.
|
|
|
|
## Exemplo
|
|
|
|
O exemplo a seguir demonstra como usar o `SnowflakeSearchTool` para consultar dados de um banco de dados Snowflake:
|
|
|
|
```python Code
|
|
from crewai import Agent, Task, Crew
|
|
from crewai_tools import SnowflakeSearchTool, SnowflakeConfig
|
|
|
|
# Create Snowflake configuration
|
|
config = SnowflakeConfig(
|
|
account="your_account",
|
|
user="your_username",
|
|
password="your_password",
|
|
warehouse="COMPUTE_WH",
|
|
database="your_database",
|
|
snowflake_schema="your_schema"
|
|
)
|
|
|
|
# Initialize the tool
|
|
snowflake_tool = SnowflakeSearchTool(config=config)
|
|
|
|
# Define an agent that uses the tool
|
|
data_analyst_agent = Agent(
|
|
role="Data Analyst",
|
|
goal="Analyze data from Snowflake database",
|
|
backstory="An expert data analyst who can extract insights from enterprise data.",
|
|
tools=[snowflake_tool],
|
|
verbose=True,
|
|
)
|
|
|
|
# Example task to query sales data
|
|
query_task = Task(
|
|
description="Query the sales data for the last quarter and summarize the top 5 products by revenue.",
|
|
expected_output="A summary of the top 5 products by revenue for the last quarter.",
|
|
agent=data_analyst_agent,
|
|
)
|
|
|
|
# Create and run the crew
|
|
crew = Crew(agents=[data_analyst_agent],
|
|
tasks=[query_task])
|
|
result = crew.kickoff()
|
|
```
|
|
|
|
Você também pode customizar a ferramenta com parâmetros adicionais:
|
|
|
|
```python Code
|
|
# Initialize the tool with custom parameters
|
|
snowflake_tool = SnowflakeSearchTool(
|
|
config=config,
|
|
pool_size=10,
|
|
max_retries=5,
|
|
retry_delay=2.0,
|
|
enable_caching=True
|
|
)
|
|
```
|
|
|
|
## Parâmetros
|
|
|
|
### Parâmetros do SnowflakeConfig
|
|
|
|
A classe `SnowflakeConfig` aceita os seguintes parâmetros:
|
|
|
|
- **account**: Obrigatório. Identificador da conta Snowflake.
|
|
- **user**: Obrigatório. Nome de usuário do Snowflake.
|
|
- **password**: Opcional*. Senha do Snowflake.
|
|
- **private_key_path**: Opcional*. Caminho para o arquivo de chave privada (alternativa à senha).
|
|
- **warehouse**: Obrigatório. Nome do warehouse do Snowflake.
|
|
- **database**: Obrigatório. Banco de dados padrão.
|
|
- **snowflake_schema**: Obrigatório. Schema padrão.
|
|
- **role**: Opcional. Papel de usuário Snowflake.
|
|
- **session_parameters**: Opcional. Parâmetros de sessão personalizados como dicionário.
|
|
|
|
*É necessário fornecer `password` ou `private_key_path`.
|
|
|
|
### Parâmetros do SnowflakeSearchTool
|
|
|
|
O `SnowflakeSearchTool` aceita os seguintes parâmetros durante a inicialização:
|
|
|
|
- **config**: Obrigatório. Um objeto `SnowflakeConfig` contendo detalhes da conexão.
|
|
- **pool_size**: Opcional. Número de conexões no pool. O padrão é 5.
|
|
- **max_retries**: Opcional. Número máximo de tentativas para consultas que falharem. Padrão é 3.
|
|
- **retry_delay**: Opcional. Intervalo entre tentativas em segundos. Padrão é 1.0.
|
|
- **enable_caching**: Opcional. Define se o cache de resultados de consultas será habilitado. Padrão é True.
|
|
|
|
## Uso
|
|
|
|
Ao utilizar o `SnowflakeSearchTool`, você deve fornecer os seguintes parâmetros:
|
|
|
|
- **query**: Obrigatório. Consulta SQL a ser executada.
|
|
- **database**: Opcional. Sobrescreve o banco de dados padrão especificado na configuração.
|
|
- **snowflake_schema**: Opcional. Sobrescreve o schema padrão especificado na configuração.
|
|
- **timeout**: Opcional. Tempo limite da consulta em segundos. O padrão é 300.
|
|
|
|
A ferramenta retornará os resultados da consulta como uma lista de dicionários, onde cada dicionário representa uma linha com os nomes das colunas como chaves.
|
|
|
|
```python Code
|
|
# Example of using the tool with an agent
|
|
data_analyst = Agent(
|
|
role="Data Analyst",
|
|
goal="Analyze sales data from Snowflake",
|
|
backstory="An expert data analyst with experience in SQL and data visualization.",
|
|
tools=[snowflake_tool],
|
|
verbose=True
|
|
)
|
|
|
|
# The agent will use the tool with parameters like:
|
|
# query="SELECT product_name, SUM(revenue) as total_revenue FROM sales GROUP BY product_name ORDER BY total_revenue DESC LIMIT 5"
|
|
# timeout=600
|
|
|
|
# Create a task for the agent
|
|
analysis_task = Task(
|
|
description="Query the sales database and identify the top 5 products by revenue for the last quarter.",
|
|
expected_output="A detailed analysis of the top 5 products by revenue.",
|
|
agent=data_analyst
|
|
)
|
|
|
|
# Run the task
|
|
crew = Crew(
|
|
agents=[data_analyst],
|
|
tasks=[analysis_task]
|
|
)
|
|
result = crew.kickoff()
|
|
```
|
|
|
|
## Recursos Avançados
|
|
|
|
### Pool de Conexões
|
|
|
|
O `SnowflakeSearchTool` implementa pool de conexões para melhorar a performance reutilizando conexões com o banco de dados. Você pode controlar o tamanho do pool com o parâmetro `pool_size`.
|
|
|
|
### Tentativas Automáticas
|
|
|
|
A ferramenta tenta novamente consultas que falharem automaticamente, usando backoff exponencial. O comportamento das tentativas pode ser ajustado pelos parâmetros `max_retries` e `retry_delay`.
|
|
|
|
### Cache de Resultados de Consultas
|
|
|
|
Para melhorar a performance em consultas repetidas, a ferramenta pode armazenar resultados em cache. Este recurso está habilitado por padrão, mas pode ser desativado ao definir `enable_caching=False`.
|
|
|
|
### Autenticação por Par de Chaves
|
|
|
|
Além de autenticação por senha, a ferramenta também suporta autenticação por par de chaves para maior segurança:
|
|
|
|
```python Code
|
|
config = SnowflakeConfig(
|
|
account="your_account",
|
|
user="your_username",
|
|
private_key_path="/path/to/your/private/key.p8",
|
|
warehouse="COMPUTE_WH",
|
|
database="your_database",
|
|
snowflake_schema="your_schema"
|
|
)
|
|
```
|
|
|
|
## Tratamento de Erros
|
|
|
|
O `SnowflakeSearchTool` inclui uma gestão abrangente de erros para situações comuns no Snowflake:
|
|
|
|
- Falhas de conexão
|
|
- Timeout de consultas
|
|
- Erros de autenticação
|
|
- Erros de banco de dados e schema
|
|
|
|
Quando um erro ocorrer, a ferramenta tentará repetir a operação (se estiver configurado) e fornecerá informações detalhadas sobre o erro.
|
|
|
|
## Conclusão
|
|
|
|
O `SnowflakeSearchTool` oferece uma maneira poderosa de integrar data warehouses Snowflake com agentes CrewAI. Com recursos como pool de conexões, tentativas automáticas e cache de consultas, ele possibilita acesso eficiente e confiável aos dados empresariais. Esta ferramenta é particularmente útil para tarefas de análise de dados, relatórios e inteligência de negócios que demandam acesso a dados estruturados armazenados no Snowflake. |