feat(server): 集成 MCP 服务器

本次提交主要集成了 MCP 服务器,为系统增加了用户提示词优化工具,并通过优化部署流程,提升了整体易用性。

具体变更内容包括:

* **功能增强:**
    * 集成 MCP 服务器,提供用户和系统提示词优化工具,支持 stdio 和 HTTP 两种传输方式,并集成了 Claude Desktop。
    * 实现基于会话的 HTTP 传输,允许多客户端连接,并为每个会话创建独立的 MCP 服务器实例,确保会话间的隔离性。

* **部署优化:**
    * 将 MCP 服务器端口变更为与 Web 界面共享 80 端口,通过路径区分,简化了 Docker 部署配置,降低了部署复杂度。
    * 优化 Docker 部署流程,使用 Supervisor 进行进程管理,并改进模板参数(使用枚举类型 + 默认值),同时提供了包含 MCP 服务器使用说明的 Docker 部署文档。

* **代码优化与重构:**
    * 优化模型选择逻辑,提高模型选择的准确性。
    * 优化日志记录功能,支持更灵活的日志级别设置,并添加了详细的错误提示和调试信息,方便问题排查。
    * 重构代码,分离构建和启动入口,优化环境变量加载和模型初始化逻辑,提高了代码的可维护性和可扩展性,并解决了构建副作用问题。

* **文档更新:**
    * 更新工具描述和使用说明,提供了用户和系统提示词工具的具体示例,并补充了迭代提示词工具的改进需求描述和使用场景。
    * 更新 Docker 部署方案,包含了 `docker-compose.yml`、`Dockerfile` 和 `env.local.example` 配置示例,并更新了 README 文档以明确连接方式。
    * 更新 `nginx.conf`,使用环境变量 `NGINX_PORT`,修改 `start-services.sh`,增加 nginx 配置处理,更新 `supervisord.conf`,调整 MCP 服务器启动方式,优化 `Dockerfile`,安装额外依赖并调整工作目录,调整环境变量加载机制,使用 `preload-env.cjs`。

* **其他:**
    * 提供快速开始指南、环境变量配置和问题排除等文档,更新了相关文档链接和获取帮助指引,并完成了基础测试用例和开发/设计文档。

本次更新旨在提升用户在提示词优化方面的能力,并简化部署流程,提高系统的整体可用性和可维护性。
This commit is contained in:
linshen
2025-07-27 00:31:23 +08:00
parent 95256ab7f8
commit 1a55a5e719
49 changed files with 4696 additions and 187 deletions

35
docker-compose.dev.yml Normal file
View File

@@ -0,0 +1,35 @@
version: '3.8'
services:
prompt-optimizer:
# 开发模式:从源码构建
build:
context: .
dockerfile: Dockerfile
container_name: prompt-optimizer-dev
restart: unless-stopped
ports:
- "8082:${NGINX_PORT:-80}" # Web应用端口包含MCP服务器通过/mcp路径访问
env_file:
- .env.local # 读取本地环境变量文件
healthcheck:
test: ["CMD", "sh", "-c", "curl -f http://localhost:80/ && curl -f http://localhost:80/mcp"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
environment:
# nginx内部端口配置
- NGINX_PORT=${NGINX_PORT:-80}
# Web应用API配置从 .env.local 读取,不在此处覆盖)
# MCP服务器配置Docker内部固定端口3000忽略MCP_HTTP_PORT环境变量
# - MCP_LOG_LEVEL=${MCP_LOG_LEVEL:-debug}
# - MCP_DEFAULT_LANGUAGE=${MCP_DEFAULT_LANGUAGE:-zh}
# - MCP_DEFAULT_MODEL_PROVIDER=${MCP_DEFAULT_MODEL_PROVIDER:-openai}
# Basic认证配置可选
- ACCESS_USERNAME=${ACCESS_USERNAME:-admin}
- ACCESS_PASSWORD=${ACCESS_PASSWORD:-}