# 外部集成审计(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`) **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` **前端到后端接口:** - 前端直接调用网关 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_SECRET` - `BETTER_AUTH_GITHUB_CLIENT_ID` - `BETTER_AUTH_GITHUB_CLIENT_SECRET` - `GITHUB_OAUTH_TOKEN` - `NEXT_PUBLIC_BACKEND_BASE_URL` - `NEXT_PUBLIC_LANGGRAPH_BASE_URL` - `NEXT_PUBLIC_STATIC_WEBSITE_ONLY` - `SKIP_ENV_VALIDATION` **后端网关(`backend/app/gateway/config.py`、`backend/app/gateway/app.py`):** - `GATEWAY_HOST` - `GATEWAY_PORT` - `CORS_ORIGINS` - `SKILL_CONTENT_API_URL` - `LOG_LEVEL` **后端主配置解析(`backend/packages/harness/deerflow/config/app_config.py`):** - `DEER_FLOW_CONFIG_PATH` - `DEER_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_TRACING` - `LANGSMITH_API_KEY` / `LANGCHAIN_API_KEY` - `LANGSMITH_PROJECT` / `LANGCHAIN_PROJECT` - `LANGSMITH_ENDPOINT` / `LANGCHAIN_ENDPOINT` - `LANGFUSE_TRACING` - `LANGFUSE_PUBLIC_KEY` - `LANGFUSE_SECRET_KEY` - `LANGFUSE_BASE_URL` **Channels(`config.example.yaml`、`backend/app/channels/service.py`):** - `FEISHU_APP_ID`、`FEISHU_APP_SECRET` - `SLACK_BOT_TOKEN`、`SLACK_APP_TOKEN` - `TELEGRAM_BOT_TOKEN` - `WECOM_BOT_ID`、`WECOM_BOT_SECRET` - `DEER_FLOW_CHANNELS_LANGGRAPH_URL` - `DEER_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 当前集成体系已经具备“多模型 + 多工具 + 多渠道 + 可选追踪”的完整闭环,且关键接入点均配置化。 - 后续规划优先级建议: 1. 统一环境变量契约与部署校验(降低配置错误率) 2. 多实例场景的持久化与文件存储升级(Postgres + 外置对象存储) 3. 外部集成回归套件(MCP OAuth、IM 渠道、搜索工具)持续化到 CI --- *集成审计完成于 2026-04-07(基于 `backend`、`frontend`、`config.example.yaml`、CI 工作流与网关/工具实现静态审计)*