Week1 day1 搭建网页摘要小应用(第一个 LLM 实战项目)

 


 
核心流程:
  1. 使用爬虫抓取网页文本(fetch_website_contents,定义在 scraper.py
  2. 调用大模型 Chat Completions API(OpenAI 标准接口,你可以无缝替换 DeepSeek)
  3. 使用「系统提示词 + 用户提示词」标准消息结构,让模型生成网页摘要
  4. 封装函数实现:输入网址 → 抓取网页 → LLM 生成摘要 → Markdown 渲染展示
核心知识点:
  • API 消息固定结构:[{"role":"system"},{"role":"user"}]
  • system prompt:定义 AI 身份、输出规则;user prompt:传入任务素材
  • OpenAI SDK 完全兼容架构,DeepSeek、Anthropic、Gemini 大部分可以平滑迁移
  • 简易爬虫只能抓取静态网页,JS 渲染网站无法抓取(进阶方案:Selenium,在 community-contributions 文件夹)
重点:所有接口返回读取代码 response.choices[0].message.content 不需要改动。

二、前置文件

1)scraper.py(同目录必须新建,课程自带爬虫代码)

python
 
运行
 
 
import requests
from bs4 import BeautifulSoup

def fetch_website_contents(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    return soup.get_text(separator="\n", strip=True)

 

 

2).env 文件(项目根目录)

env
 
 
# 填入你的DeepSeek密钥
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

 

3)提前安装依赖

bash
 
 
pip install openai python-dotenv requests beautifulsoup4

 

 

三、完整可直接运行代码(已改造适配 DeepSeek,替代原版 OpenAI)

复制到你的 ipynb 单元格逐块运行
python
 
运行
 
 
# imports
import os
from dotenv import load_dotenv
from scraper import fetch_website_contents
from IPython.display import Markdown, display
from openai import OpenAI

# 加载.env环境变量
load_dotenv(override=True)
api_key = os.getenv('OPENAI_API_KEY')

# 校验密钥
if not api_key:
    print("未找到API key,请检查.env文件!")
elif api_key.strip() != api_key:
    print("密钥首尾存在多余空格,请清理!")
else:
    print("密钥加载成功!")

# ========== 唯一改动:接入DeepSeek API ==========
openai = OpenAI(
    api_key = api_key,
    base_url = "https://api.deepseek.com/v1"
)

# 简单连通测试
message = "Hello, GPT! This is my first ever message to you! Hi!"
messages = [{"role": "user", "content": message}]
response = openai.chat.completions.create(model="deepseek-v4-flash", messages=messages)
print(response.choices[0].message.content)

 

 
python
 
运行
 
 
# 测试网页抓取
ed = fetch_website_contents("https://edwarddonner.com")
print(ed[:500]) # 打印前500字符预览

 

 
python
 
运行
 
 
# 定义提示词
system_prompt = """
你是一位毒舌助手,分析网页内容,输出简短、风趣犀利的摘要,忽略导航栏无关文本。
使用Markdown格式输出,不要用代码块包裹,直接返回markdown文本。
"""

user_prompt_prefix = """
以下是网页原文内容。
请生成网页简短摘要。
如果包含新闻、公告信息,则一并总结。

"""

# 构造标准消息结构
def messages_for(website):
    return [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt_prefix + website}
    ]
 

 

python
 
运行
 
 
# 核心函数:输入url返回摘要
def summarize(url):
    website = fetch_website_contents(url)
    response = openai.chat.completions.create(
        model = "deepseek-v4-flash",
        messages = messages_for(website)
    )
    return response.choices[0].message.content

# 封装函数,markdown美化输出
def display_summary(url):
    summary = summarize(url)
    display(Markdown(summary))

 

 
python
 
运行
 
 
# 运行测试
display_summary("https://edwarddonner.com")
# display_summary("https://cnn.com")
# display_summary("https://anthropic.com")

 

 

四、关键注意事项(避坑)

  1. ❌ 不要使用 deepseek-reasoner(R1),后续课程 Agent 工具调用不兼容;固定使用 deepseek-v4-flash
  2. 网页抓取限制:React、Vue 等 JS 动态网站(openai.com)抓不到正文,需要 Selenium
  3. Jupyter 特性:修改 system_prompt / 函数代码后必须重新运行单元格,内存才会更新
  4. 如果你想换回原版 OpenAI,只需要删除 base_url="https://api.deepseek.com/v1",模型名改回 gpt-4.1-mini

五、课后练习代码模板(课程留给你自主拓展)

python
 
运行
 
 
# 练习:邮件自动生成主题
# Step 1: Create your prompts
system_prompt = """
你是邮箱助手,根据邮件正文,生成简短、贴切的邮件标题。
只输出标题,不要多余内容。
"""

# 粘贴邮件正文
email_content = """
这里粘贴邮件文本
"""

# Step 2: Make the messages list
messages = [
    {"role":"system", "content":system_prompt},
    {"role":"user", "content":email_content}
]

# Step 3: Call LLM
response = openai.chat.completions.create(
    model="deepseek-v4-flash",
    messages=messages
)

# Step 4: print the result
print("推荐邮件标题:", response.choices[0].message.content)

 





posted @ 2026-08-02 16:23  漫漫长路</>  阅读(11)  评论(0)    收藏  举报