LLM 分析

使用 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)。

分类(Classify)

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)用于命名结果列。

摘要(Summarize)

anysite llm summarize dataset.yaml --source profiles \
  --fields "name,headline,summary,experience" \
  --max-length 50 \
  --output-column bio_summary

--max-length(默认 100)限制摘要长度(单位:词)。

增强(Enrich)

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 支持的属性类型:

生成(Generate)

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。

匹配(Match)

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)是保留匹配所需的最低匹配分数。

去重(Deduplicate)

anysite llm deduplicate dataset.yaml --source profiles \
  --key name \
  --threshold 0.8

--key/-k(默认 name)用于在比较前对记录分块 — 只有该字段前三个字符(转小写后)相同的记录才会被 互相比较,以限制大数据源上的 LLM 调用次数。--threshold(默认 0.8)是判定为重复记录的最低置信度。

在数据集管道中使用 LLM

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 缓存 全部

后续步骤

SQL Querying

使用 DuckDB SQL 查询和分析增强后的数据

Examples

查看完整的端到端工作流示例