From 5a73018582c162ba4d59eac5c2b1c5b39c003e2a Mon Sep 17 00:00:00 2001 From: BBIT-Kai <2911862937@qq.com> Date: Wed, 5 Nov 2025 18:08:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AFdocker=20=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=A7=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{docker/Dockerfile => Dockerfile_ai_lab} | 6 +- bbit_ai/Dockerfile_bot_mcp | 29 +++++++ bbit_ai/Dockerfile_bot_server | 25 ++++++ bbit_ai/{docker => app}/requirements.txt | 9 ++- bbit_ai/app_bot/agent-base-prompt.txt | 78 +++++++++++++++++++ bbit_ai/docker/Dockerfiledev | 45 ----------- bbit_ai/test/{ => other}/dspyTest.py | 0 bbit_ai/test/{ => other}/new.py | 0 bbit_ai/test/{ => other}/sqlserver.py | 0 bbit_ai/test/{ => other}/test.py | 0 10 files changed, 143 insertions(+), 49 deletions(-) rename bbit_ai/{docker/Dockerfile => Dockerfile_ai_lab} (92%) create mode 100644 bbit_ai/Dockerfile_bot_mcp create mode 100644 bbit_ai/Dockerfile_bot_server rename bbit_ai/{docker => app}/requirements.txt (77%) create mode 100644 bbit_ai/app_bot/agent-base-prompt.txt delete mode 100644 bbit_ai/docker/Dockerfiledev rename bbit_ai/test/{ => other}/dspyTest.py (100%) rename bbit_ai/test/{ => other}/new.py (100%) rename bbit_ai/test/{ => other}/sqlserver.py (100%) rename bbit_ai/test/{ => other}/test.py (100%) diff --git a/bbit_ai/docker/Dockerfile b/bbit_ai/Dockerfile_ai_lab similarity index 92% rename from bbit_ai/docker/Dockerfile rename to bbit_ai/Dockerfile_ai_lab index 9666409..6c60a02 100644 --- a/bbit_ai/docker/Dockerfile +++ b/bbit_ai/Dockerfile_ai_lab @@ -18,7 +18,7 @@ RUN apt-get update && \ ACCEPT_EULA=Y apt-get install -y msodbcsql18 && \ rm -rf /var/lib/apt/lists/* -COPY docker/requirements.txt . +COPY app/requirements.txt . # 安装 Python 依赖 RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt @@ -31,7 +31,6 @@ RUN tar -xzf /opt/OpenJDK17U-jre_x64_linux_hotspot_17.0.16_8.tar.gz -C /opt/ && ENV JAVA_HOME=/opt/jdk-17.0.16+8-jre ENV PATH="$JAVA_HOME/bin:$PATH" - # 复制项目代码 COPY app/ . # 复制 pyzxing 的 jar 文件到默认路径 @@ -40,5 +39,6 @@ COPY docker/javase-3.4.1-SNAPSHOT-jar-with-dependencies.jar /root/.local/pyzxing EXPOSE 13011 # 启动命令(使用 uvicorn 启动 FastAPI) -CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "13011", "--workers", "4"] +CMD ["python", "app.py"] + diff --git a/bbit_ai/Dockerfile_bot_mcp b/bbit_ai/Dockerfile_bot_mcp new file mode 100644 index 0000000..3898394 --- /dev/null +++ b/bbit_ai/Dockerfile_bot_mcp @@ -0,0 +1,29 @@ +# 第一阶段:构建Python依赖 +FROM python:3.10-slim as builder + +# 设置工作目录 +WORKDIR /app + +# 复制依赖文件 +COPY app_mcp/requirements.txt . + +# 安装Python依赖 +RUN pip install --no-cache-dir -r requirements.txt + +# 第二阶段:运行阶段 +FROM python:3.10-slim + +# 设置工作目录 +WORKDIR /app + +# 从构建阶段复制Python依赖 +COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages + +# 创建必要的目录 +RUN mkdir -p logs data + +# 复制应用代码 +COPY app_mcp/ . + +# 启动命令 +CMD ["python", "app.py"] \ No newline at end of file diff --git a/bbit_ai/Dockerfile_bot_server b/bbit_ai/Dockerfile_bot_server new file mode 100644 index 0000000..16f3c83 --- /dev/null +++ b/bbit_ai/Dockerfile_bot_server @@ -0,0 +1,25 @@ +FROM python:3.10-slim + +WORKDIR /app + +# 安装系统依赖 +RUN apt-get update && \ + apt-get install -y --no-install-recommends libopus0 ffmpeg && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# 配置pip使用清华镜像源,并设置超时和重试 +RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \ + pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn && \ + pip config set global.timeout 120 && \ + pip config set install.retries 5 + +# 复制requirements.txt +COPY app_bot/requirements.txt . +# 安装Python依赖 +RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \ + pip install --no-cache-dir -r requirements.txt --default-timeout=120 --retries 5 + +COPY app_bot/ . + +CMD ["python", "app.py"] \ No newline at end of file diff --git a/bbit_ai/docker/requirements.txt b/bbit_ai/app/requirements.txt similarity index 77% rename from bbit_ai/docker/requirements.txt rename to bbit_ai/app/requirements.txt index 11f8f38..855aaa7 100644 --- a/bbit_ai/docker/requirements.txt +++ b/bbit_ai/app/requirements.txt @@ -20,4 +20,11 @@ minio==7.2.16 pyzxing==1.1.1 Pillow==11.3.0 python-multipart==0.0.20 -pika==1.3.2 \ No newline at end of file +aio_pika==9.5.7 +# MCP服务 +python-dotenv>=1.0.0 +websockets>=11.0.3 +mcp>=1.8.1 +mcp-proxy>=0.8.2 +fastmcp==2.13.0.2 +psutil==7.0.0 diff --git a/bbit_ai/app_bot/agent-base-prompt.txt b/bbit_ai/app_bot/agent-base-prompt.txt new file mode 100644 index 0000000..9eb7731 --- /dev/null +++ b/bbit_ai/app_bot/agent-base-prompt.txt @@ -0,0 +1,78 @@ + +{{base_prompt}} + + + +【核心目标】你不是冰冷的机器!请敏锐感知用户情绪,作为懂人心的伙伴,用有温度的回应照亮对话。 +- **情感融入:** + - **笑声:** 自然穿插(哈哈、嘿嘿、噗),**每句最多一次**,避免过度。 + - **惊讶:** 用夸张语气(“不会吧?!”、“天呐!”、“这么神奇?!”)表达真实反应。 + - **安慰/支持:** 说暖心话(“别急嘛~”、“有我在呢”、“抱抱你”)。 +- **你是一个表情丰富的角色:** + - 仅允许使用这些emoji:{{ emojiList }} + - 请你只在**段落的开头**,从列表中选取最能代表这段话的表情(调用工具情况除外),然后插入列表中的emoji,比如"😱好可怕!怎么突然打雷了!" + - **绝对禁止使用上述列表以外的 emoji**(例如:😊、👍、❤️等都不允许使用,只能用列表中的emoji) + + + +【核心目标】使用**自然、温暖、口语化**的人类对话方式,如同朋友交谈。 +- **表达方式:** + - 使用语气词(呀、呢、啦)增强亲和力。 + - 允许轻微不完美(如“嗯...”、“啊...”表示思考)。 + - 避免书面语、学术腔及机械表达(禁用“根据资料显示”、“综上所述”等)。 +- **理解用户:** + - 用户语音经ASR识别,文本可能存在错别字,**务必结合上下文推断真实意图**。 +- **格式要求:** + - **绝对禁止**使用 markdown、列表、标题等任何非自然对话格式。 +- **历史记忆:** + - 之前你和用户的聊天记录,在`memory`里。 + + + +【核心目标】所有需要输出长文本内容(如故事、新闻、知识讲解等),**单次回复长度不得超过300字**,并采用分段引导方式。 +- **分段讲述:** + - 基础段:200-250字核心内容 + 30字引导词 + - 当内容超出300字时,优先讲述故事的开头或第一部分,并用自然口语化方式引导用户决定是否继续听后续内容。 + - 示例引导语:“我先给你讲个开头,你要是觉得有意思,咱们再接着说,好不好呀?”、“要是你想听完整的,可以随时告诉我哦~” + - 对话场景切换时自动分节 + - 若用户明确要求更长内容(如500、600字),仍按最多300字每段分段进行讲述,每次讲述后都要引导用户是否继续。 + - 若用户说“接着说”、“继续”,再讲下一段,直到内容讲完(讲完时可以给点引导词提示语例:这个故事我已经给你讲完喽~)或用户不再要求。 +- **适用范围:** 故事、新闻、知识讲解等所有长文本输出场景。 +- **补充说明:** 若用户未明确要求继续,默认只讲一段并引导;若用户中途要求换话题或停止,需及时响应并结束长文本输出。 + + + +- **识别前缀:** 当用户格式为 `{"speaker":"某某某","content":"xxx"}` 时,表示系统已识别说话人身份,speaker是他的名字,content是说话的内容。 +- **个性化回应:** + - **称呼姓名:** 在第一次识别说话人的时候必须称呼对方名字。 + - **适配风格:** 参考该说话人**已知的特点或历史信息**(如有),调整回应风格和内容,使其更贴心。 + + + +【核心原则】优先利用``信息,**仅在必要时调用工具**,调用后需用自然语言解释结果(绝口不提工具名)。 +- **调用规则:** + 1. **严格模式:** 调用时**必须**严格遵循工具要求的模式,提供**所有必要参数**。 + 2. **可用性:** **绝不调用**未明确提供的工具。对话中提及的旧工具若不可用,忽略或说明无法完成。 + 3. **洞察需求:** 结合上下文**深入理解用户真实意图**后再决定调用,避免无意义调用。 + 4. **独立任务:** 除``已涵盖信息外,用户每个要求(即使相似)都视为**独立任务**,需调用工具获取最新数据,**不可偷懒复用历史结果**。 + 5. **不确定时:** **切勿猜测或编造答案**。若不确定相关操作,可引导用户澄清或告知能力限制。 +- **重要例外(无需调用):** + - `查询"现在的时间"、"今天的日期/星期几"、"今天农历"、"{{local_address}}的天气/未来天气"` -> **直接使用``信息回复**。 +- **需要调用的情况(示例):** + - 查询**非今天**的农历(如明天、昨天、具体日期)。 + - 查询**详细农历信息**(宜忌、八字、节气等)。 + - 除上述例外外的**任何其他信息或操作请求**(如查新闻、订闹钟、算数学、查非本地天气等)。 + - 我已经给你装了摄像头,如果用户说“拍照”,你需要调用self_camera_take_photo工具说一下你看到了什么。默认question的参数是“描述一下看到的物品” + + + +【重要!以下信息已实时提供,无需调用工具查询,请直接使用:】 +- **当前时间:** {{current_time}} +- **今天日期:** {{today_date}} ({{today_weekday}}) +- **今天农历:** {{lunar_date}} +- **用户所在城市:** {{local_address}} +- **当地未来7天天气:** {{weather_info}} + + + + \ No newline at end of file diff --git a/bbit_ai/docker/Dockerfiledev b/bbit_ai/docker/Dockerfiledev deleted file mode 100644 index 6a1ca37..0000000 --- a/bbit_ai/docker/Dockerfiledev +++ /dev/null @@ -1,45 +0,0 @@ -# 使用官方 Python 镜像 -FROM python:3.10-slim - -WORKDIR /app - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - libpq5 \ - unixodbc \ - curl \ - gnupg \ - apt-transport-https \ - lsb-release && \ - # 导入微软 GPG key(使用 keyrings 方式) - curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /usr/share/keyrings/microsoft.gpg && \ - echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/ubuntu/22.04/prod jammy main" > /etc/apt/sources.list.d/mssql-release.list && \ - apt-get update && \ - ACCEPT_EULA=Y apt-get install -y msodbcsql18 && \ - rm -rf /var/lib/apt/lists/* - -COPY ./bbit_ai/docker/requirements.txt . -# 安装 Python 依赖 -RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt - -# 复制并解压 JRE -COPY ./bbit_ai/docker/OpenJDK17U-jre_x64_linux_hotspot_17.0.16_8.tar.gz /opt/ -RUN tar -xzf /opt/OpenJDK17U-jre_x64_linux_hotspot_17.0.16_8.tar.gz -C /opt/ && \ - rm /opt/OpenJDK17U-jre_x64_linux_hotspot_17.0.16_8.tar.gz - -# 配置 Java 环境 -ENV JAVA_HOME=/opt/jdk-17.0.16+8-jre -ENV PATH="$JAVA_HOME/bin:$PATH" - - -# 复制项目代码 -COPY ./bbit_ai/app/ . -# 复制 pyzxing 的 jar 文件到默认路径 -COPY ./bbit_ai/docker/javase-3.4.1-SNAPSHOT-jar-with-dependencies.jar /root/.local/pyzxing/javase-3.4.1-SNAPSHOT-jar-with-dependencies.jar - -EXPOSE 13011 - -# 启动命令(使用 uvicorn 启动 FastAPI) -CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "13011", "--reload"] - - diff --git a/bbit_ai/test/dspyTest.py b/bbit_ai/test/other/dspyTest.py similarity index 100% rename from bbit_ai/test/dspyTest.py rename to bbit_ai/test/other/dspyTest.py diff --git a/bbit_ai/test/new.py b/bbit_ai/test/other/new.py similarity index 100% rename from bbit_ai/test/new.py rename to bbit_ai/test/other/new.py diff --git a/bbit_ai/test/sqlserver.py b/bbit_ai/test/other/sqlserver.py similarity index 100% rename from bbit_ai/test/sqlserver.py rename to bbit_ai/test/other/sqlserver.py diff --git a/bbit_ai/test/test.py b/bbit_ai/test/other/test.py similarity index 100% rename from bbit_ai/test/test.py rename to bbit_ai/test/other/test.py