舆情分析工作流 CLI 工具 - 从数据获取到 AI 分析再到报告生成的一站式解决方案。
- 专项管理 - 创建、查看、删除舆情监控专项
- 数据获取 - 从 project-mcp 获取舆情数据,支持多种输出格式
- AI 分析 - 内置 8 种分析功能(摘要、情感、观点、主题、实体、KOL、地域、互动)
- MapReduce 架构 - 支持 500+ 条数据的大规模分析,自动分块并行处理
- 报告生成 - 基于 Jinja2 模板生成专业 Markdown 报告
- 工作流编排 - 一键执行完整分析流程
- 配置管理 - 支持主模型和轻量模型双配置
# 安装 pipx(如果没有)
brew install pipx
pipx ensurepath
# 克隆并安装
git clone https://github.com/longGGGGGG/xuanji-cli.git
cd xuanji-cli
pipx install -e .安装后 xuanji 命令全局可用,无需激活虚拟环境。
git clone https://github.com/yourusername/xuanji-cli.git
cd xuanji-cli
python3 -m venv .venv
source .venv/bin/activate
pip install -e .注意:虚拟环境安装后,每次使用前需要
source .venv/bin/activate
xuanji --versionxuanji-cli 需要配置 LLM 才能进行 AI 分析。配置文件位于 ~/.xuanji/config.json。
{
"default_limit": 500,
"default_analysis": "summary,opinion",
"llm": {
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key": "sk-xxxxx",
"model_name": "MiniMax-M2.5"
},
"llm_light": {
"model_name": "qwen3.5-flash"
},
"default_project": "xxxx",
"cookie": "remember_user_token=xxxxx"
}xuanji config init按提示输入 LLM API 信息即可完成配置。
# 舆情平台 Cookie(必须,用于访问舆情数据)
xuanji config set cookie "remember_user_token=your-cookie-value"
# 主模型配置(必须)
xuanji config set llm.base_url "https://api.openai.com/v1/"
xuanji config set llm.api_key "sk-your-api-key"
xuanji config set llm.model_name "gpt-4"
# 轻量模型配置(可选,用于 MapReduce 子任务,更快更便宜)
xuanji config set llm_light.model_name "qwen3.5-flash"| 提供商 | Base URL |
|---|---|
| OpenAI | https://api.openai.com/v1/ |
| Kimi | https://api.kimi.com/coding/ |
| 阿里云通义 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
| 本地模型 | http://localhost:8000/v1/ |
xuanji config show| 配置项 | 说明 | 示例 |
|---|---|---|
cookie |
舆情平台认证 Cookie | remember_user_token=xxx |
llm.base_url |
主模型 API 地址 | https://api.openai.com/v1/ |
llm.api_key |
主模型 API 密钥 | sk-xxx |
llm.model_name |
主模型名称 | gpt-4 |
llm_light.model_name |
轻量模型名称 | qwen3.5-flash |
llm_light.base_url |
轻量模型 API 地址(可选,默认同主模型) | - |
llm_light.api_key |
轻量模型 API 密钥(可选,默认同主模型) | - |
default_project |
默认专项名称 | 北京全量 |
default_limit |
默认数据条数 | 100 |
default_analysis |
默认分析功能 | summary,opinion |
xuanji workflow quick "项目名称" "output.md"xuanji workflow run \
--project "北京全量" \
--keyword "北京&舆情" \
--limit 500 \
--analysis summary,opinion \
--output "report.md"xuanji data get --project "北京全量" --limit 500 | \
xuanji analyze --functions summary,sentiment,opinion | \
xuanji report --output "report.md"xuanji
├── config # 配置管理
├── project # 专项管理
├── data # 数据获取
├── analyze # AI 分析
├── report # 报告生成
├── workflow # 工作流编排
├── functions # 列出分析功能
└── templates # 列出报告模板
xuanji config init # 交互式初始化配置
xuanji config show # 查看当前配置
xuanji config set <key> <value> # 设置配置项
xuanji config get <key> # 获取配置项
xuanji config unset <key> # 删除配置项示例:
xuanji config set llm.base_url "https://api.openai.com/v1/"
xuanji config set llm.api_key "sk-xxx"
xuanji config set llm.model_name "gpt-4"
xuanji config set llm_light.model_name "qwen3.5-flash"
xuanji config set default_limit 500xuanji project list # 列出所有专项
xuanji project create "关键词" --name "名称" # 创建专项
xuanji project get --name "名称" # 查看专项详情
xuanji project delete <id> # 删除专项示例:
# 创建一个监控"北京舆情"的专项
xuanji project create "北京&舆情" --name "北京全量"
# 查看专项详情
xuanji project get --name "北京全量"xuanji data get --project "名称" [选项] # 获取数据
xuanji data stats --project "名称" # 数据统计选项:
| 选项 | 说明 | 默认值 |
|---|---|---|
--project |
专项名称 | 必填 |
--limit |
获取条数 | 100 |
--format |
输出格式:jsonl/json/table |
jsonl |
示例:
# 获取 500 条数据,JSON 格式保存
xuanji data get --project "北京全量" --limit 500 --format json > data.json
# 查看数据统计
xuanji data stats --project "北京全量"
# 表格形式预览
xuanji data get --project "北京全量" --limit 10 --format tablexuanji analyze --functions <功能列表> [选项]
xuanji functions # 列出所有分析功能可用分析功能:
| 功能 | 说明 |
|---|---|
summary |
生成整体摘要,概括舆情主要内容和趋势 |
sentiment |
情感分析,统计正面/负面/中性情绪分布 |
opinion |
观点提取,识别主要立场和意见分歧 |
topics |
主题聚类,识别讨论热点和话题分布 |
entities |
实体识别,提取人名、地名、机构名等 |
kol |
KOL 分析,识别关键意见领袖及其影响力 |
geography |
地域分析,识别舆情传播的地域分布 |
engagement |
互动分析,分析点赞、转发、评论数据 |
示例:
# 从管道读取数据进行分析
xuanji data get --project "北京全量" | xuanji analyze --functions summary,opinion
# 多功能分析
xuanji data get --project "北京全量" | xuanji analyze --functions summary,sentiment,opinion,topicsxuanji report --output <文件名> [选项]
xuanji templates # 列出所有报告模板可用模板:
| 模板 | 说明 |
|---|---|
opinion-analysis |
观点分析报告(默认) |
sentiment-dashboard |
情感分析仪表盘 |
briefing |
执行简报 |
示例:
# 使用默认模板生成报告
xuanji data get --project "北京全量" | \
xuanji analyze --functions summary,opinion | \
xuanji report --output report.md
# 使用情感仪表盘模板
xuanji data get --project "北京全量" | \
xuanji analyze --functions sentiment | \
xuanji report --template sentiment-dashboard --output sentiment.mdxuanji workflow run [选项] # 完整工作流
xuanji workflow quick <项目名> <输出文件> # 快速工作流选项:
| 选项 | 说明 | 默认值 |
|---|---|---|
--project |
专项名称 | 必填 |
--keyword |
搜索关键词 | - |
--limit |
数据条数 | 100 |
--analysis |
分析功能列表 | summary,opinion |
--template |
报告模板 | opinion-analysis |
--output |
输出文件 | 必填 |
示例:
# 快速工作流(使用配置默认值)
xuanji workflow quick "北京全量" "daily-report.md"
# 完整工作流(自定义参数)
xuanji workflow run \
--project "北京全量" \
--keyword "北京&舆情" \
--limit 500 \
--analysis summary,sentiment,opinion \
--template opinion-analysis \
--output "comprehensive-report.md"对于大数据量分析,可以手动启用 MapReduce 模式(通过 --mapreduce 参数):
- Map 阶段:数据分块(每块 50 条),使用轻量模型并行分析
- Reduce 阶段:合并子结果,使用主模型生成最终报告
默认行为:不启用 MapReduce,使用分层采样策略(智能采样 + 主模型分析)。
# 使用 MapReduce 分析 500 条数据
xuanji workflow run --project "北京全量" --limit 500 --mapreduce --output report.md配置轻量模型以降低成本:
xuanji config set llm_light.model_name "qwen3.5-flash"# 导出为 JSON
xuanji data get --project "北京全量" --limit 500 --format json > data.json
# 导出为 JSON Lines(便于流式处理)
xuanji data get --project "北京全量" --limit 500 --format jsonl > data.jsonl# 获取数据 → 多维度分析 → 生成情感仪表盘
xuanji data get --project "北京全量" --limit 500 | \
xuanji analyze --functions summary,sentiment,opinion,topics,entities | \
xuanji report --template sentiment-dashboard --output "dashboard.md"xuanji-cli/
├── xuanji/
│ ├── __init__.py
│ ├── cli.py # CLI 入口
│ ├── commands/ # 子命令
│ │ ├── config.py # 配置管理
│ │ ├── project.py # 专项管理
│ │ ├── data.py # 数据获取
│ │ ├── analyze.py # AI 分析
│ │ ├── report.py # 报告生成
│ │ └── workflow.py # 工作流编排
│ ├── core/ # 核心模块
│ │ ├── models.py # 数据模型
│ │ ├── analyzer.py # AI 分析引擎(含 MapReduce)
│ │ └── llm.py # LLM 客户端
│ ├── templates/ # 报告模板
│ │ ├── opinion-analysis.md.j2
│ │ ├── sentiment-dashboard.md.j2
│ │ └── briefing.md.j2
│ └── vendor/ # 第三方封装
│ └── project_mcp.py # project-mcp 包装器
├── tests/ # 测试
├── pyproject.toml # 项目配置
└── README.md
- Python >= 3.9
- click - CLI 框架
- jinja2 - 模板引擎
- pydantic - 数据验证
- tabulate - 表格输出
- httpx - HTTP 客户端
- project-mcp - 底层数据获取(需单独安装)
运行 xuanji config init 配置 LLM 参数,或手动设置:
xuanji config set llm.base_url "https://api.openai.com/v1/"
xuanji config set llm.api_key "sk-xxx"
xuanji config set llm.model_name "gpt-4"配置轻量模型用于 MapReduce 子任务:
xuanji config set llm_light.model_name "qwen3.5-flash"默认使用分层采样策略,大数据量时可手动启用 MapReduce 并行处理:
# 启用 MapReduce 模式
xuanji workflow run --project "项目" --limit 500 --mapreduce --output "report.md"
# 或减少数据量
xuanji workflow run --project "项目" --limit 200 --output "report.md"MIT