新增模型
参考《本地服务器docker部署deepseek》部署基本模型,接下来部署几个备选模型,1.5b模型能力有限。
逻辑推理增强版:DeepSeek-R1-Distill-Qwen-7B
虽然你的显卡只有 6G,但这款模型是目前的“黄金性价比”之选。
-
用途: 当 1.5B 模型的建议太笼统时,用它来做深度专利规避分析或技术路线推演。
-
运行表现: 它会占用约 4.8GB 显存。由于你还有 64G 内存,即使上下文变长,系统也会自动分流到内存,不会崩溃。
-
指令:
Bash
docker exec -it ollama ollama pull deepseek-r1:7b
长文档处理/知识库专家:Qwen2.5-7B-Instruct
如果你需要 AI 读完几十页的座舱技术手册或几百个专利摘要,Qwen 2.5 系列的稳定性非常好。
-
用途: 它是非思考型模型,反应比 R1 快,适合做海量信息的分类、打标签和提取摘要。
-
指令:
Bash
docker exec -it ollama ollama pull qwen2.5:7b
多模态视觉专家(选装):Llava-v1.5-7B
座舱领域有很多 UI 界面图、中控屏布局图、专利附图。
-
用途: 如果你想尝试让 AI 看懂一张蔚来的中控屏截图并分析其交互逻辑。你可以把图片传给它。
-
指令:
Bash
docker exec -it ollama ollama pull llava
环境配置
创建咨询目录:
mkdir -p /mnt/expand/NEV_Intelligence/01_Daily_News # 原始快讯
mkdir -p /mnt/expand/NEV_Intelligence/02_Patent_Strategy # AI生成的专利建议
mkdir -p /mnt/expand/NEV_Intelligence/03_Obsidian_Vault # Obsidian 库根目录
创建一个AI咨询专用的python虚拟环境
1. 安装虚拟环境工具:
sudo apt install python3-venv python3-full -y
2.创建虚拟环境: 在你的脚本目录(例如 /home/kai/cockpit_agent)下执行:
python3 -m venv ~/venv_ai
3.激活并安装库:
source ~/venv_ai/bin/activate
# 现在你会看到命令行开头多了个 (venv_ai),这时再安装就没问题了
pip install feedparser requests
# 安装解析库
pip install beautifulsoup4
4.修改你的脚本运行方式: 以后手动执行时,先执行 source ~/venv_ai/bin/activate。 或者在 crontab 或 run_ai.sh 脚本中,使用虚拟环境的完整路径来运行: ~/venv_ai/bin/python3 /home/kai/cockpit_monitor.py
关于虚拟环境的简单使用说明:
python3 -m venv 名字 = 建个房间。
source 名字/bin/activate = 走入房间(这时装东西是安全的)。
名字/bin/python3 脚本 = 隔空让房间里的 Python 干活(最适合自动化)。
安装完成后如果想要退出可以使用deactivate
功能探索
试水需求:
我希望每日跟踪智能座舱领域的行业动态,特别是蔚小理这类的头部企业(但是不限于这类企业)。同时希望了解这些企业在该领域的专利相关动向,结合动向提出相关的专利发散思考。
通过gemini生成基础脚本
cockpit_monitor.py
import requests
import feedparser
import os
import json
from datetime import datetime
from bs4 import BeautifulSoup
# --- 配置区 ---
OLLAMA_API = "http://localhost:11434/api/generate"
BASE_PATH = "/mnt/expand/NEV_Intelligence"
VAULT_PATH = os.path.join(BASE_PATH, "03_Obsidian_Vault")
NEWS_PATH = os.path.join(BASE_PATH, "01_Daily_News")
STRATEGY_PATH = os.path.join(BASE_PATH, "02_Patent_Strategy")
for p in [VAULT_PATH, NEWS_PATH, STRATEGY_PATH]:
os.makedirs(p, exist_ok=True)
COMPANIES = ["蔚来", "小鹏", "理想", "华为", "比亚迪", "小米", "极氪", "特斯拉", "问界", "智界", "引望"]
TECH_WORDS = ["座舱", "交互", "专利", "车载", "大模型", "屏", "HMI", "系统", "软件", "智驾"]
def ask_ai(content):
prompt = f"你是一个座舱专家,请针对以下动态给出专利布局发散想法:{content}"
payload = {"model": "deepseek-r1:1.5b", "prompt": prompt, "stream": True}
full_response = ""
try:
with requests.post(OLLAMA_API, json=payload, timeout=300, stream=True) as r:
for line in r.iter_lines():
if line:
chunk = json.loads(line.decode('utf-8'))
part = chunk.get('response', '')
full_response += part
print(part, end='', flush=True)
return full_response
except Exception as e:
return f"AI分析失败: {e}"
def run_task():
date_str = datetime.now().strftime("%Y-%m-%d")
all_findings = []
# --- 渠道 1: 36Kr (RSS) ---
print(f"[{datetime.now()}] 正在抓取 36Kr RSS...")
try:
kr_feed = feedparser.parse("https://36kr.com/feed")
print(f"36Kr 发现 {len(kr_feed.entries)} 条原始条目")
for entry in kr_feed.entries:
all_findings.append({'title': entry.title, 'summary': entry.summary})
except Exception as e:
print(f"36Kr 抓取失败: {e}")
# --- 渠道 2: 盖世汽车 (网页抓取) ---
print(f"正在抓取 盖世汽车...")
gasgoo_url = "https://auto.gasgoo.com/auto-news/C-103-106-107-108-109-110-303-409-501-601"
try:
r = requests.get(gasgoo_url, headers={'User-Agent': 'Mozilla/5.0'}, timeout=15)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
# 针对盖世结构的各种可能进行抓取
items = soup.select('.list-item') or soup.select('.content') or soup.find_all('div', class_='content')
for item in items:
t = item.find('h4') or item.find('h2') or item.find('a')
p = item.find('p')
if t:
all_findings.append({'title': t.get_text(strip=True), 'summary': p.get_text(strip=True) if p else ""})
print(f"盖世汽车解析完成,共汇总待筛选条目: {len(all_findings)}")
except Exception as e:
print(f"盖世抓取异常: {e}")
# --- 统一过滤与 AI 分析 ---
match_count = 0
full_report = f"# {date_str} 座舱情报汇总\n\n"
# 建立一个集合防止两个源抓到重复的新闻
seen_titles = set()
for news in all_findings:
title = news['title']
if title in seen_titles: continue
text = (title + news['summary']).lower()
if any(c.lower() in text for c in COMPANIES) and any(t.lower() in text for t in TECH_WORDS):
match_count += 1
seen_titles.add(title)
print(f"\n[{match_count}] 命中: {title}")
# 存入 01
with open(os.path.join(NEWS_PATH, f"{date_str}_news.txt"), "a", encoding="utf-8") as f:
f.write(f"标题: {title}\n摘要: {news['summary']}\n\n")
# AI 分析
ai_strategy = ask_ai(title + " " + news['summary'])
# 存入 02
with open(os.path.join(STRATEGY_PATH, f"{date_str}_strategy.md"), "a", encoding="utf-8") as f:
f.write(f"### {title}\n{ai_strategy}\n\n---\n")
# 汇总 03
full_report += f"## {title}\n\n**原文:** {news['summary']}\n\n**分析:**\n{ai_strategy}\n\n---\n"
if match_count > 0:
with open(os.path.join(VAULT_PATH, f"{date_str}_汇总报告.md"), "w", encoding="utf-8") as f:
f.write(full_report)
print(f"\n[成功] 处理完成,共生成 {match_count} 条报告。")
else:
print("\n[结果] 未发现匹配座舱动态的新闻。")
if __name__ == "__main__":
run_task()
shell执行脚本:
#!/bin/bash
# 1. 确保 Ollama 容器在运行(如果没开则启动)
if [ ! "$(docker ps -q -f name=ollama)" ]; then
echo "正在启动 Ollama 容器..."
docker start ollama
# 给模型加载留一点点时间
sleep 15
fi
# 2. 检查硬盘是否挂载
if [ ! -d "/mnt/expand/NEV_Intelligence" ]; then
echo "错误:硬盘未挂载在 /mnt/expand,请检查硬件!"
exit 1
fi
# 3. 执行 Python 分析脚本
echo "正在抓取新能源汽车行业动态并调用 DeepSeek 进行专利发散分析..."
~/venv_ai/bin/python3 ./cockpit_monitor.py
echo "分析完成!请打开 Obsidian 查看报告。"
至于生成的结果,嗯~ 没眼看~,怎么才能优化好一些?