使用 AI 模型对数据进行分类、摘要、增强和去重
Anysite CLI 集成了多个 LLM 提供商,为数据集管道数据添加 AI 驱动的分析能力。提供 6 种操作:分类、摘要、
增强、生成、匹配和去重。每种操作都读取某个数据集数据源已采集的
Parquet 文件 — 没有可以传入任意 JSON 的 --file 输入方式。
需要 llm 可选依赖包:pip install "anysite-cli[llm]"
# Interactive
anysite llm setup
# Non-interactive (CI/agents)
anysite llm setup --provider openai --api-key sk-... --no-test
anysite llm setup --provider anthropic --api-key-env ANTHROPIC_API_KEY
--api-key 直接接受密钥值;--api-key-env 则引用一个环境变量。--model 用于覆盖默认模型;
--no-test 跳过连接测试。
| 提供商 | 默认模型 |
|---|---|
| OpenAI | gpt-4.1-mini |
| Anthropic | claude-sonnet-4-5-20250514 |
提供商设置保存在 ~/.anysite/config.yaml 的 llm.providers.<name> 下。
每种操作都共享这一组选项:--provider、--model、--parallel/-j(默认 5)、--rate-limit、
--temperature、--max-tokens、--no-cache、--format/-f、--output/-o、--quiet/-q、
--prompt、--prompt-file,以及 --dry-run(打印构建出的提示词而不调用 LLM)。
anysite llm classify dataset.yaml --source profiles \
--categories "developer,recruiter,executive,other" \
--fields "name,headline,summary"
如果省略 --categories/-c,LLM 会根据前 20 条记录自动检测 3-7 个类别。--multi 允许每条记录属于
多个类别。--output-column(默认 category)用于命名结果列。
anysite llm summarize dataset.yaml --source profiles \
--fields "name,headline,summary,experience" \
--max-length 50 \
--output-column bio_summary
--max-length(默认 100)限制摘要长度(单位:词)。
anysite llm enrich dataset.yaml --source profiles \
--add "seniority:junior/mid/senior/lead" \
--add "is_technical:boolean" \
--add "years_experience:number" \
--add "primary_skill:string"
--add name:spec 支持的属性类型:
"seniority:junior/mid/senior""is_technical:boolean""years_experience:number""quality_score:1-10",会被视为整数"primary_skill:string"anysite llm generate dataset.yaml --source profiles \
--prompt "Write a 2-sentence professional intro for {name} who works as {headline}" \
--temperature 0.7 \
--output-column intro_text
必须提供 --prompt 或 --prompt-file 之一。--output-column 默认值为 text。如果未指定
--temperature,generate 默认使用 0.7;其他所有操作默认使用 0.0。
anysite llm match dataset.yaml \
--source-a profiles \
--source-b companies \
--top-k 3
匹配操作使用 --fields-a 和 --fields-b 来选择字段(而不是共用的 --fields)。--top-k
(默认 3)限制每条 source-a 记录的匹配数量;--threshold(默认 0.5)是保留匹配所需的最低匹配分数。
anysite llm deduplicate dataset.yaml --source profiles \
--key name \
--threshold 0.8
--key/-k(默认 name)用于在比较前对记录分块 — 只有该字段前三个字符(转小写后)相同的记录才会被
互相比较,以限制大数据源上的 LLM 调用次数。--threshold(默认 0.8)是判定为重复记录的最低置信度。
sources:
- id: profiles
endpoint: /api/linkedin/user
from_file: users.txt
input_key: user
- id: profiles_enriched
type: llm
dependency:
from_source: profiles
field: name
llm:
- type: classify
categories: "developer,recruiter,executive,sales,other"
output_column: role_type
- type: enrich
add:
- "seniority:junior/mid/senior/lead"
- "is_technical:boolean"
- type: summarize
max_length: 50
output_column: bio_summary
单个 LLM 数据源内可以链式使用多个 LLM 步骤。它们会按顺序执行,每一步都为数据集添加新的列。
响应会缓存在 ~/.anysite/llm_cache.db 中,以避免重复调用 API:
anysite llm cache-stats
anysite llm cache-clear
anysite llm classify dataset.yaml --source profiles \
--categories "dev,recruiter,exec" --no-cache
| 选项 | 描述 | 适用对象 |
|---|---|---|
--source, -s |
要处理的数据源 | 除 match 外的所有操作(match 使用 --source-a/--source-b) |
--fields |
包含在 LLM 提示词中的字段(逗号分隔) | classify、summarize、enrich、deduplicate、generate |
--fields-a / --fields-b |
各数据源的字段 | match |
--categories, -c |
逗号分隔的类别 | classify |
--multi |
允许每条记录属于多个类别 | classify |
--add |
属性规格 name:type_or_values(可重复使用) |
enrich |
--prompt / --prompt-file |
自定义或基于文件的提示词模板 | 全部 |
--temperature |
LLM 温度(0.0-1.0) | 全部 |
--max-tokens |
最大响应令牌数 | 全部 |
--max-length |
摘要的最大词数 | summarize |
--output-column |
结果列的名称 | classify、summarize、generate |
--top-k |
每条记录的匹配数量 | match |
--key, -k |
用于分块/比较的字段 | deduplicate |
--threshold |
匹配或重复的置信度阈值(0.0-1.0) | match、deduplicate |
--provider / --model |
覆盖已配置的 LLM 提供商或模型 | 全部 |
--dry-run |
打印构建出的提示词而不调用 LLM | 全部 |
--no-cache |
跳过 LLM 缓存 | 全部 |
使用 DuckDB SQL 查询和分析增强后的数据
查看完整的端到端工作流示例