跳到主内容
快讯直播
AI智模界
教程

自托管 LongCat-DeepResearch 调研智能体

适用场景

需要把「深度调研」这件事放在自己机器上的人:公司内部有大量文档、行业资料不适合直接丢给外部 API;或者你希望检索来源、抓取规则、引用核验标准完全自己说了算。LongCat-DeepResearch 这类开源深度调研智能体的工作方式是:先把问题拆成子问题 → 调用搜索与网页抓取 → 交叉比对多个来源 → 生成带引用的长报告。把模型、搜索后端、抓取服务都部署在本地,整条链路可以只从你指定的出口出网。

环境与前置条件

  • 操作系统:Ubuntu 22.04 / 24.04 LTS,其他 Linux 发行版同理;Windows 建议走 WSL2
  • Python:3.10 及以上,具体下限以官方文档当前版本为准
  • 推理引擎:vLLM 或 SGLang 任一,需要能提供 OpenAI 兼容的 /v1/chat/completions
  • 显卡:全精度权重对显存要求较高,单卡 80GB 级别比较从容;显存有限时使用官方或社区提供的量化版本,实际占用以模型卡说明为准
  • 内存:64GB 起步,检索与网页解析环节比较吃内存
  • 磁盘:模型权重 + 网页缓存 + 报告产物,建议预留 300GB 以上 SSD
  • Docker 与 docker compose:用来起 SearXNG 搜索后端
  • 网络:能访问你要检索的站点;只做内网检索的场景可以不开放公网出口

分步骤部署

1. 建目录、拉代码

```bash

mkdir -p ~/deepresearch && cd ~/deepresearch

git clone <官方仓库地址> longcat-deepresearch

cd longcat-deepresearch

```

仓库地址、目录名、脚本入口都以官方仓库为准。拉下来之后能看到 README、推理脚本和示例配置,就算这步没问题。

2. 创建 Python 环境

```bash

python3 -m venv .venv

source .venv/bin/activate

pip install -U pip

pip install -r requirements.txt

```

如果仓库把「模型推理依赖」和「agent 依赖」拆成两个文件,按 README 的说明分别安装。装完自检一下:

```bash

python -c "import torch; print(torch.cuda.is_available())"

```

输出 True 说明 PyTorch 认到了显卡。

3. 下载模型权重

用 huggingface-cli 或 modelscope 把权重拉到本地目录:

```bash

pip install -U huggingface_hub

export HF_ENDPOINT=https://hf-mirror.com # 网络受限时可用镜像,以官方文档说明为准

huggingface-cli download <模型仓库名> --local-dir ./models/longcat-dr

```

模型名、是否使用量化版本,以官方模型卡当前说明为准。完成后 ./models/longcat-dr 下应出现 config.json、tokenizer 相关文件与权重分片。

4. 起推理服务(OpenAI 兼容)

```bash

python -m vllm.entrypoints.openai.api_server \

--model ./models/longcat-dr \

--served-model-name longcat-dr \

--host 0.0.0.0 --port 8000 \

--tensor-parallel-size 1 \

--max-model-len 32768 \

--gpu-memory-utilization 0.90

```

这一步把权重加载进显存并暴露 HTTP 接口。日志里出现 Uvicorn running on http://0.0.0.0:8000 即为启动成功。max-model-len 不要盲目调大,显存吃紧时优先降它。

5. 起自建搜索后端(SearXNG)

新建 searxng/docker-compose.yml:

```yaml

services:

searxng:

image: searxng/searxng:latest # tag 以官方文档当前推荐为准

ports:

  • "8888:8080"

volumes:

  • ./config:/etc/searxng

restart: unless-stopped

```

```bash

cd searxng && docker compose up -d

```

再改 searxng/config/settings.yml,确认两件事:search.formats 里包含 json,以及 server.secret_key 换成一个随机字符串。改完重启容器。

SearXNG 的作用是把多个搜索引擎的结果聚合成一个接口,agent 只跟你自己的搜索网关说话。检索源可控,也省掉了直接对接商业搜索 API 的麻烦。

6. 部署网页抓取服务

很多调研目标是 JS 渲染的页面,纯 HTTP 请求抓不到正文。用 Playwright 起一个无头浏览器:

```bash

pip install playwright

playwright install chromium

playwright install-deps chromium

```

如果仓库自带抓取服务(例如用 FastAPI 包一层 Playwright),按 README 启动即可;没有的话可以先只启用静态抓取,在配置里关掉动态渲染,后续再补:

```bash

python -m app.scraper_server --host 0.0.0.0 --port 8890

```

7. 配置 agent

```bash

cp configs/config.example.yaml configs/config.yaml

```

需要对齐的字段大致是这几类(字段名以仓库实际配置为准):

```yaml

llm:

base_url: http://127.0.0.1:8000/v1

api_key: EMPTY

model: longcat-dr

temperature: 0.2

search:

provider: searxng

endpoint: http://127.0.0.1:8888/search

engines: [bing, duckduckgo, google]

top_k: 8

fetcher:

mode: browser # browser 或 http

endpoint: http://127.0.0.1:8890/fetch

timeout: 30

max_pages_per_task: 30

verifier:

enabled: true

min_sources_per_claim: 2 # 每条结论至少两个独立来源

output:

dir: ./reports

formats: [markdown, json]

```

