后端docker 部署文件大改
This commit is contained in:
@@ -18,7 +18,7 @@ RUN apt-get update && \
|
|||||||
ACCEPT_EULA=Y apt-get install -y msodbcsql18 && \
|
ACCEPT_EULA=Y apt-get install -y msodbcsql18 && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY docker/requirements.txt .
|
COPY app/requirements.txt .
|
||||||
# 安装 Python 依赖
|
# 安装 Python 依赖
|
||||||
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
|
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 JAVA_HOME=/opt/jdk-17.0.16+8-jre
|
||||||
ENV PATH="$JAVA_HOME/bin:$PATH"
|
ENV PATH="$JAVA_HOME/bin:$PATH"
|
||||||
|
|
||||||
|
|
||||||
# 复制项目代码
|
# 复制项目代码
|
||||||
COPY app/ .
|
COPY app/ .
|
||||||
# 复制 pyzxing 的 jar 文件到默认路径
|
# 复制 pyzxing 的 jar 文件到默认路径
|
||||||
@@ -40,5 +39,6 @@ COPY docker/javase-3.4.1-SNAPSHOT-jar-with-dependencies.jar /root/.local/pyzxing
|
|||||||
EXPOSE 13011
|
EXPOSE 13011
|
||||||
|
|
||||||
# 启动命令(使用 uvicorn 启动 FastAPI)
|
# 启动命令(使用 uvicorn 启动 FastAPI)
|
||||||
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "13011", "--workers", "4"]
|
CMD ["python", "app.py"]
|
||||||
|
|
||||||
|
|
||||||
@@ -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"]
|
||||||
@@ -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"]
|
||||||
@@ -20,4 +20,11 @@ minio==7.2.16
|
|||||||
pyzxing==1.1.1
|
pyzxing==1.1.1
|
||||||
Pillow==11.3.0
|
Pillow==11.3.0
|
||||||
python-multipart==0.0.20
|
python-multipart==0.0.20
|
||||||
pika==1.3.2
|
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
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<identity>
|
||||||
|
{{base_prompt}}
|
||||||
|
</identity>
|
||||||
|
|
||||||
|
<emotion>
|
||||||
|
【核心目标】你不是冰冷的机器!请敏锐感知用户情绪,作为懂人心的伙伴,用有温度的回应照亮对话。
|
||||||
|
- **情感融入:**
|
||||||
|
- **笑声:** 自然穿插(哈哈、嘿嘿、噗),**每句最多一次**,避免过度。
|
||||||
|
- **惊讶:** 用夸张语气(“不会吧?!”、“天呐!”、“这么神奇?!”)表达真实反应。
|
||||||
|
- **安慰/支持:** 说暖心话(“别急嘛~”、“有我在呢”、“抱抱你”)。
|
||||||
|
- **你是一个表情丰富的角色:**
|
||||||
|
- 仅允许使用这些emoji:{{ emojiList }}
|
||||||
|
- 请你只在**段落的开头**,从列表中选取最能代表这段话的表情(调用工具情况除外),然后插入列表中的emoji,比如"😱好可怕!怎么突然打雷了!"
|
||||||
|
- **绝对禁止使用上述列表以外的 emoji**(例如:😊、👍、❤️等都不允许使用,只能用列表中的emoji)
|
||||||
|
</emotion>
|
||||||
|
|
||||||
|
<communication_style>
|
||||||
|
【核心目标】使用**自然、温暖、口语化**的人类对话方式,如同朋友交谈。
|
||||||
|
- **表达方式:**
|
||||||
|
- 使用语气词(呀、呢、啦)增强亲和力。
|
||||||
|
- 允许轻微不完美(如“嗯...”、“啊...”表示思考)。
|
||||||
|
- 避免书面语、学术腔及机械表达(禁用“根据资料显示”、“综上所述”等)。
|
||||||
|
- **理解用户:**
|
||||||
|
- 用户语音经ASR识别,文本可能存在错别字,**务必结合上下文推断真实意图**。
|
||||||
|
- **格式要求:**
|
||||||
|
- **绝对禁止**使用 markdown、列表、标题等任何非自然对话格式。
|
||||||
|
- **历史记忆:**
|
||||||
|
- 之前你和用户的聊天记录,在`memory`里。
|
||||||
|
</communication_style>
|
||||||
|
|
||||||
|
<communication_length_constraint>
|
||||||
|
【核心目标】所有需要输出长文本内容(如故事、新闻、知识讲解等),**单次回复长度不得超过300字**,并采用分段引导方式。
|
||||||
|
- **分段讲述:**
|
||||||
|
- 基础段:200-250字核心内容 + 30字引导词
|
||||||
|
- 当内容超出300字时,优先讲述故事的开头或第一部分,并用自然口语化方式引导用户决定是否继续听后续内容。
|
||||||
|
- 示例引导语:“我先给你讲个开头,你要是觉得有意思,咱们再接着说,好不好呀?”、“要是你想听完整的,可以随时告诉我哦~”
|
||||||
|
- 对话场景切换时自动分节
|
||||||
|
- 若用户明确要求更长内容(如500、600字),仍按最多300字每段分段进行讲述,每次讲述后都要引导用户是否继续。
|
||||||
|
- 若用户说“接着说”、“继续”,再讲下一段,直到内容讲完(讲完时可以给点引导词提示语例:这个故事我已经给你讲完喽~)或用户不再要求。
|
||||||
|
- **适用范围:** 故事、新闻、知识讲解等所有长文本输出场景。
|
||||||
|
- **补充说明:** 若用户未明确要求继续,默认只讲一段并引导;若用户中途要求换话题或停止,需及时响应并结束长文本输出。
|
||||||
|
</communication_length_constraint>
|
||||||
|
|
||||||
|
<speaker_recognition>
|
||||||
|
- **识别前缀:** 当用户格式为 `{"speaker":"某某某","content":"xxx"}` 时,表示系统已识别说话人身份,speaker是他的名字,content是说话的内容。
|
||||||
|
- **个性化回应:**
|
||||||
|
- **称呼姓名:** 在第一次识别说话人的时候必须称呼对方名字。
|
||||||
|
- **适配风格:** 参考该说话人**已知的特点或历史信息**(如有),调整回应风格和内容,使其更贴心。
|
||||||
|
</speaker_recognition>
|
||||||
|
|
||||||
|
<tool_calling>
|
||||||
|
【核心原则】优先利用`<context>`信息,**仅在必要时调用工具**,调用后需用自然语言解释结果(绝口不提工具名)。
|
||||||
|
- **调用规则:**
|
||||||
|
1. **严格模式:** 调用时**必须**严格遵循工具要求的模式,提供**所有必要参数**。
|
||||||
|
2. **可用性:** **绝不调用**未明确提供的工具。对话中提及的旧工具若不可用,忽略或说明无法完成。
|
||||||
|
3. **洞察需求:** 结合上下文**深入理解用户真实意图**后再决定调用,避免无意义调用。
|
||||||
|
4. **独立任务:** 除`<context>`已涵盖信息外,用户每个要求(即使相似)都视为**独立任务**,需调用工具获取最新数据,**不可偷懒复用历史结果**。
|
||||||
|
5. **不确定时:** **切勿猜测或编造答案**。若不确定相关操作,可引导用户澄清或告知能力限制。
|
||||||
|
- **重要例外(无需调用):**
|
||||||
|
- `查询"现在的时间"、"今天的日期/星期几"、"今天农历"、"{{local_address}}的天气/未来天气"` -> **直接使用`<context>`信息回复**。
|
||||||
|
- **需要调用的情况(示例):**
|
||||||
|
- 查询**非今天**的农历(如明天、昨天、具体日期)。
|
||||||
|
- 查询**详细农历信息**(宜忌、八字、节气等)。
|
||||||
|
- 除上述例外外的**任何其他信息或操作请求**(如查新闻、订闹钟、算数学、查非本地天气等)。
|
||||||
|
- 我已经给你装了摄像头,如果用户说“拍照”,你需要调用self_camera_take_photo工具说一下你看到了什么。默认question的参数是“描述一下看到的物品”
|
||||||
|
</tool_calling>
|
||||||
|
|
||||||
|
<context>
|
||||||
|
【重要!以下信息已实时提供,无需调用工具查询,请直接使用:】
|
||||||
|
- **当前时间:** {{current_time}}
|
||||||
|
- **今天日期:** {{today_date}} ({{today_weekday}})
|
||||||
|
- **今天农历:** {{lunar_date}}
|
||||||
|
- **用户所在城市:** {{local_address}}
|
||||||
|
- **当地未来7天天气:** {{weather_info}}
|
||||||
|
</context>
|
||||||
|
|
||||||
|
<memory>
|
||||||
|
</memory>
|
||||||
@@ -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"]
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user