一个可直接运行的“LCEL 读取在线网页并总结”的小项目。它使用 LangChain v1 的 LCEL(管道表达式)来组合:抓取网页 → 提取文本 → 分块处理 → 并行总结 → 聚合输出,并把结果保存为 JSON 和 Markdown。
- 通过
httpx抓取指定 URL 的网页 HTML。 - 使用
BeautifulSoup提取正文文本(去除脚本/样式标签)。 - 将长文本按固定长度分块,避免一次性超长输入导致模型错误。
- 使用 LCEL 的
.map()并行处理每个分块,生成摘要要点与短总结。 - 聚合所有分块的结果,输出:页面标题、URL、总摘要、要点列表、原文长度等。
- 将输出保存到
output/output.json和output/output.md。
本项目使用 Python 虚拟环境来管理依赖,避免与系统 Python 包冲突。
# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境(macOS/Linux)
source .venv/bin/activate
# 激活虚拟环境(Windows)
.venv\Scripts\activate激活后,命令行提示符前会显示 (.venv),表示已进入虚拟环境。
pip install -r requirements.txt- 方式 A:在系统环境中设置:
export OPENAI_API_KEY="你的密钥" # 如果使用兼容 OpenAI 的第三方端点,可能还需要: export OPENAI_BASE_URL="https://你的服务/v1" export LLM_MODEL="gpt-4o" # 或第三方服务支持的模型名
- 方式 B:复制
.env.example为.env并填写:或者使用本仓库统一命名(将自动映射为 OPENAI_*):OPENAI_API_KEY=sk-xxxx OPENAI_BASE_URL=https://你的服务/v1 LLM_MODEL=gpt-4o
LLM_API_KEY=sk-xxxx LLM_BASE_URL=https://你的服务/v1 LLM_MODEL=gpt-4o
source .venv/bin/activate
# 基本运行
python main.py --url https://example.com
# 如果遇到 403,可尝试自定义浏览器 UA 或放宽 SSL
python main.py --url https://chatgpt.com \
--user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
--insecure执行成功后,会在 output/ 目录生成:
output.json:结构化结果output.md:可读性更好的摘要 Markdown
- LCEL 管道表达式:
prompt | llm | parser,可读、可组合、易维护。 .map():对列表输入逐项运行同一个链,适合对分块并行总结。RunnableLambda:用纯 Python 函数封装抓取与解析等非 LLM 步骤。RunnableParallel:并行组合多个子任务输出为一个字典。
- 如果你的服务不支持
gpt-4o,请在.env或环境变量中把LLM_MODEL设置为该服务支持的模型名。 - 某些站点(如启用更严格的防爬策略)可能直接返回
403 Forbidden。此时可:- 使用
--user-agent伪装常见浏览器 UA; - 搭配
--insecure放宽 SSL 验证并开启 http 回退; - 如仍失败,建议更换为开放访问的 URL(如
https://www.wikipedia.org/)。
- 使用