AstroResearch/.env.example
Asfmq 85b6429c30 feat: Agent 多模式系统、视觉模型集成、LLM 能力分层与 P3 性能收尾
核心架构变更:

  1. Agent 多模式系统替代 Coordinator
     - 移除 src/agent/coordinator/(Coordinator Agent/Worker/Tools,946 行)
     - 新建 src/agent/modes/:声明式模式抽象(AgentMode/ModeConfig/ToolSet)
     - 三种内置模式:
       - default:通用科研助手,零覆盖保持现有行为
       - deep-research:16 步、启用思考、research 权限、系统性调研
       - literature-reader:白名单工具、只读沙箱、结构化阅读
     - ModeRegistry + ModeConfig 预设 + ToolSet 过滤 + 身份/原则覆盖
     - AgentRuntime::with_mode() 统一入口,模式持久化到 session.mode 字段
     - GET /api/chat/modes 提供模式列表给前端选择器

  2. 视觉模型与图片分析
     - 新增 analyze_image 工具(340 行):本地/URL 图片 → 视觉模型流式分析
     - LlmClient::analyze_image_stream():SSE 增量实时推送
     - 配置:LLM_VISION_MODEL / LLM_VISION_API_KEY / LLM_VISION_API_BASE
     - 前端:粘贴/选择图片附件,重试时复用文件路径
     - Service 层移除 /chat/rag 和 /chat/figure 端点,统一走 Agent SSE
     - Body limit 提升至 100MB 适配大图上传

  3. LLM 三级能力分层
     - Tier 1 (Core) → Tier 2 (Medium) → Tier 3 (Fast),级联回退
     - medium_llm / fast_llm / vision_llm 注入 AppState
     - 资产批量翻译 → Medium LLM + Semaphore(3) 并发控制
     - 记忆提取/上下文压缩子代理 → Fast LLM
     - SubAgentRunner::with_llm_client() 支持注入专用 LLM

  4. 数据库与性能优化
     - SQLite 启用 WAL + busy_timeout(10s) 处理并发写入
     - RAG ingest:DELETE 合并为原子语句 + 批量事务写入
     - Meta sync:save_paper_to_db_tx() 事务化批量插入
     - 翻译词典:first_words HashSet 预过滤 + next_valid_index 跳跃优化
     - read_file 不截断输出 + skip_persist 防止级联磁盘持久化

  5. 工具系统增强
     - ToolContext 增加 tool_call_id + max_output_chars
     - ToolOutput 增加 skip_persist 标记
     - TextDelta SSE 携带可选 tool_call_id 支持工具的流式输出
     - ChatMessage::text() 辅助方法
2026-06-24 19:52:27 +08:00

