PentAGI v2.2.0 配置参数详解
PentAGI v2.2.0 的 .env 配置参数详解:加载机制与优先级、13 家 LLM Provider、Embedding、搜索引擎、Docker 沙箱安全参数、监听与认证、数据库、代理超时、Agent 监督逐类讲解,附生产配置模板与 6 条实测排障,2026-10-23 溯源与实测。
PentAGI v2.2.0 配置参数详解
目标:面向已完成 PentAGI Compose 部署的运维与安全工程师,逐类讲清
.env配置文件中各参数的作用、默认值与生产建议。本文参数说明全部溯源自 PentAGI v2.2.0 源码(.env.example、backend/docs/config.md),关键行为均在本机 v2.2.0 实例上实测验证,溯源与实测日期为 2026-10-23。
一、环境信息
| 项目 | 值 |
|---|---|
| 软件版本 | PentAGI v2.2.0(2026-10-05 发布,官方 Releases 与官网双源确认) |
| 实测镜像 | vxcontrol/pentagi:2.2.0(Docker Hub,2026-10-05 推送) |
| 部署方式 | Docker Compose(4 服务:pentagi / pgvector / pgexporter / scraper),部署过程见本专栏《PentAGI Docker Compose 部署指南》 |
| 参数溯源文件 | 源码 .env.example(623 行)、backend/docs/config.md(2236 行)、backend/pkg/config/config.go |
| 溯源与实测日期 | 2026-10-23 |
参数体量实测:v2.2.0 的 .env.example 共含 345 个变量赋值行,其中约 133 行属于可选的 Graphiti / Neo4j / Langfuse 可观测栈,PentAGI 主栈核心配置约 200 个。本文覆盖主栈全部功能类别,可选栈仅讲与主栈衔接的入口参数。
合规提示:PentAGI 是面向授权渗透测试场景的自动化工具。所有配置示例仅用于自有环境或已获书面授权的测试目标,文中参数不涉及任何攻击结果的编造。
二、前置条件
- 已按《PentAGI Docker Compose 部署指南》完成部署,实例可正常登录 Web 控制台;
- 部署目录下存在从源码复制的
.env文件(由docker-compose.yml的env_file机制注入容器); - 具备查看容器日志的权限(
docker compose logs),本文多处用启动日志验证配置生效。
三、参数查看与修改方式
3.1 配置加载机制(源码实查)
PentAGI 后端启动时按以下顺序装配配置(backend/pkg/config/config.go 的 NewConfig()):
godotenv.Load()读取工作目录下的.env文件,写入进程环境变量——不覆盖已存在的变量;github.com/caarlos0/env/v10按 struct tag 将环境变量解析进Config结构体,未设置且无默认值的字段保持零值;- 各 provider 注册时做凭据门槛检查(
pkg/providers/registry.go的Enabled函数):某家 LLM 的 API Key 为空,该 provider 直接不注册,不会导致启动失败,只是控制台可用 provider 变少。
由此得出两条关键推论,均已实测验证:
- shell 环境变量优先于
.env文件:godotenv不覆盖已有变量,若执行docker compose up的 shell 里已导出同名变量(如SERVER_HOST),它会压过.env中的值。实测曾因此导致容器监听在容器内 loopback 上、宿主机 curl 返回 000(排障过程见第七节与部署篇第六节)。 .env改完必须重建容器:配置在进程启动时一次性读取,修改.env后需docker compose up -d重建使配置生效,仅restart不会重新读文件。
3.2 修改与验证流程(实测命令)
$ vi .env # 编辑参数
$ docker compose config | grep SERVER_HOST # 渲染 compose 最终值,确认没有 shell 变量覆盖
SERVER_HOST: 0.0.0.0
$ docker compose up -d # 重建生效
$ docker compose logs --tail 50 pentagi # 观察启动日志确认监听地址与 provider 注册
3.3 Web 控制台可改项与环境变量的边界(源码 config.md 实查)
Web 控制台 Settings 页可管理:Provider 配置档案(每个代理角色用哪个模型)、Prompt 模板、PentAGI API Token。但以下类别仍以环境变量为唯一事实来源:LLM 凭据与端点、搜索引擎凭据、Langfuse/Graphiti 等第三方集成、MCP 服务管理。改这些必须走 .env + 重建。
四、参数总览
| 类别 | 代表变量 | 作用 |
|---|---|---|
| 核心运行时 | DEBUG DATA_DIR TENANT_ID ASK_USER | 调试、持久化目录、多实例命名空间、操作确认 |
| LLM Provider | OPEN_AI_KEY LLM_SERVER_URL 等 13 家 | 大模型接入(凭据为空即不启用该家) |
| Embedding | EMBEDDING_URL EMBEDDING_MODEL EMBEDDING_PROVIDER | 向量嵌入(知识库语义检索) |
| 搜索引擎 | DUCKDUCKGO_ENABLED SEARXNG_URL TAVILY_API_KEY 等 9 类 | 代理信息检索工具的数据源 |
| Docker 沙箱 | DOCKER_HOST DOCKER_INSIDE DOCKER_NETWORK | 沙箱容器如何创建、隔离与联通 |
| 服务监听与安全 | PENTAGI_LISTEN_PORT SERVER_HOST PUBLIC_URL COOKIE_SIGNING_SALT | 监听地址端口、CORS、Cookie 签名、OAuth |
| 数据库 | PENTAGI_POSTGRES_PASSWORD DATABASE_MAX_OPEN_CONNS | pgvector 连接与连接池 |
| Web Scraper | SCRAPER_PUBLIC_URL SCRAPER_PRIVATE_URL | 网页浏览/截图服务的内外部地址 |
| 代理与超时 | PROXY_URL HTTP_CLIENT_TIMEOUT EXTERNAL_SSL_CA_PATH | 出站代理、外部调用超时、自签 CA |
| Agent 监督 | EXECUTION_MONITOR_ENABLED MAX_GENERAL_AGENT_TOOL_CALLS | 工具调用循环检测与上限 |
| 摘要与助手 | SUMMARIZER_USE_QA ASSISTANT_USE_AGENTS | 长对话压缩策略 |
| 可观测 | LANGFUSE_BASE_URL OTEL_HOST | 追踪上报地址 |
五、核心参数分类详解
5.1 核心运行时
| 变量 | 默认值 | 说明 |
|---|---|---|
DEBUG | false | 调试模式,输出更详细日志并启用开发特性 |
DATA_DIR | ./data(容器内解析为 /opt/pentagi/data) | 持久化数据目录:flow 文件缓存、截图、installation_id 等 |
TENANT_ID | 空 | 多实例共享外部资源时的命名空间前缀,须匹配 ^[a-z][a-z0-9_]{0,31}$,非法值直接拒绝启动。空值即单实例,行为不变 |
DOCKER_PORTS_BASE | 0(即 28000) | 每个 flow 沙箱发布宿主端口的起始值,单实例占用 [base, base+2000) |
ASK_USER | false | 开启后代理执行敏感操作前需用户在界面确认 |
INSTALLATION_ID / LICENSE_KEY | 空 | 与 PentAGI Cloud API 通讯的安装标识与许可密钥,自用可留空 |
UPDATE_STRATEGY | preview | 更新通道:preview / stable / nightly,无法识别的值回退 preview |
UPDATE_CHECK_INTERVAL | 3h | 服务器向 Cloud API 上报自身状态的间隔,0 关闭上报 |
UPDATE_SERVER_HOST / SUPPORT_SERVER_HOST | update.pentagi.com / support.pentagi.com | Cloud API 端点,格式为 host[:port] 不带 scheme,写 http:// 前缀会被拒绝 |
TENANT_ID 生效时自动命名空间的范围:PostgreSQL 会创建同名 schema、沙箱容器名变为 <tenant>-pentagi-terminal-<flow>、Graphiti 分组变为 <tenant>-flow-<id>、Cookie/JWT 密钥加入租户因子(一个实例签发的会话在另一个实例上失效)。不自动命名空间的:DATA_DIR、DOCKER_NETWORK、各监听端口——多实例部署必须手工错开。
5.2 LLM Provider(13 家)
每家 provider 只需配置凭据即可启用,凭据为空则不注册(见 3.1 凭据门槛)。v2.2.0 支持的 13 家及默认端点(源码 .env.example 实查):
| Provider | 关键变量 | 默认端点 |
|---|---|---|
| OpenAI | OPEN_AI_KEY | https://api.openai.com/v1 |
| Anthropic | ANTHROPIC_API_KEY(另支持 ANTHROPIC_IDENTITY_TOKEN_FILE 等 6 个工作负载身份联合变量,仅密钥为空时生效) | https://api.anthropic.com/v1 |
| Google Gemini | GEMINI_API_KEY | https://generativelanguage.googleapis.com |
| AWS Bedrock | BEDROCK_REGION(默认 us-east-1)+ 凭据三选一:BEDROCK_DEFAULT_AUTH(最高优先)→ BEDROCK_BEARER_TOKEN → BEDROCK_ACCESS_KEY_ID+BEDROCK_SECRET_ACCESS_KEY | 可用 BEDROCK_SERVER_URL 指向 VPC 端点 |
| DeepSeek | DEEPSEEK_API_KEY | https://api.deepseek.com |
| GLM(智谱) | GLM_API_KEY;国内端点可改 https://open.bigmodel.cn/api/paas/v4 | https://api.z.ai/api/paas/v4 |
| Kimi(月之暗面) | KIMI_API_KEY;国内端点 https://api.moonshot.cn/v1 | https://api.moonshot.ai/v1 |
| Qwen / DashScope | QWEN_API_KEY;国内端点 https://dashscope.aliyuncs.com/compatible-mode/v1 | https://dashscope-us.aliyuncs.com/compatible-mode/v1 |
| MiniMax | MINIMAX_API_KEY | https://api.minimax.io/v1 |
| Mistral | MISTRAL_API_KEY | https://api.mistral.ai/v1 |
| xAI (Grok) | XAI_API_KEY | https://api.x.ai/v1 |
| Ollama | OLLAMA_SERVER_URL(本地如 http://ollama-server:11434 或云 https://ollama.com + OLLAMA_SERVER_API_KEY) | 空 |
| Custom(自定义 OpenAI 兼容端点) | LLM_SERVER_URL LLM_SERVER_KEY LLM_SERVER_MODEL | 空 |
Custom provider 补充说明:
LLM_SERVER_PROVIDER:模型名前缀,接 LiteLLM 网关时按需设置(如openai/gpt-4o形态);DeepSeek/GLM/Kimi/Qwen/MiniMax/Mistral/xAI 七家的*_PROVIDER变量同理;LLM_SERVER_API_TYPE置azure或azure_ad可对接 Azure OpenAI 部署,此时LLM_SERVER_API_VERSION(默认2024-10-21)才生效;LLM_SERVER_PRESERVE_REASONING(默认false):开启后在多轮对话中回传reasoning_content,部分推理模型(文档举例 Moonshot)缺它会在工具调用轮次报错;LLM_FALLBACK_PROVIDER:主 provider 调用失败时用哪一家重试,空为关闭。
实测记录(LLM 接入方式):实验环境无真实 LLM API Key,本批次用 LLM_SERVER_PROVIDER=custom 接入自建的 OpenAI 兼容 mock 端点完成全链路验证——LLM_SERVER_URL=http://mock-openai:9000/v1、LLM_SERVER_KEY=sk-mock-0000、LLM_SERVER_MODEL=mock-llm。启动后 provider 正常注册,创建 flow 时 PentAGI 先向端点发一次探测调用采样 tool call ID 模板(mock 返回带 tool_calls 的响应后探测通过),随后成功创建沙箱容器。mock 不支持的部分(真实模型对话质量)不在本文讨论范围。
5.3 Embedding(向量嵌入)
| 变量 | 默认值 | 说明 |
|---|---|---|
EMBEDDING_PROVIDER | openai | 可选 openai / ollama / mistral / jina / huggingface |
EMBEDDING_URL / EMBEDDING_KEY / EMBEDDING_MODEL | 空 | 未设置时回退用对应 LLM provider 的端点与密钥(openai provider 回退 OPEN_AI_SERVER_URL/OPEN_AI_KEY) |
EMBEDDING_BATCH_SIZE | 512 | 批量嵌入大小,影响内存与吞吐 |
EMBEDDING_MAX_TEXT_BYTES | 8192 | 单文档送入嵌入模型的字节上限,超限截断重内容字段(原始全文仍保留在库) |
EMBEDDING_STRIP_NEW_LINES | true | 嵌入前去换行,官方说明可提升质量 |
实测记录:LLM_SERVER_* 指向 mock 端点、未配 EMBEDDING_* 时,启动日志出现 embedder 初始化报错;将 EMBEDDING_URL/KEY 指向同一 mock 端点(/v1/embeddings 路径)、EMBEDDING_MODEL=mock-embed、EMBEDDING_PROVIDER=openai 后报错消失(日志 grep 不再命中)。结论:custom LLM provider 场景必须显式配齐 EMBEDDING 四件套,不能指望回退逻辑(回退目标是 OpenAI 官方端点与密钥,custom 场景均为空)。
5.4 搜索引擎(9 类)
| 引擎 | 关键变量 | 默认 | 说明 |
|---|---|---|---|
| DuckDuckGo | DUCKDUCKGO_ENABLED | true | 免 Key;可配 DUCKDUCKGO_REGION(如 cn-zh)、DUCKDUCKGO_SAFESEARCH(off/moderate/strict)、DUCKDUCKGO_TIME_RANGE(d/w/m/y) |
| Sploitus | SPLOITUS_ENABLED | true | 漏洞利用/CVE 检索,免 Key,安全研究专用 |
GOOGLE_API_KEY + GOOGLE_CX_KEY | 空 | Custom Search JSON API,需两个凭据都配;GOOGLE_LR_KEY 默认 lang_en | |
| Traversaal | TRAVERSAAL_API_KEY | 空 | — |
| Tavily | TAVILY_API_KEY | 空 | — |
| Firecrawl | FIRECRAWL_API_KEY | 空 | FIRECRAWL_API_URL 默认云 API https://api.firecrawl.dev,可指向自建实例 |
| Perplexity | PERPLEXITY_API_KEY | 空 | PERPLEXITY_MODEL 默认 sonar;PERPLEXITY_CONTEXT_SIZE 默认 low |
| SearXNG | SEARXNG_URL | 空 | 自建元搜索引擎,填实例基地址即可,免商业 Key |
| 内置分析引擎 | WEB_SEARCH_INTERNAL_ENABLED | false | 无付费 API 的兜底:搜索引擎找链接 → scraper 抓页 → summarizer 归纳,默认关(成本考量) |
SearXNG 其余参数:SEARXNG_CATEGORIES(默认 general)、SEARXNG_LANGUAGE、SEARXNG_SAFESEARCH(默认 0,0/1/2 三档)、SEARXNG_TIME_RANGE、SEARXNG_TIMEOUT。注意:SEARXNG_URL 只填地址,SearXNG 实例本身需另行部署(官方 Compose 栈不含它)。
实测记录:实验环境关闭了外网搜索(DUCKDUCKGO_ENABLED=false),Sploitus 保持默认,flow 创建与沙箱运行不受影响——搜索引擎只在代理执行检索类工具时才会被调用。
5.5 Docker 沙箱(安全关键项)
| 变量 | 默认值 | 说明 |
|---|---|---|
DOCKER_HOST / DOCKER_TLS_VERIFY / DOCKER_CERT_PATH | 空 | PentAGI 自身用哪套凭据连 Docker daemon 创建沙箱;空则用本机 socket |
DOCKER_INSIDE | false | 是否给沙箱容器挂载 Docker 访问能力(Docker-in-Docker)。高危开关,见下方安全说明 |
DOCKER_INSIDE_HOST / DOCKER_INSIDE_TLS_VERIFY / DOCKER_INSIDE_CERT_PATH | 空 | 仅 DOCKER_INSIDE=true 时生效:沙箱内可访问的另一个 daemon 端点(与宿主 daemon 分离才算通过启动策略检查) |
DOCKER_INSIDE_POLICY_TESTS | false | 开启后启动时跑一次沙箱隔离自检(daemon 必须与 PentAGI 自身分离、必须拒绝宿主逃逸请求),失败则沙箱功能整体关闭,服务照常启动 |
DOCKER_NETWORK | 空 | 沙箱加入的 Docker 网络;特殊值 host 让沙箱直接共享宿主网络栈(做原始包收发类测试才需要,隔离性最差) |
DOCKER_PUBLIC_IP | 0.0.0.0 | 沙箱端口发布绑定的宿主 IP |
DOCKER_DEFAULT_IMAGE | debian:latest | 请求镜像不可用时的兜底镜像 |
DOCKER_DEFAULT_IMAGE_FOR_PENTEST | vxcontrol/kali-linux | 渗透任务默认沙箱镜像 |
DOCKER_ALLOWED_IMAGES | 空 | 允许模型选择的镜像白名单(逗号分隔),空为不限制 |
DOCKER_IMAGE_SELECTION_MODE | llm | llm 由模型挑镜像,fixed 强制用渗透镜像 |
DOCKER_NET_ADMIN | compose 默认 true | 给主容器 NET_ADMIN 能力(网络测试类工具需要) |
TERMINAL_TOOL_TIMEOUT | 1200 | 终端工具默认超时(秒),作用于代理请求 timeout=0 或负值的场景;合法区间 1–10800(3 小时),越界值收敛到上限 |
安全警告(源码
.env.example原文,对应官方 issue #337):DOCKER_INSIDE=true会把宿主 Docker socket 挂进每个沙箱,沙箱内进程获得不受限的 Docker API——可被提示注入利用逃逸到宿主。确需 DinD 时,官方建议用DOCKER_INSIDE_HOST指向独立的低权限 daemon(如 docker-socket-proxy),而非直挂裸 socket。
5.6 服务监听与安全
Compose 层监听变量(决定宿主机端口映射):
| 变量 | 默认值 | 说明 |
|---|---|---|
PENTAGI_LISTEN_IP | 127.0.0.1 | 宿主侧绑定 IP。实测默认只绑定本机回环,远程访问需改 0.0.0.0 并配合防火墙/反代 |
PENTAGI_LISTEN_PORT | 8443 | 宿主侧端口;实测改 8150 后 docker compose ps 显示 127.0.0.1:8150->8443/tcp |
PGVECTOR_LISTEN_IP / PGVECTOR_LISTEN_PORT | 127.0.0.1 / 5432 | 数据库对外端口,无远程访问需求建议保持回环 |
SCRAPER_LISTEN_IP / SCRAPER_LISTEN_PORT | 127.0.0.1 / 9443 | scraper 对外端口 |
POSTGRES_EXPORTER_LISTEN_PORT | 空(compose 未设则不映射) | 指标端口 |
容器内服务器变量(SERVER_*,.env.example 显式置 SERVER_PORT=8443、SERVER_HOST=0.0.0.0、SERVER_USE_SSL=true):
| 变量 | 结构默认值 | 说明 |
|---|---|---|
SERVER_HOST / SERVER_PORT | 0.0.0.0 / 8080 | 进程监听地址(注意与上面的 PENTAGI_LISTEN_* 是两层:一个在容器内,一个在宿主映射) |
SERVER_USE_SSL / SERVER_SSL_CRT / SERVER_SSL_KEY | false / 空 / 空 | 服务端 TLS;compose 默认走容器内自签证书(PENTAGI_SSL_DIR 挂载目录) |
TRUSTED_PROXIES | 空 | 信任其 X-Forwarded-For 的反代地址/网段(逗号分隔)。反代后留空的后果:所有请求都被算作代理 IP,登录限速变成全体用户共享一个额度 |
STATIC_URL / STATIC_DIR | 空 / ./fe | 设 STATIC_URL 即进入反代模式(前端静态资源由外部 URL 提供),否则从本地目录伺服 |
CORS_ORIGINS | * | 允许的跨域来源;.env.example 建议显式设为部署地址。配置了具体来源(非 *)时自动允许携带凭据 |
PUBLIC_URL | 空 | 对外访问基地址,OAuth 回调由它拼出:${PUBLIC_URL}/api/v1/auth/login-callback。GitHub/Google 控制台里的回调地址必须与之一字不差 |
COOKIE_SIGNING_SALT | 空 | 会话 Cookie 签名盐,必须改掉示例值;多实例部署时它还参与密钥派生 |
OAUTH_GOOGLE_CLIENT_ID/SECRET、OAUTH_GITHUB_CLIENT_ID/SECRET | 空 | 对应 OAuth 两家的凭据,四项配齐且 PUBLIC_URL 可解析后自动启用 |
实测记录:PUBLIC_URL=https://127.0.0.1:8150、CORS_ORIGINS=https://127.0.0.1:8150、COOKIE_SIGNING_SALT 换为自定义随机串后,本机 HTTPS 登录、GraphQL 请求均正常。COOKIE_SIGNING_SALT 同时参与 Bearer JWT 密钥派生——改盐后所有旧会话与 API Token 全部失效,需重新登录。
5.7 数据库(pgvector)
| 变量 | 默认值 | 说明 |
|---|---|---|
PENTAGI_POSTGRES_USER / PENTAGI_POSTGRES_PASSWORD / PENTAGI_POSTGRES_DB | postgres / postgres / pentagidb | 栈内 pgvector 凭据;官方注释明确要求改掉默认密码 |
DATABASE_URL | 由上面三项拼出(compose 内部) | 完整 DSN,接外部 PostgreSQL(含 PgBouncer/Supabase)时直接设置 |
DATABASE_MAX_OPEN_CONNS / DATABASE_MAX_IDLE_CONNS | 25 / 5 | sqlc+GORM 共享连接池上限 |
DATABASE_VECTOR_MAX_CONNS | 10 | pgvector 向量检索专用连接池上限 |
DATABASE_EXTENSIONS_SCHEMA | public | 仅 TENANT_ID 非空时生效;Supabase 等把扩展装在 extensions schema 的库需设为 extensions |
实测记录:PENTAGI_POSTGRES_PASSWORD 改为强密码后栈正常起库,26 张业务表自动迁移完成。密码注意强密码策略(见 7.3)。
5.8 Web Scraper
| 变量 | 默认值 | 说明 |
|---|---|---|
SCRAPER_PUBLIC_URL | 空 | 生成给浏览器访问的地址(如截图回链) |
SCRAPER_PRIVATE_URL | https://someuser:somepass@scraper/ | 后端内部访问 scraper 的地址(容器网络内服务名 + Basic Auth 凭据);Podman rootless 场景官方注释改为 http://scraper:3000/ |
LOCAL_SCRAPER_USERNAME / LOCAL_SCRAPER_PASSWORD | someuser / somepass | scraper 服务自己的 Basic Auth 凭据,生产应改掉 |
LOCAL_SCRAPER_MAX_CONCURRENT_SESSIONS | 10 | 并发浏览会话上限 |
两个 URL 职责不同:后端→scraper 走 SCRAPER_PRIVATE_URL(容器网络名直连),最终返回给用户点击的链接用 SCRAPER_PUBLIC_URL(需浏览器可达)。公网部署时后者要配成对外域名。
5.9 网络代理与超时
| 变量 | 默认值 | 说明 |
|---|---|---|
PROXY_URL | 空 | 后端所有出站 HTTP(LLM、embedding、搜索、更新检查,含本地端点)统一走此代理;沙箱容器、scraper、Graphiti 不走 |
EXTERNAL_SSL_CA_PATH | 空 | 访问自签证书 LLM 端点时挂自定义 CA |
EXTERNAL_SSL_INSECURE | false | 跳过外部连接证书校验,官方明确仅限受控环境 |
HTTP_CLIENT_TIMEOUT | 600 | 外部 API 调用超时(秒),0 为不限时(生产不建议) |
实测提醒:PROXY_URL 的注释明确写了"local endpoints included"——设置后连容器网络内的本地端点也会被代理。本批次 mock 端点实测时保持 PROXY_URL 为空;生产环境若同时用代理和内网 LLM 网关,需确认代理对内网地址直连放行。
5.10 Agent 监督与执行上限
| 变量 | 默认值 | 说明 |
|---|---|---|
EXECUTION_MONITOR_ENABLED | false | 执行监视器(mentor 复审):同一工具连续调用或总调用达到阈值时唤醒 adviser 代理纠偏 |
EXECUTION_MONITOR_SAME_TOOL_LIMIT | 5 | 同一工具连续调用阈值 |
EXECUTION_MONITOR_TOTAL_TOOL_LIMIT | 10 | 距上次复审的总工具调用阈值 |
MAX_GENERAL_AGENT_TOOL_CALLS | 100 | 通用代理(Assistant/Primary/Pentester/Coder/Installer)单链工具调用上限 |
MAX_LIMITED_AGENT_TOOL_CALLS | 20 | 受限代理(Searcher/Enricher/Reporter 等)上限 |
AGENT_PLANNING_STEP_ENABLED | false | 专家代理开工前先由 planner 生成 3–7 步执行计划 |
5.11 Summarizer 与 Assistant(长对话压缩)
| 变量 | 默认值 | 说明 |
|---|---|---|
SUMMARIZER_PRESERVE_LAST | true | 摘要时保留最后一条消息 |
SUMMARIZER_USE_QA | true | 用问答对格式组织摘要 |
SUMMARIZER_LAST_SEC_BYTES / SUMMARIZER_MAX_BP_BYTES / SUMMARIZER_MAX_QA_SECTIONS / SUMMARIZER_MAX_QA_BYTES / SUMMARIZER_KEEP_QA_SECTIONS | 官方内置值 | 摘要体积约束(近段字节数、背景段字节数、QA 段数/字节、保留段数) |
ASSISTANT_USE_AGENTS | 空 | 助手对话是否允许调用专职代理 |
ASSISTANT_SUMMARIZER_* | 同上 | 助手通道独立的摘要参数 |
5.12 可观测集成入口
| 变量 | 说明 |
|---|---|
LANGFUSE_BASE_URL / LANGFUSE_PROJECT_ID / LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY | 指向 Langfuse 实例;留空即关闭上报。Langfuse 栈本体由独立 compose 文件(docker-compose-langfuse.yml)另行部署 |
OTEL_HOST | OpenTelemetry Collector 地址,配合可选 observability 栈 |
六、生产配置模板
以下为无真实 OpenAI Key、用自定义 OpenAI 兼容网关(如 LiteLLM/自建推理网关)时的最小可用模板,实测基于本批次 v2.2.0 部署:
# --- 镜像(锁定版本,勿用 latest)---
PENTAGI_IMAGE=vxcontrol/pentagi:2.2.0
# --- LLM:自定义 OpenAI 兼容端点 ---
LLM_SERVER_URL=http://litellm:4000/v1
LLM_SERVER_KEY=sk-your-gateway-key
LLM_SERVER_MODEL=gpt-4o
LLM_SERVER_PROVIDER=custom
# custom 场景必须显式配置 embedding(回退目标是 OpenAI 官方,网关场景无效)
EMBEDDING_PROVIDER=openai
EMBEDDING_URL=http://litellm:4000/v1
EMBEDDING_KEY=sk-your-gateway-key
EMBEDDING_MODEL=text-embedding-3-small
# --- 搜索:全部免 Key 或关闭 ---
DUCKDUCKGO_ENABLED=true
SEARXNG_URL=http://searxng:8080 # 可选:自建元搜索
# --- 安全:三处必改 ---
PENTAGI_POSTGRES_PASSWORD=<强密码,见 7.3 策略>
COOKIE_SIGNING_SALT=<openssl rand -hex 24 生成>
LOCAL_SCRAPER_PASSWORD=<强密码>
# --- 地址 ---
PUBLIC_URL=https://pentagi.example.com
CORS_ORIGINS=https://pentagi.example.com
PENTAGI_LISTEN_IP=0.0.0.0 # 需要非本机访问时
TRUSTED_PROXIES=10.0.0.0/8 # 有反代时填代理网段
# --- 明确不启用的能力 ---
DOCKER_INSIDE=false # 无 DinD 需求保持关闭
PROXY_URL= # 出网可控环境留空
七、常见问题(含本批次实测排障)
7.1 改了 .env 不生效 / 容器监听在错误地址
实测根因:执行 docker compose up 的 shell 中残留全局环境变量 SERVER_HOST=127.0.0.1,按 3.1 的加载机制压过了 .env 的 SERVER_HOST=0.0.0.0,容器内进程只监听容器 loopback,宿主机 curl 返回 000。定位:docker compose config | grep SERVER_HOST 看渲染后的最终值;解决:清理 shell 变量或显式 SERVER_HOST=0.0.0.0 docker compose up -d,日志随后出现 listening on 0.0.0.0:8443。
7.2 custom LLM provider 启动报 embedder 错误
见 5.3 实测记录:LLM_SERVER_* 配好但 EMBEDDING_* 留空时,启动日志出现 embedder 初始化报错;将 EMBEDDING_URL/KEY/MODEL/PROVIDER 显式指向同一 OpenAI 兼容端点后消失。
7.3 数据库/登录密码被拒
PentAGI 有内置密码策略(源码 backend/pkg/password/policy.go):至少 16 字符,或至少 8 字符且同时含大写、小写、数字、特殊字符(限 !@#$&*)。实测 q1w2e3r4 被拒(InvalidPassword),q1W2e3R4! 通过。该策略作用于 Web 首次注册改密;数据库口令同样建议达标。
7.4 找不到 termi_db 参数
v2.2.0 的 .env.example 中不存在 termi_db 参数(全文 grep 实证,仅 TERMINAL_TOOL_TIMEOUT 含相近词根)。若在旧资料中见到该名称,对应能力在 v2.2.0 中由 PENTAGI_POSTGRES_* 三件套与 DATABASE_URL 承担。
7.5 部署后外网访问不了
两层检查:宿主映射层 PENTAGI_LISTEN_IP(默认 127.0.0.1,只允许本机访问)与容器内监听层 SERVER_HOST(应为 0.0.0.0)。docker compose ps 看映射列:显示 127.0.0.1:8443->8443/tcp 即宿主侧只绑了回环。远程开放时建议配反代 + TRUSTED_PROXIES,避免直接暴露 8443。
7.6 配置代理后内网 LLM 网关也走代理
PROXY_URL 按官方注释作用于所有后端出站调用且不排除内网地址(见 5.9)。若代理不放行内网网段,需要在代理侧配置直连规则,或评估改为在容器层配置 HTTP_PROXY/NO_PROXY(注意两者作用面不同,PROXY_URL 只影响 PentAGI 后端进程)。
八、参考链接
- 官方仓库:vxcontrol/pentagi(v2.2.0 源码
.env.example、backend/docs/config.md) - 官网:pentagi.com
- 本专栏系列:《PentAGI 介绍与选型指南》(组件定位与同类工具对比)、《PentAGI Docker Compose 部署指南》(部署步骤与挂载结构)、《PentAGI v2.2.0 API 使用详解》(REST/GraphQL 接口)