Files
aiagent/backend/app/core/config.py
renjianbo ab1589921a fix: 修复35个安全与功能缺陷,补全知识进化/数字孪生/行为采集模块
## 安全修复 (12项)
- Webhook接口添加全局Token认证,过滤敏感请求头
- 修复JWT Base64 padding公式,防止签名验证绕过
- 数据库密码/飞书Token从源码移除,改为环境变量
- 工作流引擎添加路径遍历防护 (_resolve_safe_path)
- eval()添加模板长度上限检查
- 审批API添加认证依赖
- 前端v-html增强XSS转义,console.log仅开发模式输出
- 500错误不再暴露内部异常详情

## Agent运行时修复 (7项)
- 删除_inject_knowledge_context中未定义db变量的finally块
- 工具执行添加try/except保护,异常不崩溃Agent
- LLM重试计入budget计数器
- self_review异常时passed=False
- max_iterations截断标记success=False
- 工具参数JSON解析失败时记录警告日志
- run()开始时重置_llm_invocations计数器

## 配置与基础设施
- DEBUG默认False,SQL_ECHO独立配置项
- init_db()补全13个缺失模型导入
- 新增WEBHOOK_AUTH_TOKEN/SQL_ECHO配置项
- 新增.env.example模板文件

## 前端修复 (12项)
- 登录改用URLSearchParams替代FormData
- 401拦截器通过Pinia store统一清理状态
- SSE流超时从60s延长至300s
- final/error事件时清除streamTimeout
- localStorage聊天记录添加24h TTL
- safeParseArgCount替代模板中裸JSON.parse
- fetchUser 401时同时清除user对象

## 新增模块
- 知识进化: knowledge_extractor/retriever/tasks
- 数字孪生: shadow_executor/comparison模型
- 行为采集: behavior_middleware/collector/fingerprint_engine
- 代码审查: code_review_agent/document_review_agent
- 反馈学习: feedback_learner
- 瓶颈检测/优化引擎/成本估算/需求估算
- 速率限制器 (rate_limiter)
- Alembic迁移 015-020

## 文档
- 商业化落地计划
- 8篇docs文档 (架构/API/部署/开发/贡献等)
- Docker Compose生产配置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 19:50:20 +08:00