154 lines
9.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =============================================================================
# AstroResearch 环境变量模板
# 复制此文件为 .env 并填入你的配置值
# =============================================================================
# ─────────────────────────────────────────────────────────────────────────────
# 1. 核心 API 服务
# ─────────────────────────────────────────────────────────────────────────────
# NASA ADS API Token从 ui.adsabs.harvard.edu 申请)
ADS_API_KEY=your_ads_api_key_here
# 大语言模型配置(兼容 OpenAI 接口协议)
LLM_API_KEY=your_llm_api_key_here
LLM_API_BASE=https://api.openai.com/v1
# 可选模型示例deepseek-chat, qwen-flash, gpt-4o-mini
LLM_MODEL=gpt-4o-mini
# 备用模型(连续 3 次 529 过载后自动切换,优先于 LLM_FALLBACK_CHAIN可选
# LLM_FALLBACK_MODEL=gpt-4o-mini
# 备用模型链(逗号分隔,按顺序轮换尝试,可选)
# LLM_FALLBACK_CHAIN=gpt-4o-mini,deepseek-chat
# 中型大语言模型配置用于文献翻译、RAG默认级联回退至核心 LLM 配置)
# LLM_MEDIUM_API_KEY=your_llm_medium_api_key_here
# LLM_MEDIUM_API_BASE=https://api.openai.com/v1
# LLM_MEDIUM_MODEL=gpt-4o-mini
# 快速大语言模型配置(用于记忆提取等后台辅助任务,默认级联回退至中型 LLM 配置)
# LLM_FAST_API_KEY=your_llm_fast_api_key_here
# LLM_FAST_API_BASE=https://api.openai.com/v1
# LLM_FAST_MODEL=gpt-3.5-turbo
# ── 视觉模型(可选,配置后启用图片分析能力)──
# 专用视觉模型名称。主 Agent 可为纯文本模型,图片分析通过 analyze_image 工具
# 委托给此模型。用户上传图片时也会先用此模型预处理再交给 Agent。
# LLM_VISION_MODEL=gpt-4o
# LLM_VISION_API_KEY=your_vision_api_key_here空时回退到 LLM_API_KEY
# LLM_VISION_API_BASE=https://api.openai.com/v1空时回退到 LLM_API_BASE
# 向量嵌入模型配置(未设置时默认回退到 LLM 的 API Key 和 Base
# EMBEDDING_API_KEY=your_embedding_api_key_here
# EMBEDDING_API_BASE=https://api.openai.com/v1
# EMBEDDING_MODEL=text-embedding-3-small
# 向量维度(需与所选模型输出维度一致,默认 1536
# EMBEDDING_DIM=1536
# ─────────────────────────────────────────────────────────────────────────────
# 2. 七牛云对象存储PDF 解析后的配图托管)
# ─────────────────────────────────────────────────────────────────────────────
QINIU_AK=your_qiniu_access_key_here
QINIU_SK=your_qiniu_secret_key_here
QINIU_BUCKET=your_bucket_name
QINIU_DOMAIN=http://your_cdn_domain.com
# ─────────────────────────────────────────────────────────────────────────────
# 3. 文档解析服务
# ─────────────────────────────────────────────────────────────────────────────
# MinerU PDF 解析远程 API不使用 HTML 解析时可选)
# MINERU_API_URL=https://mineru.net/api/v4/extract/task
# MINERU_API_KEY=your_mineru_api_key_here
# ─────────────────────────────────────────────────────────────────────────────
# 4. 本地路径与端口
# ─────────────────────────────────────────────────────────────────────────────
# SQLite 数据库路径
DATABASE_URL=sqlite://library/astro_research.db
# 本地文献馆藏根目录
LIBRARY_DIR=./library
# Agent Skills 目录Markdown 知识模块)
SKILLS_DIR=./skills
# 后端服务监听端口
PORT=8000
# 认证密码
ADMIN_PASSWORD=fmq
# ─────────────────────────────────────────────────────────────────────────────
# 5. 日志配置
# ─────────────────────────────────────────────────────────────────────────────
# 日志级别trace / debug / info / warn / error可指定模块级别如 info,astroresearch=debug
LOG_LEVEL=info,astroresearch=debug
# 日志格式pretty彩色或 json结构化
LOG_FORMAT=pretty
# 日志输出目标stdout控制台、file文件逗号分隔可同时启用
LOG_OUTPUTS=stdout,file
# 日志文件目录(仅 LOG_OUTPUTS 含 file 时生效)
LOG_DIR=./logs
# ─────────────────────────────────────────────────────────────────────────────
# 6. Agent 运行时参数
# ─────────────────────────────────────────────────────────────────────────────
# 最大 ReAct 推理步数(默认 8
# AGENT_MAX_STEPS=8
# 单个工具执行超时秒数(默认 120
# AGENT_TOOL_TIMEOUT_SECS=120
# 工具输出截断字符数(默认 4000
# AGENT_MAX_TOOL_OUTPUT_CHARS=4000
# 上下文触发压缩的字符阈值(默认 16000
# AGENT_CONTEXT_CHAR_LIMIT=16000
# Token 软限制:触发渐进式提醒(默认 32000
# AGENT_TOKEN_SOFT_LIMIT=32000
# Token 硬限制:触发强制压缩或终止(默认 40000
# AGENT_TOKEN_HARD_LIMIT=40000
# 触发 snip 压缩的最大消息数(默认 50
# AGENT_MAX_MESSAGES=50
# ── 权限系统 ──
# Agent 工具权限规则(逗号分隔,支持内容级匹配 "ToolName(pattern)"
# 规则优先级: Deny > Ask > Allow先匹配先生效
#
# 格式: "tool_name" → 工具级规则
# "tool_name(content_pattern)" → 内容级规则
# 示例: "run_bash(rm *)" 匹配以 rm 开头的 bash 命令
# "read_file(*.env)" 匹配 .env 后缀的文件读取
# "file_write(/etc/*)" 匹配 /etc/ 下的文件写入
#
# 权限模式:
# default — 标准:逐项按规则决定(默认)
# accept_edits — 工作目录内的 file_write/file_edit 自动允许
# bypass — 跳过所有 Ask 检查Deny 规则仍生效)
# dont_ask — 将所有 Ask 转为 Deny
# AGENT_PERMISSION_MODE=default
#
# 拒绝规则(逗号分隔,不可覆盖)
# AGENT_PERMISSIONS_DENY=run_bash(rm *),run_bash(sudo *)
# 允许规则(逗号分隔,显式允许)
# AGENT_PERMISSIONS_ALLOW=read_file,grep_files,glob_files,search_papers
# 询问规则(逗号分隔,需用户确认)
# AGENT_PERMISSIONS_ASK=run_bash,file_write,file_edit,download_paper
# ─────────────────────────────────────────────────────────────────────────────
# 7. 自动记忆提取(实验性功能,同时控制压缩记忆桥接 P3
# ─────────────────────────────────────────────────────────────────────────────
# 是否启用自动记忆提取(默认 false开启后会话结束 + 压缩时均触发提取)
# EXTRACT_MEMORY_ENABLED=false
# 记忆提取节流间隔:每 N 个 turn 触发一次(默认 3
# EXTRACT_MEMORY_THROTTLE_TURNS=3
# 记忆提取子代理最大步数(默认 3
# EXTRACT_MEMORY_MAX_STEPS=3
# ─────────────────────────────────────────────────────────────────────────────
# 8. 其他
# ─────────────────────────────────────────────────────────────────────────────
# Obscura 浏览器 Profile 轮换(绕过 Cloudflare/WAF默认 true
# OBSCURA_ROTATE_PROFILE=true