From cd284e34598a97353c912149fcdce67609944eeb Mon Sep 17 00:00:00 2001 From: lik Date: Sun, 13 Sep 2026 11:40:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86conf.json=E7=9A=84?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/bots/bot-escort-admin/agent.js | 2 +- agent/bots/bot-escort/agent.js | 31 +++++++++++++--------------- agent/bots/bot-escort/prompts.js | 2 +- agent/infra/tools/web/fetch.js | 2 +- agent/infra/tools/web/search.js | 2 +- config.js | 18 ++++++++++++++++ models/index.js | 2 +- 7 files changed, 37 insertions(+), 22 deletions(-) diff --git a/agent/bots/bot-escort-admin/agent.js b/agent/bots/bot-escort-admin/agent.js index bf21664..888a9a7 100644 --- a/agent/bots/bot-escort-admin/agent.js +++ b/agent/bots/bot-escort-admin/agent.js @@ -3,7 +3,7 @@ import { createDeepAgent } from "deepagents"; import { AIMessageChunk, ToolMessage, todoListMiddleware } from "langchain"; import { HumanMessage } from "@langchain/core/messages"; import { ChatDeepSeek } from "@langchain/deepseek"; -import config from '../../../conf.json' with { type: 'json' }; +import config from '../../../config.js'; import logger from '../../../utils/logger.js'; import { createRestrictedBackend } from "../../infra/restricted_fs_backend.js"; diff --git a/agent/bots/bot-escort/agent.js b/agent/bots/bot-escort/agent.js index 79e2c3f..f021444 100644 --- a/agent/bots/bot-escort/agent.js +++ b/agent/bots/bot-escort/agent.js @@ -6,7 +6,7 @@ import { ChatOpenAI } from "@langchain/openai"; import { AIMessageChunk, ToolMessage } from "langchain"; import { HumanMessage } from "@langchain/core/messages"; import { ChatDeepSeek } from "@langchain/deepseek"; -import config from '../../../conf.json' with { type: 'json' }; +import config from '../../../config.js'; import logger from '../../../utils/logger.js'; // 密钥由 conf.json 统一提供;百度地图 skill 通过 env_get 读环境变量,此处桥接 @@ -160,22 +160,19 @@ export default class EscortAgent { return this.agent; } - // 受限后端:锁定沙箱根并禁止读取 conf.json/.env/logs 及用户数据目录 - let backend = createRestrictedBackend({ rootDir, dataDir }); - - if (userInfo) { - // 挂载根为用户数据目录:/memories/memory.txt ↔ data/users/{userId}/memory.txt - const userMemoryRoot = path.join(dataDir, "users", userInfo._id); - backend = new CompositeBackend( - createRestrictedBackend({ rootDir, dataDir }), - { - "/memories/": new FilesystemBackend({ - rootDir: userMemoryRoot, - virtualMode: true - }) - }, - ) - } + // 受限后端:锁定沙箱根并禁止读取 conf.json/.env/logs 及用户数据目录; + // 登录用户挂载 /memories/ ↔ data/users/{userId}/(/memories/memory.txt ↔ .../memory.txt) + const backend = userInfo + ? new CompositeBackend( + createRestrictedBackend({ rootDir, dataDir }), + { + "/memories/": new FilesystemBackend({ + rootDir: path.join(dataDir, "users", userInfo._id), + virtualMode: true + }) + }, + ) + : createRestrictedBackend({ rootDir, dataDir }); this.flashModel = new ChatDeepSeek({ model: config.agent.deepseek.flashModel, diff --git a/agent/bots/bot-escort/prompts.js b/agent/bots/bot-escort/prompts.js index a94cddf..41fe4a0 100644 --- a/agent/bots/bot-escort/prompts.js +++ b/agent/bots/bot-escort/prompts.js @@ -1,6 +1,6 @@ import fs from "fs"; import path from "path"; -import config from "../../../conf.json" with { type: 'json' }; +import config from "../../../config.js"; import services from "../../../resource/services.js"; import agreement from "../../../resource/agreement.js"; import logger from "../../../utils/logger.js"; diff --git a/agent/infra/tools/web/fetch.js b/agent/infra/tools/web/fetch.js index e8297d7..f7eaff3 100644 --- a/agent/infra/tools/web/fetch.js +++ b/agent/infra/tools/web/fetch.js @@ -1,7 +1,7 @@ import { TavilyExtract } from "@langchain/tavily"; import { tool } from "@langchain/core/tools"; import * as z from "zod" -import config from "../../../../conf.json" with { type: "json" }; +import config from "../../../../config.js"; const webFetchTool = tool( async ({ diff --git a/agent/infra/tools/web/search.js b/agent/infra/tools/web/search.js index 7d2d309..dcfe35c 100644 --- a/agent/infra/tools/web/search.js +++ b/agent/infra/tools/web/search.js @@ -1,7 +1,7 @@ import { TavilySearch } from "@langchain/tavily"; import { tool } from "@langchain/core/tools"; import * as z from "zod" -import config from "../../../../conf.json" with { type: "json" }; +import config from "../../../../config.js"; const webSearchTool = tool( async ({ diff --git a/config.js b/config.js index e69de29..9e62de2 100644 --- a/config.js +++ b/config.js @@ -0,0 +1,18 @@ +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// 优先读取系统级配置,其次读取项目目录下的配置 +const SYSTEM_CONF = '/etc/ehason/conf.json'; +const LOCAL_CONF = path.join(__dirname, 'conf.json'); + +function loadConfig() { + const file = existsSync(SYSTEM_CONF) ? SYSTEM_CONF : LOCAL_CONF; + return JSON.parse(readFileSync(file, 'utf-8')); +} + +const config = loadConfig(); + +export default config; diff --git a/models/index.js b/models/index.js index 54b8d4a..adb3c8a 100644 --- a/models/index.js +++ b/models/index.js @@ -5,7 +5,7 @@ import { EscortRecordSchema } from "./schema/escort_record.js" import { HealthProfileSchema } from "./schema/health_profile.js" import { OrganizationSchema } from "./schema/organization.js" import { EmployeeSchema } from "./schema/employee.js" -import config from '../conf.json' with { type: 'json' }; +import config from '../config.js'; import logger from '../utils/logger.js'; class MongoDBSchema {