8.1 KiB
8.1 KiB
外部集成审计(Tech Focus)
分析日期: 2026-04-07
APIs 与外部服务
LLM Provider(通过配置动态切换):
- OpenAI / Anthropic / Gemini / DeepSeek / MiniMax / OpenRouter(示例在
config.example.yaml的models)- SDK/适配层:
langchain_openai、langchain_anthropic、langchain_google_genai、langchain_deepseek(backend/packages/harness/pyproject.toml) - 认证:
config.yaml中模型字段支持$ENV_VAR注入(backend/packages/harness/deerflow/config/app_config.py)
- SDK/适配层:
MCP(Model Context Protocol)服务:
- 支持
stdio/sse/http三种传输(backend/packages/harness/deerflow/mcp/client.py)- 管理接口:
GET/PUT /api/mcp/config(backend/app/gateway/routers/mcp.py) - 配置文件:
extensions_config.json(backend/packages/harness/deerflow/config/extensions_config.py) - OAuth:HTTP/SSE MCP 可启用 token 自动刷新(
backend/packages/harness/deerflow/mcp/oauth.py)
- 管理接口:
Web 搜索与抓取:
- DuckDuckGo(
ddgs,免 key):backend/packages/harness/deerflow/community/ddg_search/tools.py - Jina Reader:
https://r.jina.ai/(可选JINA_API_KEY,backend/packages/harness/deerflow/community/jina_ai/jina_client.py) - Tavily(可配置 api_key):
backend/packages/harness/deerflow/community/tavily/tools.py - Firecrawl(可配置 api_key):
backend/packages/harness/deerflow/community/firecrawl/tools.py - InfoQuest(
INFOQUEST_API_KEY):backend/packages/harness/deerflow/community/infoquest/infoquest_client.py
IM 渠道:
- Feishu/Lark、Slack、Telegram、WeCom(
backend/app/channels/*.py)- Feishu:
app_id/app_secret - Slack:
bot_token/app_token - Telegram:
bot_token - WeCom:
bot_id/bot_secret
- Feishu:
前端到后端接口:
- 前端直接调用网关 REST:
/api/models、/api/memory、/api/skills、/api/mcp/config、/api/threads/*/uploads(frontend/src/core/*/api.ts) - 前端通过
@langchain/langgraph-sdk调用 LangGraph API(frontend/src/core/api/api-client.ts)
结论:
- 集成模式以“配置驱动 + 适配层解耦”为主;新增三方服务优先走
config.yaml/extensions_config.json,避免硬编码。
数据存储
会话状态与持久化:
- Checkpointer 支持:
memory/sqlite/postgres(backend/packages/harness/deerflow/config/checkpointer_config.py) - 默认示例为 SQLite(
config.example.yaml的checkpointer段) - 同步 Store 与 checkpointer 类型保持一致(
backend/packages/harness/deerflow/runtime/store/provider.py)
文件与工件存储:
- 上传与工件基于本地文件系统路径(
backend/app/gateway/routers/uploads.py、backend/app/gateway/routers/artifacts.py、backend/packages/harness/deerflow/uploads/manager.py)
缓存:
- 未检测到 Redis/Memcached 等独立缓存服务;主要使用进程内缓存/单例(如配置缓存与客户端缓存,见
backend/packages/harness/deerflow/config/*.py、frontend/src/core/api/api-client.ts)
结论:
- 当前默认可单机落地(SQLite + 本地文件);若进入多实例部署,应优先切换 Postgres checkpointer/store 并外置文件存储策略。
身份认证与权限
前端身份认证:
better-auth(frontend/src/server/better-auth/config.ts、frontend/src/app/api/auth/[...all]/route.ts)- 当前配置启用
emailAndPassword,GitHub 相关变量为可选(frontend/src/env.js)
MCP 授权:
- MCP HTTP/SSE OAuth 支持
client_credentials与refresh_token(backend/packages/harness/deerflow/mcp/oauth.py) - 可针对每个 MCP server 配置 headers/env/oauth(
backend/packages/harness/deerflow/config/extensions_config.py)
结论:
- 认证面分为“前端会话认证”和“后端集成凭证认证”两条线;规划时应分离处理,避免混用同一密钥域。
观测与可观测性
Tracing:
- LangSmith(
LANGSMITH_*/LANGCHAIN_*)与 Langfuse(LANGFUSE_*)双支持(backend/packages/harness/deerflow/config/tracing_config.py) - 回调挂载在模型创建阶段(
backend/packages/harness/deerflow/tracing/factory.py、backend/packages/harness/deerflow/models/factory.py)
日志:
- Gateway 使用 Python logging,支持
LOG_LEVEL(backend/app/gateway/app.py)
结论:
- Tracing 已具备按环境开关能力,建议在 staging 强制开启至少一个 provider,减少线上问题追踪成本。
CI/CD 与部署集成
CI:
- GitHub Actions:
- 后端单测(
.github/workflows/backend-unit-tests.yml) - 前后端 lint/type/build(
.github/workflows/lint-check.yml)
- 后端单测(
部署:
- 一体化入口:
make dev/make up(根Makefile) - Nginx 统一反代前端 + LangGraph + Gateway(
backend/README.md、docker/nginx/nginx.local.conf、docker/nginx/nginx.conf) - Docker 编排文件存在:
docker/docker-compose.yaml、docker/docker-compose-dev.yaml
结论:
- 已形成本地开发与容器部署双通道;下一步提升点是把 e2e(Playwright)纳入 CI 的默认门禁。
环境变量(关键清单)
前端(frontend/src/env.js):
BETTER_AUTH_SECRETBETTER_AUTH_GITHUB_CLIENT_IDBETTER_AUTH_GITHUB_CLIENT_SECRETGITHUB_OAUTH_TOKENNEXT_PUBLIC_BACKEND_BASE_URLNEXT_PUBLIC_LANGGRAPH_BASE_URLNEXT_PUBLIC_STATIC_WEBSITE_ONLYSKIP_ENV_VALIDATION
后端网关(backend/app/gateway/config.py、backend/app/gateway/app.py):
GATEWAY_HOSTGATEWAY_PORTCORS_ORIGINSSKILL_CONTENT_API_URLLOG_LEVEL
后端主配置解析(backend/packages/harness/deerflow/config/app_config.py):
DEER_FLOW_CONFIG_PATHDEER_FLOW_EXTENSIONS_CONFIG_PATH- 以及
config.yaml/extensions_config.json中所有$VAR占位符
Tracing(backend/packages/harness/deerflow/config/tracing_config.py):
LANGSMITH_TRACING/LANGCHAIN_TRACING_V2/LANGCHAIN_TRACINGLANGSMITH_API_KEY/LANGCHAIN_API_KEYLANGSMITH_PROJECT/LANGCHAIN_PROJECTLANGSMITH_ENDPOINT/LANGCHAIN_ENDPOINTLANGFUSE_TRACINGLANGFUSE_PUBLIC_KEYLANGFUSE_SECRET_KEYLANGFUSE_BASE_URL
Channels(config.example.yaml、backend/app/channels/service.py):
FEISHU_APP_ID、FEISHU_APP_SECRETSLACK_BOT_TOKEN、SLACK_APP_TOKENTELEGRAM_BOT_TOKENWECOM_BOT_ID、WECOM_BOT_SECRETDEER_FLOW_CHANNELS_LANGGRAPH_URLDEER_FLOW_CHANNELS_GATEWAY_URL
社区工具与凭证:
JINA_API_KEY(backend/packages/harness/deerflow/community/jina_ai/jina_client.py)INFOQUEST_API_KEY(backend/packages/harness/deerflow/community/infoquest/infoquest_client.py)- Claude/Codex 凭证相关变量(
backend/packages/harness/deerflow/models/credential_loader.py)
结论:
- 环境变量来源分散于前端 env schema、后端配置加载器和工具客户端;后续应维护一份单独的“env contract”用于部署校验。
Webhook 与回调
Incoming:
- 未检测到典型公网 webhook 接收实现;IM 渠道主要是 WebSocket/轮询主动连接(
backend/app/channels/*.py)
Outgoing:
- MCP OAuth token endpoint(按 server 配置动态请求,
backend/packages/harness/deerflow/mcp/oauth.py) - 远端技能内容拉取接口(
SKILL_CONTENT_API_URL,backend/app/gateway/config.py) - 第三方搜索/抓取 API(Jina、InfoQuest、Tavily、Firecrawl)
结论:
- 当前外部交互以“主动调用”为主,公网暴露面较小;若新增 webhook,应同步补充签名校验与重放保护。
总结(规划导向)
- DeerFlow 当前集成体系已经具备“多模型 + 多工具 + 多渠道 + 可选追踪”的完整闭环,且关键接入点均配置化。
- 后续规划优先级建议:
- 统一环境变量契约与部署校验(降低配置错误率)
- 多实例场景的持久化与文件存储升级(Postgres + 外置对象存储)
- 外部集成回归套件(MCP OAuth、IM 渠道、搜索工具)持续化到 CI
集成审计完成于 2026-04-07(基于 backend、frontend、config.example.yaml、CI 工作流与网关/工具实现静态审计)