verifier 这段是这类智能体和普通「搜索 + 总结」的分水岭:它会把报告里每条带引用的事实句拆出来,回到原始网页做比对,对不上的就标记为未核实。

8. 跑第一个任务

```bash

python -m longcat_deepresearch.run \

--config configs/config.yaml \

--question "国内新能源汽车充电桩的运营商格局近两年有哪些变化" \

--max-turns 12 \

--out reports/demo

```

--max-turns 是「规划—检索—阅读—再规划」的循环上限。调大能挖得更深,耗时和 token 消耗也按比例上涨,第一次先用小值试。

9. 引用核验与报告导出

跑完后 reports/demo/ 下通常会有:

  • report.md:带 [1] [2] 角标的正文
  • citations.json:每条引用的 URL、抓取时间、原文片段
  • trace.jsonl:每一轮的搜索词、打开的页面、中间结论

核验脚本一般随仓库提供:

```bash

python -m longcat_deepresearch.verify \

--report reports/demo/report.md \

--citations reports/demo/citations.json \

--out reports/demo/verify.json

```

输出里每条 claim 会带 supported / partial / unsupported 状态。需要 PDF 时本地用 pandoc 转:

```bash

pandoc reports/demo/report.md -o reports/demo/report.pdf --pdf-engine=xelatex

```

验证部署是否成功

按四层逐一验证:

```bash

1. 推理服务

curl -s http://127.0.0.1:8000/v1/models | head

期望:返回 JSON,data 数组里出现你配置的模型名

2. 搜索后端

curl -s "http://127.0.0.1:8888/search?q=test&format=json" | head -c 300

期望:返回 {"query": "test", "results": [...]}

3. 抓取服务

curl -s -X POST http://127.0.0.1:8890/fetch \

-H 'Content-Type: application/json' \

-d '{"url":"https://example.com"}' | head -c 300

期望:返回页面标题与正文文本

4. 端到端

ls reports/demo/

期望:report.md、citations.json、trace.jsonl 都存在,

且 report.md 里的角标编号能在 citations.json 中找到对应条目

```

判断报告质量有个土办法:随机挑三条带引用的结论,点开 citations.json 里的 URL,看原文是否真的支持这句话。三条都对得上,说明检索和核验链路是通的;有一条对不上,先去查 trace.jsonl 里那一条对应的抓取记录。

常见报错与解决

1. torch.cuda.OutOfMemoryError: CUDA out of memory

原因:显存不足,通常是上下文长度或显存利用率设得太大。

解决:降上下文、降并发,或换量化权重。

```bash

python -m vllm.entrypoints.openai.api_server \

--model ./models/longcat-dr --max-model-len 16384 \

--gpu-memory-utilization 0.85 --max-num-seqs 4

```

2. 搜索接口返回 403 或 format not supported

原因:SearXNG 默认不开放 JSON 输出,settings.yml 的 formats 里没加 json,或者 secret_key 还是默认值。

解决:改配置后重启容器。

```bash

grep -n "formats" -A3 searxng/config/settings.yml

docker compose -f searxng/docker-compose.yml restart

```

3. BrowserType.launch: Executable doesn't exist at ...

原因:只装了 Playwright 的 Python 包,没有下载浏览器二进制,或者缺系统依赖库。

解决:

```bash

playwright install chromium

playwright install-deps chromium

```

4. httpx.ConnectError: All connection attempts failed / Connection refused

原因:推理服务或抓取服务只监听了 127.0.0.1,而 agent 跑在容器里,容器内的 127.0.0.1 指向容器自身。

解决:服务端加 --host 0.0.0.0,配置里把地址改成宿主机 IP 或 compose 网络中的服务名。

5. 抓取一段时间后进程被 OOM Killer 杀掉

原因:并发抓取数过高,浏览器实例堆积。

解决:限制并发与单任务页数。

```yaml

fetcher:

concurrency: 2

max_pages_per_task: 20

```

同时在 systemd 或 compose 里给服务设内存上限,让它超限重启,而不是把整台机器拖垮。

6. 报告里引用编号对不上、出现「幻觉引用」

原因:长上下文里模型记错了来源编号,或者页面抓回来是空正文。

解决:打开 verifier 并提高 min_sources_per_claim;同时翻 trace.jsonl,把超时、403 的页面从引用来源里排除——抓取失败的页面不能充当证据。

后续维护

备份:需要备份的不是模型权重(可重新下载),而是 configs/、reports/、trace.jsonl 以及你的检索源白名单。写个定时任务打包到对象存储即可。

升级:推理引擎和 agent 仓库分开升级,一次只动一个。升级前把可用版本导出成锁文件(pip freeze > requirements.lock),出问题能回滚。模型权重与 agent 代码建议配套使用,具体对应关系以官方文档当前版本为准。

日志与监控:推理侧关注显存占用、请求排队时长、每秒输出 token 数;agent 侧关注每轮耗时、检索命中率、抓取失败率、核验通过率。核验通过率明显下降,通常是检索源质量变差或抓取被反爬拦截,而不是模型变笨了。容器日志用 docker compose logs -f --tail=200 查看,生产环境接一套 Prometheus + Grafana 更省心。

成本与安全:搜索后端和抓取服务不要直接暴露到公网,需要外部访问时前面加一层带鉴权的反向代理。给单次任务设 token 上限和最大轮数,避免一个失控任务把显卡占满一整天。网页缓存建议保留,同一 URL 短期内重复抓取既慢又容易触发封禁。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。