介绍
# Agentic Paper Digest
{ "text": "# 智能论文摘要\n\n## 何时使用\n- 从 arXiv 和 Hugging Face 获取最新的论文摘要。\n- 生成供下游代理使用的 JSON 输出。\- 当需要轮询工作流时,运行本地 API 服务器。\n\n## 前置条件\n- Python 3 和网络访问权限。\n- 通过 `OPENAI_API_KEY` 或兼容 OpenAI 的提供商(通过 `LITELLM_API_BASE` + `LITELLM_API_KEY`)访问 LLM。\n- `git` 是引导启动的可选项;否则使用 `curl`/`wget`(或 Python)来下载仓库。\n\n## 获取代码并安装\n- 推荐:运行引导辅助脚本。如果可用则使用 git,否则回退到 zip 下载。\n\n```bash bash "{baseDir}/scripts/bootstrap.sh" ```\n\n- 通过设置 `PROJECT_DIR` 来覆盖克隆位置。\n\n```bash PROJECT_DIR="$HOME/agentic_paper_digest" bash "{baseDir}/scripts/bootstrap.sh" ```\n\n## 运行(推荐 CLI)\n\n```bash bash "{baseDir}/scripts/run_cli.sh" ```\n\n- 根据需要传递 CLI 标志。\n\n```bash bash "{baseDir}/scripts/run_cli.sh" --window-hours 24 --sources arxiv,hf ```\n\n## 运行(可选 API)\n\n```bash bash "{baseDir}/scripts/run_api.sh" ```\n\n- 触发运行并读取结果。\n\n```bash curl -X POST http://127.0.0.1:8000/api/run curl http://127.0.0.1:8000/api/status curl http://127.0.0.1:8000/api/papers ```\n\n- 如有需要,停止 API 服务器。\n\n```bash bash "{baseDir}/scripts/stop_api.sh" ```\n\n## 输出\n- CLI `--json` 会打印 `run_id`、`seen`、`kept`、`window_start` 和 `window_end`。\n- 数据存储:`data/papers.sqlite3`(位于 `PROJECT_DIR` 下)。\n- API:`POST /api/run`、`GET /api/status`、`GET /api/papers`、`GET/POST /api/topics`、`GET/POST /api/settings`。\n\n## 配置\n配置文件位于 `PROJECT_DIR/config` 中。环境变量可以在 shell 中设置,也可以通过 `.env` 文件设置。此处的包装器会自动从 `PROJECT_DIR` 加载 `.env`(可通过 `ENV_FILE=/path/to/.env` 覆盖)。\n\n**环境变量(.env 或导出的变量)**\n- `OPENAI_API_KEY`:OpenAI 模型必需(litellm 会读取此项)。\n- `LITELLM_API_BASE`、`LITELLM_API_KEY`:使用兼容 OpenAI 的代理/提供商。\n- `LITELLM_MODEL_RELEVANCE`、`LITELLM_MODEL_SUMMARY`:用于相关性和摘要的模型(如果未设置,摘要默认使用相关性模型)。\n- `LITELLM_TEMPERATURE_RELEVANCE`、`LITELLM_TEMPERATURE_SUMMARY`:数值越低输出越具确定性。\n- `LITELLM_MAX_RETRIES`:LLM 调用的重试次数。\n- `LITELLM_DROP_PARAMS=1`:丢弃不支持的参数以避免提供商报错。\n- `WINDOW_HOURS`、`APP_TZ`:时间窗口和时区。\n- `ARXIV_CATEGORIES`:逗号分隔的类别(默认包含 `cs.CL,cs.AI,cs.LG,stat.ML,cs.CR`)。\n- `ARXIV_API_BASE`、`HF_API_BASE`:如需要可覆盖源端点。\n- `ARXIV_MAX_RESULTS`、`ARXIV_PAGE_SIZE`:arXiv 分页限制。\n- `MAX_CANDIDATES_PER_SOURCE`:在 LLM 过滤前限制每个源的候选项数量。\n- `FETCH_TIMEOUT_S`、`REQUEST_TIMEOUT_S`:源获取和单次请求的超时时间。\n- `ENABLE_PDF_TEXT=1`:在摘要中包含 PDF 的首页文本;需要 `PyMuPDF`(`pip install pymupdf`)。\n- `DATA_DIR`:`papers.sqlite3` 的位置。\n- `CORS_ORIGINS`:API 服务器允许的逗号分隔来源(用于 UI)。\n- 路径覆盖:`TOPICS_PATH`、`SETTINGS_PATH`、`AFFILIATION_BOOSTS_PATH`。\n\n**配置文件**\n- `config/topics.json`:主题列表,包含 `id`、`label`、`description`、`max_per_topic` 和 `keywords`。相关性分类器必须输出完全按照此处定义的主题 ID。当 `apply_topic_caps=1` 时,`max_per_topic` 也会限制 `GET /api/papers` 中的结果。\n- `config/settings.json`:覆盖获取限制(`arxiv_max_results`、`arxiv_page_size`、`fetch_timeout_s`、`max_candidates_per_source`)。可通过 `POST /api/settings` 更新。\n- `config/affiliations.json`:通过所属机构的子字符串匹配应用的 `{pattern, weight}` 加权列表。权重会相加并上限为 1.0。无效的 JSON 会禁用加权,因此请保持文件为严格的 JSON(无尾随逗号)。\n\n## 强制工作流(按步骤操作)\n1. **您首先必须打开并阅读您下载的 github 仓库中的配置:https://github.com/matanle51/agentic_paper_digest**:\n - 加载 `config/topics.json`、`config/settings.json` 和 `config/affiliations.json`(如果存在)。\n - 在要求用户更改之前,记下当前的主题 ID、上限和获取限制。\n2. **询问用户对以下内容的偏好(协助用户)**:\n - **感兴趣的主题** → 更新 `config/topics.json`(`topics[].id/label/description/keywords`,`max_per_topic`)。\n 显示当前默认值,并询问是保留还是更改它们。\n - **时间窗口(小时)** → **仅当用户在意时**设置 `WINDOW_HOURS`(或向 CLI 传递 `--window-hours`);否则保留默认的 24h。\n - 询问用户填写以下参数(向用户解释其意图):`ARXIV_CATEGORIES`、`ARXIV_MAX_RESULTS`、`ARXIV_PAGE_SIZE`、`MAX_CANDIDATES_PER_SOURCE`。\n 询问是否保留默认值并显示当前值。\n - **模型/提供商** → 设置 `OPENAI_API_KEY` *或* `LITELLM_API_KEY`(如果使用代理则加 `LITELLM_API_BASE`),并设置 `LITELLM_MODEL_RELEVANCE`/`LITELLM_MODEL_SUMMARY`。\n - **默认不要询问**:时区、质量与成本、超时、PDF 文本、所属机构偏置、源列表。除非用户要求更改,否则使用默认值。\n3. **确认工作区路径**:询问在哪里克隆/运行。如果用户不在意,默认为 `PROJECT_DIR=\"$HOME/agentic_paper_digest\"`。切勿硬编码 `/Users/...` 路径。\n4. **引导仓库**:运行引导脚本(除非仓库已存在且用户说跳过)。\n5. **创建或验证 `.env`**:\n - 如果缺少 `.env`,则从仓库中的 `.env.example` 创建它,然后询问用户填写密钥和任何请求的偏好。\n - 确保在运行前至少设置了 `OPENAI_API_KEY` 或 `LITELLM_API_KEY` 中的一个。\n6. **应用配置更改**:\n - 直接编辑 JSON 文件(或者如果运行 API,使用 `POST /api/topics` 和 `POST /api/settings`)。\n7. **运行流水线**:\n - 对于一次性 JSON 输出,首选 `scripts/run_cli.sh`。\n - 仅当用户明确要求 UI/API 访问或轮询时,才使用 `scripts/run_api.sh`。\n8. **报告结果**:\n - 如果结果稀少,建议增加 `WINDOW_HOURS`、`ARXIV_MAX_RESULTS` 或扩大主题范围。\n\n## 获得良好结果\n- 帮助用户定义并保持主题专注且互斥,以便分类器能够选择正确的 ID。\n- 如果质量很重要,请使用比相关性模型更强的模型来生成摘要。\n- 如果使用 OpenAI 的模型,默认使用 gpt-5-mini 以获得良好的平衡。\n- 当结果稀少时,增加 `WINDOW_HOURS` 或 `ARXIV_MAX_RESULTS`,如果结果太嘈杂则降低它们。\n- 将 `ARXIV_CATEGORIES` 调整到您的研究领域。\n- 当摘要过于简略时,启用 PDF 文本(`ENABLE_PDF_TEXT=1`)。\n- 使用适度的所属机构权重来影响排名,而不会淹没相关性。\n- 主动帮助用户调整技能以获得良好结果!\n\n## 故障排除\n- 端口 8000 被占用:运行 `bash \"{baseDir}/scripts/stop_api.sh\"` 或向 API 命令传递 `--port`。\n- 结果为空:增加 `WINDOW_HOURS` 或验证 `.env` 中的 API 密钥。\n- 缺少 API 密钥错误:在运行前在 shell 中导出 `OPENAI_API_KEY` 或 `LITELLM_API_KEY`。" }