-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy path.env.example
More file actions
331 lines (307 loc) · 14.1 KB
/
.env.example
File metadata and controls
331 lines (307 loc) · 14.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# NOTE: Copy this file to .env and fill in real keys.
# NOTE: Never commit .env (it should stay local).
# ===== 模型与网关 =====
# OPENAI_API_KEY:OpenAI/DeepSeek 等兼容网关的 API 密钥
OPENAI_API_KEY=
# OPENAI_BASE_URL:兼容网关基地址(DeepSeek 用 https://api.deepseek.com/v1)
OPENAI_BASE_URL=https://api.deepseek.com/v1
# PRIMARY_MODEL:主聊天/写作模型
PRIMARY_MODEL=deepseek-chat
# REASONING_MODEL:规划/推理模型,不可用时自动回退 PRIMARY_MODEL
REASONING_MODEL=deepseek-chat
# USE_AZURE:是否使用 Azure OpenAI
USE_AZURE=false
# AZURE_API_KEY:Azure OpenAI 密钥
AZURE_API_KEY=
# AZURE_ENDPOINT:Azure 终端地址
AZURE_ENDPOINT=
# AZURE_API_VERSION:Azure OpenAI API 版本
AZURE_API_VERSION=2025-03-01-preview
# OPENAI_TIMEOUT:LLM 请求超时(秒)
OPENAI_TIMEOUT=60
# OPENAI_EXTRA_BODY:额外请求体(JSON 字符串)
OPENAI_EXTRA_BODY={}
# ANTHROPIC_API_KEY:Anthropic 密钥(可选)
ANTHROPIC_API_KEY=
# PROMPT_STYLE:提示词风格 simple|enhanced|custom
PROMPT_STYLE=enhanced
# CUSTOM_AGENT_PROMPT_PATH:自定义 Agent 提示路径
CUSTOM_AGENT_PROMPT_PATH=
# CUSTOM_WRITER_PROMPT_PATH:自定义 Writer 提示路径
CUSTOM_WRITER_PROMPT_PATH=
# AGENT_XML_TOOL_CALLING:是否启用 XML 工具调用
AGENT_XML_TOOL_CALLING=false
# AGENT_NATIVE_TOOL_CALLING:是否启用原生工具调用
AGENT_NATIVE_TOOL_CALLING=true
# AGENT_EXECUTE_TOOLS:是否自动执行工具
AGENT_EXECUTE_TOOLS=true
# AGENT_AUTO_CONTINUE:工具调用后是否自动续写
AGENT_AUTO_CONTINUE=false
# AGENT_MAX_AUTO_CONTINUES:自动续写最大轮数
AGENT_MAX_AUTO_CONTINUES=25
# AGENT_TOOL_EXECUTION_STRATEGY:工具执行策略 sequential|parallel
AGENT_TOOL_EXECUTION_STRATEGY=sequential
# ===== 工具 / 第三方 =====
# TAVILY_API_KEY:Tavily 搜索密钥
TAVILY_API_KEY=
# SEARCH_ENGINES:API 搜索引擎优先级(逗号分隔),无 key 的引擎会自动跳过
# 可选:tavily,serper,serpapi,bing,google_cse,exa,firecrawl
# 示例:SEARCH_ENGINES=serper,tavily
SEARCH_ENGINES=tavily
# SERPER_API_KEY:Serper(Google)API key(可选)
SERPER_API_KEY=
# BRAVE_API_KEY:Brave Search API key(可选)
BRAVE_API_KEY=
# SERPAPI_API_KEY:SerpAPI key(可选)
SERPAPI_API_KEY=
# BING_API_KEY:Bing Search API key(可选)
BING_API_KEY=
# EXA_API_KEY:Exa API key(可选)
EXA_API_KEY=
# FIRECRAWL_API_KEY:Firecrawl API key(可选)
FIRECRAWL_API_KEY=
# GOOGLE_SEARCH_API_KEY / GOOGLE_SEARCH_ENGINE_ID:Google Custom Search(可选)
GOOGLE_SEARCH_API_KEY=
GOOGLE_SEARCH_ENGINE_ID=
# E2B_API_KEY:E2B 代码执行密钥
E2B_API_KEY=
# DASHSCOPE_API_KEY:阿里 DashScope(ASR/TTS)密钥
DASHSCOPE_API_KEY=
# ===== 记忆 / 长期存储 =====
# MEM0_API_KEY:Mem0 密钥(可选)
MEM0_API_KEY=
# ENABLE_MEMORY:是否启用长记忆
ENABLE_MEMORY=false
# MEMORY_NAMESPACE:记忆命名空间
MEMORY_NAMESPACE=default
# MEMORY_USER_ID:记忆用户 ID
MEMORY_USER_ID=default_user
# MEMORY_MAX_ENTRIES:每用户最大记忆条数
MEMORY_MAX_ENTRIES=20
# MEMORY_TOP_K:召回条数
MEMORY_TOP_K=5
# MEMORY_STORE_BACKEND:长记忆存储后端 memory|postgres|redis
MEMORY_STORE_BACKEND=memory
# MEMORY_STORE_URL:使用 postgres/redis 时的连接串
MEMORY_STORE_URL=
# ===== 数据库 =====
# DATABASE_URL:Postgres 连接串(留空则使用内存 checkpointer)
DATABASE_URL=
# ===== 运行 / 可观测性 =====
# APP_ENV:运行环境 dev|test|prod
APP_ENV=dev
# ENABLE_PROMETHEUS:是否暴露 Prometheus /metrics
ENABLE_PROMETHEUS=false
# ===== 应用基础 =====
# DEBUG:调试模式
DEBUG=True
# PORT:后端监听端口(默认 8001;如端口被占用可换成 60006 等)
PORT=8001
# ===== SDK / CLI =====
# WEAVER_BASE_URL:SDK/示例脚本默认使用的后端地址(不影响后端运行)
# 注意:如果你修改了 PORT,也请同步更新这里与 web/.env.local 的 NEXT_PUBLIC_API_URL
WEAVER_BASE_URL=http://127.0.0.1:8001
# ===== 部署加固(可选;公开部署建议开启)=====
# WEAVER_INTERNAL_API_KEY:开启后大多数 /api/* 默认都要求鉴权
# 支持:Authorization: Bearer <key> 或 X-API-Key: <key>
# 建议:由反向代理/网关注入(不要放到浏览器端代码里)
# Webhook 说明:
# - /api/webhook/* 默认走 trigger 自身鉴权策略
# - 若 trigger.require_auth=false,则仍视为 internal-only(仍需 internal key)
WEAVER_INTERNAL_API_KEY=
# WEAVER_AUTH_USER_HEADER:可信用户身份 Header(由反向代理在鉴权后注入)
# 用于会话/线程隔离(同一 internal key 下的多用户隔离)
WEAVER_AUTH_USER_HEADER=X-Weaver-User
# ===== HTTP 限流(可选)=====
# 默认策略:RATE_LIMIT_ENABLED 未设置时,仅在 APP_ENV=prod|production 启用。
# 如需强制开启/关闭,可显式设置 RATE_LIMIT_ENABLED=true|false
# RATE_LIMIT_ENABLED=true
# RATE_LIMIT_GENERAL_PER_MINUTE=60
# RATE_LIMIT_CHAT_PER_MINUTE=20
# RATE_LIMIT_WINDOW_SECONDS=60
# CORS_ORIGINS:允许的前端源(逗号分隔)
# 注意:部分 Windows 环境会把 2996-3095 端口段保留(导致 3000/3001 启动时报 EACCES),前端默认使用 3100
CORS_ORIGINS=http://localhost:3000,http://localhost:3100
# INTERRUPT_BEFORE_NODES:需要中断的节点列表
INTERRUPT_BEFORE_NODES=
# ===== 日志 =====
# LOG_LEVEL:日志级别
LOG_LEVEL=INFO
# LOG_FILE:日志文件路径
LOG_FILE=logs/weaver.log
# LOG_MAX_BYTES:单个日志文件最大字节
LOG_MAX_BYTES=10485760
# LOG_BACKUP_COUNT:日志轮转备份数
LOG_BACKUP_COUNT=5
# LOG_FORMAT:日志格式
LOG_FORMAT=%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s
# ENABLE_FILE_LOGGING:是否写入文件
ENABLE_FILE_LOGGING=true
# ENABLE_JSON_LOGGING:是否使用 JSON 日志
ENABLE_JSON_LOGGING=false
# ===== LangGraph 行为 =====
# HUMAN_REVIEW:是否需要人工复核
HUMAN_REVIEW=false
# TOOL_APPROVAL:工具执行前是否需审批
TOOL_APPROVAL=false
# MAX_REVISIONS:报告最大修订次数
MAX_REVISIONS=2
# ===== Quality Gates(评估门禁)=====
# CITATION_GATE_MIN_COVERAGE:citation gate 最低覆盖率(0-1),低于则 evaluator 强制 revise
CITATION_GATE_MIN_COVERAGE=0.6
# CLAIM_VERIFIER_GATE_MAX_CONTRADICTED:允许的 contradicted claim 数,超过则 revise
CLAIM_VERIFIER_GATE_MAX_CONTRADICTED=0
# CLAIM_VERIFIER_GATE_MAX_UNSUPPORTED:允许的 unsupported claim 数,超过则 revise
CLAIM_VERIFIER_GATE_MAX_UNSUPPORTED=0
# MAX_CONCURRENCY:最大并发
MAX_CONCURRENCY=5
# SEARCH_BATCH_SIZE:搜索批次大小
SEARCH_BATCH_SIZE=3
# API_RATE_LIMIT:API 调用间隔(秒)
API_RATE_LIMIT=0.5
# TOOL_RETRY:是否启用工具重试
TOOL_RETRY=false
# TOOL_RETRY_MAX_ATTEMPTS:工具重试次数
TOOL_RETRY_MAX_ATTEMPTS=3
# TOOL_RETRY_BACKOFF:重试指数回退系数
TOOL_RETRY_BACKOFF=1.5
# TOOL_CALL_LIMIT:单请求工具调用上限(0=不限)
TOOL_CALL_LIMIT=12
# STRIP_TOOL_MESSAGES:是否丢弃 ToolMessage 节省 Token
STRIP_TOOL_MESSAGES=false
# TOOL_SELECTOR:是否启用工具选择器
TOOL_SELECTOR=true
# TOOL_SELECTOR_MODEL:工具选择器模型
TOOL_SELECTOR_MODEL=gpt-4o-mini
# TOOL_SELECTOR_MAX_TOOLS:工具选择器返回数量
TOOL_SELECTOR_MAX_TOOLS=3
# TOOL_SELECTOR_ALWAYS_INCLUDE:工具选择器固定包含的工具(逗号分隔)
TOOL_SELECTOR_ALWAYS_INCLUDE=
# TOOL_SELECTOR_PROMPT:工具选择器自定义提示
TOOL_SELECTOR_PROMPT=
# ENABLE_TODO_MIDDLEWARE:是否启用 TODO 中间件
ENABLE_TODO_MIDDLEWARE=true
# TODO_SYSTEM_PROMPT:TODO 中间件系统提示
TODO_SYSTEM_PROMPT=
# TODO_TOOL_DESCRIPTION:TODO 工具描述
TODO_TOOL_DESCRIPTION=
# ===== 短期记忆(截断与摘要)=====
# TRIM_MESSAGES:是否启用消息截断
TRIM_MESSAGES=false
# TRIM_MESSAGES_KEEP_FIRST:截断保留最前消息数
TRIM_MESSAGES_KEEP_FIRST=2
# TRIM_MESSAGES_KEEP_LAST:截断保留最新消息数
TRIM_MESSAGES_KEEP_LAST=8
# SUMMARY_MESSAGES:是否启用中段摘要
SUMMARY_MESSAGES=false
# SUMMARY_MESSAGES_TRIGGER:触发摘要的消息条数
SUMMARY_MESSAGES_TRIGGER=12
# SUMMARY_MESSAGES_KEEP_LAST:摘要后保留的末尾消息数
SUMMARY_MESSAGES_KEEP_LAST=4
# SUMMARY_MESSAGES_MODEL:摘要所用模型
SUMMARY_MESSAGES_MODEL=gpt-4o-mini
# SUMMARY_MESSAGES_WORD_LIMIT:摘要字数上限
SUMMARY_MESSAGES_WORD_LIMIT=200
# CONTEXT_EDIT_TRIGGER_TOKENS:上下文压缩触发 Token 数
CONTEXT_EDIT_TRIGGER_TOKENS=1000
# CONTEXT_EDIT_KEEP_TOOLS:压缩时保留最近工具调用数
CONTEXT_EDIT_KEEP_TOOLS=3
# ===== Deepsearch =====
# DEEPSEARCH_MAX_EPOCHS:深搜最大轮数
DEEPSEARCH_MAX_EPOCHS=3
# DEEPSEARCH_QUERY_NUM:每轮生成子查询数量
DEEPSEARCH_QUERY_NUM=5
# DEEPSEARCH_RESULTS_PER_QUERY:每个查询保留结果数
DEEPSEARCH_RESULTS_PER_QUERY=5
# DEEPSEARCH_REPORT_SOURCES_LIMIT:报告中可引用/展示的来源条数(影响 [1] [2] ... 编号范围)
DEEPSEARCH_REPORT_SOURCES_LIMIT=20
# DEEPSEARCH_ENABLE_CRAWLER:是否启用轻量爬虫
DEEPSEARCH_ENABLE_CRAWLER=false
# DEEPSEARCH_ENABLE_RESEARCH_FETCHER:是否抓取网页正文并生成证据 passages(更慢但证据更强)
DEEPSEARCH_ENABLE_RESEARCH_FETCHER=false
# DEEPSEARCH_SAVE_DATA:是否保存深搜数据
DEEPSEARCH_SAVE_DATA=false
# DEEPSEARCH_SAVE_DIR:深搜数据保存目录
DEEPSEARCH_SAVE_DIR=eval/deepsearch_data
# DEEPSEARCH_CLAIM_VERIFIER_USE_PASSAGES:claim verifier 是否优先使用 evidence passages(更细粒度、可定位)
DEEPSEARCH_CLAIM_VERIFIER_USE_PASSAGES=true
# DEEPSEARCH_CLAIM_VERIFIER_MIN_OVERLAP_TOKENS:claim 与 passage 的最小 token overlap
DEEPSEARCH_CLAIM_VERIFIER_MIN_OVERLAP_TOKENS=2
# DEEPSEARCH_CLAIM_VERIFIER_MAX_EVIDENCE_PER_CLAIM:每条 claim 最多保留多少条 evidence(URL+passage)
DEEPSEARCH_CLAIM_VERIFIER_MAX_EVIDENCE_PER_CLAIM=3
# ===== Multi-Search(聚合搜索)=====
# SEARCH_STRATEGY:multi_search 执行策略 fallback|parallel|round_robin|best_first
SEARCH_STRATEGY=fallback
# SEARCH_ENABLE_FRESHNESS_RANKING:是否对时间敏感 query 进行 freshness 加权排序
SEARCH_ENABLE_FRESHNESS_RANKING=true
# SEARCH_FRESHNESS_HALF_LIFE_DAYS:freshness 衰减半衰期(天)
SEARCH_FRESHNESS_HALF_LIFE_DAYS=30
# SEARCH_FRESHNESS_WEIGHT:freshness 权重(0-1),越大越偏向近期结果
SEARCH_FRESHNESS_WEIGHT=0.35
# SEARCH_CACHE_MAX_SIZE:search cache 容量(条目数)
SEARCH_CACHE_MAX_SIZE=200
# SEARCH_CACHE_TTL_SECONDS:search cache TTL(秒)
SEARCH_CACHE_TTL_SECONDS=1800
# SEARCH_CACHE_SIMILARITY_THRESHOLD:query 相似度阈值(0-1),用于 fuzzy cache 命中
SEARCH_CACHE_SIMILARITY_THRESHOLD=0.9
# SEARCH_RELIABILITY_MAX_RETRIES:每个 provider 的最大重试次数(不含首次调用)
SEARCH_RELIABILITY_MAX_RETRIES=2
# SEARCH_RELIABILITY_RETRY_BACKOFF_SECONDS:重试指数退避的 base delay(秒)
SEARCH_RELIABILITY_RETRY_BACKOFF_SECONDS=0.5
# SEARCH_RELIABILITY_CIRCUIT_BREAKER_FAILURES:连续失败次数达到阈值时打开断路器
SEARCH_RELIABILITY_CIRCUIT_BREAKER_FAILURES=3
# SEARCH_RELIABILITY_CIRCUIT_BREAKER_RESET_SECONDS:断路器打开后多少秒自动尝试恢复
SEARCH_RELIABILITY_CIRCUIT_BREAKER_RESET_SECONDS=60
# SEARCH_PARALLEL_MAX_WORKERS:parallel 策略最大线程数(避免 provider 太多导致线程爆炸)
SEARCH_PARALLEL_MAX_WORKERS=8
# SEARCH_PARALLEL_TIMEOUT_SECONDS:parallel 策略 best-effort 超时(秒)
SEARCH_PARALLEL_TIMEOUT_SECONDS=30
# ===== Research Fetcher / Reader(网页正文抓取)=====
# READER_FALLBACK_MODE:Reader 兜底策略 off|public|self_hosted|both
READER_FALLBACK_MODE=both
# READER_PUBLIC_BASE:public reader base(默认 r.jina.ai)
READER_PUBLIC_BASE=https://r.jina.ai
# READER_SELF_HOSTED_BASE:自建 reader base(可选)
READER_SELF_HOSTED_BASE=
# RESEARCH_FETCH_TIMEOUT_S:单次抓取超时(秒)
RESEARCH_FETCH_TIMEOUT_S=25
# RESEARCH_FETCH_MAX_BYTES:最大响应体字节数(0=不限制;建议留上限防 OOM)
RESEARCH_FETCH_MAX_BYTES=2000000
# RESEARCH_FETCH_CONCURRENCY:批量抓取最大并发
RESEARCH_FETCH_CONCURRENCY=6
# RESEARCH_FETCH_CONCURRENCY_PER_DOMAIN:同域名并发上限
RESEARCH_FETCH_CONCURRENCY_PER_DOMAIN=2
# RESEARCH_FETCH_CACHE_TTL_S:抓取缓存 TTL(秒,0=禁用)
RESEARCH_FETCH_CACHE_TTL_S=0
# RESEARCH_FETCH_CACHE_MAX_ENTRIES:缓存最大条目数
RESEARCH_FETCH_CACHE_MAX_ENTRIES=256
# RESEARCH_FETCH_CACHE_STORE_ERRORS:是否缓存错误结果(通常 false)
RESEARCH_FETCH_CACHE_STORE_ERRORS=false
# RESEARCH_FETCH_RENDER_MODE:渲染抓取 off|auto|always(auto 在 direct 失败/过短时启用)
RESEARCH_FETCH_RENDER_MODE=off
# RESEARCH_FETCH_RENDER_MIN_CHARS:auto 模式下,direct 文本少于此值会尝试 render
RESEARCH_FETCH_RENDER_MIN_CHARS=200
# RESEARCH_FETCH_EXTRACT_MARKDOWN:HTML 是否额外提取 markdown(passages 优先用 markdown)
RESEARCH_FETCH_EXTRACT_MARKDOWN=true
# ===== MCP(多模型工具桥)=====
# ENABLE_MCP:是否启用 MCP
ENABLE_MCP=false
# MCP_SERVERS:MCP 服务器配置 JSON(stdio / sse)
# 说明:
# - stdio:本地启动一个 MCP Server 进程(推荐用官方 `@modelcontextprotocol/server-*`)
# - sse:连接一个远程/本地的 SSE MCP Server
# 示例(filesystem + memory,需本机有 Node.js / npx):
# MCP_SERVERS={"filesystem":{"type":"stdio","command":"npx","args":["-y","@modelcontextprotocol/server-filesystem","/ABS/PATH/TO/ALLOW"]},"memory":{"type":"stdio","command":"npx","args":["-y","@modelcontextprotocol/server-memory"]}}
# 示例(git,需 uv/uvx 或自行安装 mcp-server-git):
# MCP_SERVERS={"git":{"type":"stdio","command":"uvx","args":["mcp-server-git","--repository","/ABS/PATH/TO/GIT/REPO"]}}
# 示例(postgres,提供连接串;需 Node.js / npx):
# MCP_SERVERS={"postgres":{"type":"stdio","command":"npx","args":["-y","@modelcontextprotocol/server-postgres","postgresql://localhost:5432/mydb"]}}
MCP_SERVERS={}
# 是否启用无头爬虫(true=无窗口,false=可视化调试)
CRAWLER_HEADLESS=false
# 是否启用Playwright优化爬虫(Windows上易出错,默认false)
USE_OPTIMIZED_CRAWLER=true
# E2B 浏览器沙箱模板 ID(官方提供 browser 模板,若有自定义请改成对应名称)
SANDBOX_TEMPLATE_BROWSER=browser
# 是否允许沙箱访问互联网(true/false)
SANDBOX_ALLOW_INTERNET=true