138 lines
5.6 KiB
Python
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.
"""
应用配置
"""
from pathlib import Path
from pydantic_settings import BaseSettings
from typing import List
# 无论从项目根还是 backend 目录启动,始终加载 backend/.env
_BACKEND_DIR = Path(__file__).resolve().parent.parent.parent
_ENV_PATH = _BACKEND_DIR / ".env"
class Settings(BaseSettings):
"""应用设置"""
# 应用基本信息
APP_NAME: str = "天工智能体平台"
APP_VERSION: str = "1.0.0"
DEBUG: bool = False
SQL_ECHO: bool = False # 独立于 DEBUG 的 SQL 日志开关,生产环境必须为 False
SECRET_KEY: str = "dev-secret-key-change-in-production"
# 数据库配置MySQL— 生产环境必须通过环境变量设置
DATABASE_URL: str = ""
# Redis配置
REDIS_URL: str = "redis://localhost:6379/0"
# 会话记忆:除 Redis 外是否写入 MySQLpersistent_user_memories实现跨重启、跨 TTL 的永久记忆
MEMORY_PERSIST_DB_ENABLED: bool = True
# 本地文件工具file_read / file_write允许读写的根目录。空字符串表示使用「backend 的上一级目录」作为仓库根。
LOCAL_FILE_TOOLS_ROOT: str = ""
LOCAL_FILE_READ_MAX_BYTES: int = 2_097_152 # 单次读取上限(默认 2MB
LOCAL_FILE_WRITE_MAX_BYTES: int = 2_097_152 # 单次写入内容上限UTF-8 字节)
# http_request 工具:写入 LLM 上下文的响应体最大字符数HTML/JSON 过大时截断,避免超过模型 context
HTTP_REQUEST_MAX_BODY_CHARS: int = 32_000
# web_search 工具Bing Search API KeyAzure 免费层 1000 次/月),留空则使用 DuckDuckGo
BING_SEARCH_API_KEY: str = ""
# web_search 工具HTTP 代理地址DuckDuckGo 在国内无法访问时使用),如 http://127.0.0.1:7890
SEARCH_PROXY: str = ""
# 图片 OCRfile_read 对 png/jpg 等Tesseract 可执行文件路径Windows 示例 C:/Program Files/Tesseract-OCR/tesseract.exe
TESSERACT_CMD: str = ""
# 自定义 tessdata 目录(内含 chi_sim.traineddata 等)。留空时若 LOCAL_FILE_TOOLS_ROOT/tessdata 下存在 .traineddata 则自动使用
TESSERACT_TESSDATA_DIR: str = ""
# 智能体对话落盘:在工作区根下 agent_workspaces/<agent_id>/dialogue.md 追加 Markdown与 LOCAL_FILE_TOOLS_ROOT 一致)
AGENT_WORKSPACE_CHAT_LOG_ENABLED: bool = True
AGENT_WORKSPACE_CHAT_SUBDIR: str = "agent_workspaces"
# CORS配置支持字符串或列表
CORS_ORIGINS: str = "http://localhost:3000,http://127.0.0.1:3000,http://localhost:8038,http://101.43.95.130:8038"
# OpenAI配置
OPENAI_API_KEY: str = ""
OPENAI_BASE_URL: str = "https://api.openai.com/v1"
# DeepSeek配置
DEEPSEEK_API_KEY: str = ""
DEEPSEEK_BASE_URL: str = "https://api.deepseek.com"
# SiliconFlow配置Embedding 推荐使用 SiliconFlow
SILICONFLOW_API_KEY: str = ""
SILICONFLOW_BASE_URL: str = "https://api.siliconflow.cn/v1"
SILICONFLOW_EMBEDDING_MODEL: str = "netease-youdao/bce-embedding-base_v1"
# Anthropic配置
ANTHROPIC_API_KEY: str = ""
# JWT配置
JWT_SECRET_KEY: str = "dev-jwt-secret-key-change-in-production"
JWT_ALGORITHM: str = "HS256"
JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
# Celery 工作流任务:对**非业务节点失败**(非 WorkflowExecutionError的退避重试次数0 表示不重试
WORKFLOW_TASK_MAX_RETRIES: int = 0
# 单执行预算:主循环每执行一个节点计 1 步,超过则熔断(防止死循环/失控)
WORKFLOW_MAX_STEPS_PER_RUN: int = 2000
# 单执行 LLM 节点调用上限llm / template 节点每执行一次计 1
WORKFLOW_MAX_LLM_INVOCATIONS_PER_RUN: int = 200
# 单执行工具实际执行次数上限LLM function calling 每执行一个工具计 1
WORKFLOW_MAX_TOOL_CALLS_PER_RUN: int = 500
# 外部访问地址(用于飞书通知中的详情链接等)
EXTERNAL_URL: str = ""
# 飞书应用配置(用于发送消息通知到用户飞书)
FEISHU_APP_ID: str = ""
FEISHU_APP_SECRET: str = ""
FEISHU_VERIFICATION_TOKEN: str = ""
# Webhook 全局认证 Token — 所有 webhook 触发请求需要携带此 Token
WEBHOOK_AUTH_TOKEN: str = ""
# 橙子飞书应用配置(独立 WS 连接,直接路由到橙子助手 Agent
ORANGE_APP_ID: str = ""
ORANGE_APP_SECRET: str = ""
ORANGE_AGENT_ID: str = "" # 创建橙子助手后写入
# 苏瑶飞书应用配置(独立 WS 连接,直接路由到苏瑶 Agent
SUYAO_APP_ID: str = ""
SUYAO_APP_SECRET: str = ""
SUYAO_AGENT_ID: str = "" # 创建苏瑶后写入
# 甜甜飞书应用配置(独立 WS 连接路由到苏瑶3号知识图谱 Agent
TIANTIAN_APP_ID: str = ""
TIANTIAN_APP_SECRET: str = ""
TIANTIAN_AGENT_ID: str = "" # 创建苏瑶3号后写入
# 灵犀飞书应用配置(独立 WS 连接,路由到灵犀学习助手 Agent
LINGXI_APP_ID: str = ""
LINGXI_APP_SECRET: str = ""
LINGXI_AGENT_ID: str = "" # 创建灵犀后写入
# 人参果飞书应用配置(独立 WS 连接,路由到 AI学习助手 Agent — KG+RAG理想版
RENSHENGUO_APP_ID: str = ""
RENSHENGUO_APP_SECRET: str = ""
RENSHENGUO_AGENT_ID: str = "" # 创建 AI学习助手 后写入
# 人参果1号飞书应用配置独立 WS 连接,路由到 AI学习助手 Agent — 行为约束版,禁止主动消息)
RENSHENGUO2_APP_ID: str = ""
RENSHENGUO2_APP_SECRET: str = ""
RENSHENGUO2_AGENT_ID: str = "" # 创建 AI学习助手人参果1号后写入
class Config:
env_file = str(_ENV_PATH)
case_sensitive = True
settings = Settings()