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