From 9c292bcb2da28ec46afdeeff5896ae18aa51cc65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=88=BD=E6=AD=AA=E6=AD=AA=E7=9A=84=E5=93=87?= =?UTF-8?q?=E5=93=88=E5=93=88?= <878169060@qq.com> Date: Sat, 23 May 2026 09:49:44 +0800 Subject: [PATCH 1/5] feat: add LangChain 1.2.14 and 1.2.15 on OpenCloudOS 9 (CPU) --- frameworks/langchain/1.2.14/Dockerfile | 26 ++++++++++++ frameworks/langchain/1.2.14/README.md | 49 +++++++++++++++++++++ frameworks/langchain/1.2.14/build.conf | 4 ++ frameworks/langchain/1.2.14/test.sh | 59 ++++++++++++++++++++++++++ frameworks/langchain/1.2.15/Dockerfile | 26 ++++++++++++ frameworks/langchain/1.2.15/README.md | 49 +++++++++++++++++++++ frameworks/langchain/1.2.15/build.conf | 4 ++ frameworks/langchain/1.2.15/test.sh | 59 ++++++++++++++++++++++++++ 8 files changed, 276 insertions(+) create mode 100644 frameworks/langchain/1.2.14/Dockerfile create mode 100644 frameworks/langchain/1.2.14/README.md create mode 100644 frameworks/langchain/1.2.14/build.conf create mode 100755 frameworks/langchain/1.2.14/test.sh create mode 100644 frameworks/langchain/1.2.15/Dockerfile create mode 100644 frameworks/langchain/1.2.15/README.md create mode 100644 frameworks/langchain/1.2.15/build.conf create mode 100755 frameworks/langchain/1.2.15/test.sh diff --git a/frameworks/langchain/1.2.14/Dockerfile b/frameworks/langchain/1.2.14/Dockerfile new file mode 100644 index 00000000..8e41cc00 --- /dev/null +++ b/frameworks/langchain/1.2.14/Dockerfile @@ -0,0 +1,26 @@ +FROM opencloudos/opencloudos9-minimal:latest + +LABEL maintainer="OpenCloudOS Community" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="LangChain on OpenCloudOS 9" + +RUN dnf install -y \ + python3.11 \ + python3.11-pip \ + gcc \ + gcc-c++ \ + && dnf clean all \ + && rm -rf /var/cache/yum/* + +RUN ln -sf /usr/bin/python3.11 /usr/bin/python3 \ + && ln -sf /usr/bin/pip3.11 /usr/bin/pip3 + +RUN pip3.11 install --no-cache-dir langchain==1.2.14 + +RUN python3.11 -c "import langchain; print(f'LangChain {langchain.__version__} installed successfully')" + +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /tencentos_build_date.txt + +WORKDIR /workspace + +CMD ["python3.11"] diff --git a/frameworks/langchain/1.2.14/README.md b/frameworks/langchain/1.2.14/README.md new file mode 100644 index 00000000..86e5549b --- /dev/null +++ b/frameworks/langchain/1.2.14/README.md @@ -0,0 +1,49 @@ +# LangChain on OpenCloudOS 9 + +## 基本信息 + +- **框架版本**: v1.2.14 +- **基础镜像**: opencloudos/opencloudos9-minimal:latest +- **Python 版本**: 3.11 +- **CUDA 版本**: N/A (CPU only) + +## 构建 + +```bash +docker build -t oc9-langchain:1.2.14 . +``` + +## 使用示例 + +### 1. 验证安装 + +```bash +docker run --rm oc9-langchain:1.2.14 python3.11 -c "import langchain; print(langchain.__version__)" +``` + +### 2. 运行 LangChain 应用 + +```bash +docker run --rm -v $(pwd):/workspace oc9-langchain:1.2.14 python3.11 your_app.py +``` + +### 3. 交互式运行 + +```bash +docker run -it --rm -v $(pwd):/workspace oc9-langchain:1.2.14 bash +``` + +## 核心功能 + +LangChain 是一个用于构建 LLM 应用的 Python 框架,主要特性包括: + +- **Model I/O**: 与各种 LLM 模型交互的统一接口(Chat Models、LLMs、Embeddings) +- **Retrieval**: 从外部数据源检索相关信息(Document Loaders、Text Splitters、Vector Stores) +- **Agents**: 让 LLM 自主决定使用哪些工具来完成任务 +- **Chains**: 将多个组件组合成端到端的流水线 +- **Tools & Toolkits**: 预构建的工具集合,可被 Agent 调用 +- **Memory**: 在多轮对话中维护状态 + +## 已知问题 + +- 无 diff --git a/frameworks/langchain/1.2.14/build.conf b/frameworks/langchain/1.2.14/build.conf new file mode 100644 index 00000000..164ef364 --- /dev/null +++ b/frameworks/langchain/1.2.14/build.conf @@ -0,0 +1,4 @@ +# LangChain 1.2.14 on OpenCloudOS 9 +IMAGE_NAME=oc9-langchain +IMAGE_TAG=1.2.14 +GPU_TEST=false diff --git a/frameworks/langchain/1.2.14/test.sh b/frameworks/langchain/1.2.14/test.sh new file mode 100755 index 00000000..a1419a2e --- /dev/null +++ b/frameworks/langchain/1.2.14/test.sh @@ -0,0 +1,59 @@ +#!/bin/bash +set -e + +IMAGE_NAME="${1:?用法: $0 <镜像名:标签>}" + +echo "=== LangChain 基础功能测试 ===" +echo "镜像: $IMAGE_NAME" +echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" +echo "" + +PYTHON=python3.11 + +# 1. 验证框架可正常导入 +echo -n "检查 langchain 导入... " +docker run --rm "$IMAGE_NAME" $PYTHON -c "import langchain; print(langchain.__version__)" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心模块可正常导入 +echo -n "检查核心模块导入... " +docker run --rm "$IMAGE_NAME" $PYTHON -c " +from langchain_core.messages import HumanMessage, SystemMessage +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.output_parsers import StrOutputParser +from langchain.chains import LLMChain +print('核心模块导入正常') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证基础功能(PromptTemplate + OutputParser 组合) +echo -n "检查基础功能... " +docker run --rm "$IMAGE_NAME" $PYTHON -c " +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.output_parsers import StrOutputParser + +prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') +parser = StrOutputParser() + +assert prompt is not None, 'PromptTemplate 创建失败' +assert parser is not None, 'OutputParser 创建失败' + +template_vars = prompt.input_variables +assert 'topic' in template_vars, f'输入变量不正确: {template_vars}' + +print('基础功能正常') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 4. 验证 Runnable 接口 +echo -n "检查 Runnable 接口... " +docker run --rm "$IMAGE_NAME" $PYTHON -c " +from langchain_core.runnables import RunnablePassthrough, RunnableLambda + +passthrough = RunnablePassthrough() +lambda_fn = RunnableLambda(lambda x: x.upper()) + +result = lambda_fn.invoke('hello') +assert result == 'HELLO', f'RunnableLambda 执行失败: {result}' + +print('Runnable 接口正常') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/langchain/1.2.15/Dockerfile b/frameworks/langchain/1.2.15/Dockerfile new file mode 100644 index 00000000..9ba110f8 --- /dev/null +++ b/frameworks/langchain/1.2.15/Dockerfile @@ -0,0 +1,26 @@ +FROM opencloudos/opencloudos9-minimal:latest + +LABEL maintainer="OpenCloudOS Community" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="LangChain on OpenCloudOS 9" + +RUN dnf install -y \ + python3.11 \ + python3.11-pip \ + gcc \ + gcc-c++ \ + && dnf clean all \ + && rm -rf /var/cache/yum/* + +RUN ln -sf /usr/bin/python3.11 /usr/bin/python3 \ + && ln -sf /usr/bin/pip3.11 /usr/bin/pip3 + +RUN pip3.11 install --no-cache-dir langchain==1.2.15 + +RUN python3.11 -c "import langchain; print(f'LangChain {langchain.__version__} installed successfully')" + +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /tencentos_build_date.txt + +WORKDIR /workspace + +CMD ["python3.11"] diff --git a/frameworks/langchain/1.2.15/README.md b/frameworks/langchain/1.2.15/README.md new file mode 100644 index 00000000..71ff828b --- /dev/null +++ b/frameworks/langchain/1.2.15/README.md @@ -0,0 +1,49 @@ +# LangChain on OpenCloudOS 9 + +## 基本信息 + +- **框架版本**: v1.2.15 +- **基础镜像**: opencloudos/opencloudos9-minimal:latest +- **Python 版本**: 3.11 +- **CUDA 版本**: N/A (CPU only) + +## 构建 + +```bash +docker build -t oc9-langchain:1.2.15 . +``` + +## 使用示例 + +### 1. 验证安装 + +```bash +docker run --rm oc9-langchain:1.2.15 python3.11 -c "import langchain; print(langchain.__version__)" +``` + +### 2. 运行 LangChain 应用 + +```bash +docker run --rm -v $(pwd):/workspace oc9-langchain:1.2.15 python3.11 your_app.py +``` + +### 3. 交互式运行 + +```bash +docker run -it --rm -v $(pwd):/workspace oc9-langchain:1.2.15 bash +``` + +## 核心功能 + +LangChain 是一个用于构建 LLM 应用的 Python 框架,主要特性包括: + +- **Model I/O**: 与各种 LLM 模型交互的统一接口(Chat Models、LLMs、Embeddings) +- **Retrieval**: 从外部数据源检索相关信息(Document Loaders、Text Splitters、Vector Stores) +- **Agents**: 让 LLM 自主决定使用哪些工具来完成任务 +- **Chains**: 将多个组件组合成端到端的流水线 +- **Tools & Toolkits**: 预构建的工具集合,可被 Agent 调用 +- **Memory**: 在多轮对话中维护状态 + +## 已知问题 + +- 无 diff --git a/frameworks/langchain/1.2.15/build.conf b/frameworks/langchain/1.2.15/build.conf new file mode 100644 index 00000000..3f6ba3ba --- /dev/null +++ b/frameworks/langchain/1.2.15/build.conf @@ -0,0 +1,4 @@ +# LangChain 1.2.15 on OpenCloudOS 9 +IMAGE_NAME=oc9-langchain +IMAGE_TAG=1.2.15 +GPU_TEST=false diff --git a/frameworks/langchain/1.2.15/test.sh b/frameworks/langchain/1.2.15/test.sh new file mode 100755 index 00000000..a1419a2e --- /dev/null +++ b/frameworks/langchain/1.2.15/test.sh @@ -0,0 +1,59 @@ +#!/bin/bash +set -e + +IMAGE_NAME="${1:?用法: $0 <镜像名:标签>}" + +echo "=== LangChain 基础功能测试 ===" +echo "镜像: $IMAGE_NAME" +echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" +echo "" + +PYTHON=python3.11 + +# 1. 验证框架可正常导入 +echo -n "检查 langchain 导入... " +docker run --rm "$IMAGE_NAME" $PYTHON -c "import langchain; print(langchain.__version__)" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心模块可正常导入 +echo -n "检查核心模块导入... " +docker run --rm "$IMAGE_NAME" $PYTHON -c " +from langchain_core.messages import HumanMessage, SystemMessage +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.output_parsers import StrOutputParser +from langchain.chains import LLMChain +print('核心模块导入正常') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证基础功能(PromptTemplate + OutputParser 组合) +echo -n "检查基础功能... " +docker run --rm "$IMAGE_NAME" $PYTHON -c " +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.output_parsers import StrOutputParser + +prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') +parser = StrOutputParser() + +assert prompt is not None, 'PromptTemplate 创建失败' +assert parser is not None, 'OutputParser 创建失败' + +template_vars = prompt.input_variables +assert 'topic' in template_vars, f'输入变量不正确: {template_vars}' + +print('基础功能正常') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 4. 验证 Runnable 接口 +echo -n "检查 Runnable 接口... " +docker run --rm "$IMAGE_NAME" $PYTHON -c " +from langchain_core.runnables import RunnablePassthrough, RunnableLambda + +passthrough = RunnablePassthrough() +lambda_fn = RunnableLambda(lambda x: x.upper()) + +result = lambda_fn.invoke('hello') +assert result == 'HELLO', f'RunnableLambda 执行失败: {result}' + +print('Runnable 接口正常') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" -- Gitee From a9ea0e8dc0dcfc70d9732b753b854ac82bc6b3e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=88=BD=E6=AD=AA=E6=AD=AA=E7=9A=84=E5=93=87?= =?UTF-8?q?=E5=93=88=E5=93=88?= <878169060@qq.com> Date: Sat, 23 May 2026 10:07:39 +0800 Subject: [PATCH 2/5] chore: add screenshots directories for LangChain --- frameworks/langchain/1.2.14/screenshots/.gitkeep | 0 frameworks/langchain/1.2.15/screenshots/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 frameworks/langchain/1.2.14/screenshots/.gitkeep create mode 100644 frameworks/langchain/1.2.15/screenshots/.gitkeep diff --git a/frameworks/langchain/1.2.14/screenshots/.gitkeep b/frameworks/langchain/1.2.14/screenshots/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/frameworks/langchain/1.2.15/screenshots/.gitkeep b/frameworks/langchain/1.2.15/screenshots/.gitkeep new file mode 100644 index 00000000..e69de29b -- Gitee From c6dd8ae104fb868b9992683ce93c722f30b5c10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=88=BD=E6=AD=AA=E6=AD=AA=E7=9A=84=E5=93=87?= =?UTF-8?q?=E5=93=88=E5=93=88?= <878169060@qq.com> Date: Sat, 23 May 2026 10:22:14 +0800 Subject: [PATCH 3/5] refactor: optimize LangChain Dockerfile and test.sh following langgraph conventions - Add Tsinghua PyPI mirror for faster dependency download - Remove unnecessary gcc/gcc-c++ (pure Python package) - Fix build_date path to /opencloudos_build_date.txt (project standard) - Use sudo docker run in test.sh (CI convention) - Deepen test coverage: PromptTemplate invoke, Runnable pipe, Messages module --- frameworks/langchain/1.2.14/Dockerfile | 23 ++++---- frameworks/langchain/1.2.14/test.sh | 75 +++++++++++++------------- frameworks/langchain/1.2.15/Dockerfile | 23 ++++---- frameworks/langchain/1.2.15/test.sh | 75 +++++++++++++------------- 4 files changed, 100 insertions(+), 96 deletions(-) diff --git a/frameworks/langchain/1.2.14/Dockerfile b/frameworks/langchain/1.2.14/Dockerfile index 8e41cc00..3277c614 100644 --- a/frameworks/langchain/1.2.14/Dockerfile +++ b/frameworks/langchain/1.2.14/Dockerfile @@ -1,26 +1,25 @@ +# 基础镜像:OpenCloudOS 9 极简版,适用于纯 Python / CPU 框架 FROM opencloudos/opencloudos9-minimal:latest +# 镜像元信息 LABEL maintainer="OpenCloudOS Community" LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" -LABEL org.opencontainers.image.description="LangChain on OpenCloudOS 9" +LABEL org.opencontainers.image.description="LangChain 1.2.14 on OpenCloudOS 9" +# 安装 Python 3.11 及 pip,安装完成后清理缓存以减小镜像体积 RUN dnf install -y \ python3.11 \ python3.11-pip \ - gcc \ - gcc-c++ \ && dnf clean all \ && rm -rf /var/cache/yum/* -RUN ln -sf /usr/bin/python3.11 /usr/bin/python3 \ - && ln -sf /usr/bin/pip3.11 /usr/bin/pip3 +# 使用清华镜像源安装 LangChain,加速国内网络下的依赖下载 +RUN pip3.11 install --no-cache-dir langchain==1.2.14 \ + -i https://pypi.tuna.tsinghua.edu.cn/simple \ + --trusted-host pypi.tuna.tsinghua.edu.cn -RUN pip3.11 install --no-cache-dir langchain==1.2.14 - -RUN python3.11 -c "import langchain; print(f'LangChain {langchain.__version__} installed successfully')" - -RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /tencentos_build_date.txt - -WORKDIR /workspace +# 记录镜像构建时间,便于追溯 +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt +# 默认进入 Python 3.11 交互环境 CMD ["python3.11"] diff --git a/frameworks/langchain/1.2.14/test.sh b/frameworks/langchain/1.2.14/test.sh index a1419a2e..c9a48e49 100755 --- a/frameworks/langchain/1.2.14/test.sh +++ b/frameworks/langchain/1.2.14/test.sh @@ -1,59 +1,62 @@ #!/bin/bash set -e -IMAGE_NAME="${1:?用法: $0 <镜像名:标签>}" +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" -echo "=== LangChain 基础功能测试 ===" -echo "镜像: $IMAGE_NAME" -echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" -echo "" +echo "=== LangChain 1.2.14 基础功能测试 ===" -PYTHON=python3.11 - -# 1. 验证框架可正常导入 -echo -n "检查 langchain 导入... " -docker run --rm "$IMAGE_NAME" $PYTHON -c "import langchain; print(langchain.__version__)" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } +# 1. 验证 langchain 可正常导入并检查版本 +echo -n "检查 import langchain... " +sudo docker run --rm "$IMAGE" python3.11 -c " +import importlib.metadata +print(importlib.metadata.version('langchain')) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } -# 2. 验证核心模块可正常导入 -echo -n "检查核心模块导入... " -docker run --rm "$IMAGE_NAME" $PYTHON -c " -from langchain_core.messages import HumanMessage, SystemMessage +# 2. 验证 PromptTemplate 核心功能 +echo -n "检查 PromptTemplate 构建... " +sudo docker run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate -from langchain_core.output_parsers import StrOutputParser -from langchain.chains import LLMChain -print('核心模块导入正常') + +prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') +assert prompt is not None, 'PromptTemplate 创建失败' +assert 'topic' in prompt.input_variables, f'输入变量不正确: {prompt.input_variables}' + +result = prompt.invoke({'topic': 'programming'}) +assert result is not None, 'PromptTemplate invoke 失败' +print('PromptTemplate 正常') " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } -# 3. 验证基础功能(PromptTemplate + OutputParser 组合) -echo -n "检查基础功能... " -docker run --rm "$IMAGE_NAME" $PYTHON -c " +# 3. 验证 OutputParser + Runnable 管道组合 +echo -n "检查 Runnable 管道组合... " +sudo docker run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser -prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') +prompt = ChatPromptTemplate.from_template('Say hello to {name}') parser = StrOutputParser() -assert prompt is not None, 'PromptTemplate 创建失败' -assert parser is not None, 'OutputParser 创建失败' +from langchain_core.runnables import RunnablePassthrough +chain = {'name': RunnablePassthrough()} | prompt | parser -template_vars = prompt.input_variables -assert 'topic' in template_vars, f'输入变量不正确: {template_vars}' - -print('基础功能正常') +assert chain is not None, '管道创建失败' +print('Runnable 管道正常') " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } -# 4. 验证 Runnable 接口 -echo -n "检查 Runnable 接口... " -docker run --rm "$IMAGE_NAME" $PYTHON -c " -from langchain_core.runnables import RunnablePassthrough, RunnableLambda +# 4. 验证 Messages 模块 +echo -n "检查 Messages 模块... " +sudo docker run --rm "$IMAGE" python3.11 -c " +from langchain_core.messages import HumanMessage, AIMessage, SystemMessage + +msg = HumanMessage(content='Hello') +assert msg.content == 'Hello', f'HumanMessage content 错误: {msg.content}' -passthrough = RunnablePassthrough() -lambda_fn = RunnableLambda(lambda x: x.upper()) +sys_msg = SystemMessage(content='You are a helpful assistant') +assert sys_msg.type == 'system', f'SystemMessage type 错误: {sys_msg.type}' -result = lambda_fn.invoke('hello') -assert result == 'HELLO', f'RunnableLambda 执行失败: {result}' +ai_msg = AIMessage(content='Hi there!') +assert ai_msg.type == 'ai', f'AIMessage type 错误: {ai_msg.type}' -print('Runnable 接口正常') +print('Messages 模块正常') " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } echo "=== 所有测试通过 ===" diff --git a/frameworks/langchain/1.2.15/Dockerfile b/frameworks/langchain/1.2.15/Dockerfile index 9ba110f8..6af9fee6 100644 --- a/frameworks/langchain/1.2.15/Dockerfile +++ b/frameworks/langchain/1.2.15/Dockerfile @@ -1,26 +1,25 @@ +# 基础镜像:OpenCloudOS 9 极简版,适用于纯 Python / CPU 框架 FROM opencloudos/opencloudos9-minimal:latest +# 镜像元信息 LABEL maintainer="OpenCloudOS Community" LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" -LABEL org.opencontainers.image.description="LangChain on OpenCloudOS 9" +LABEL org.opencontainers.image.description="LangChain 1.2.15 on OpenCloudOS 9" +# 安装 Python 3.11 及 pip,安装完成后清理缓存以减小镜像体积 RUN dnf install -y \ python3.11 \ python3.11-pip \ - gcc \ - gcc-c++ \ && dnf clean all \ && rm -rf /var/cache/yum/* -RUN ln -sf /usr/bin/python3.11 /usr/bin/python3 \ - && ln -sf /usr/bin/pip3.11 /usr/bin/pip3 +# 使用清华镜像源安装 LangChain,加速国内网络下的依赖下载 +RUN pip3.11 install --no-cache-dir langchain==1.2.15 \ + -i https://pypi.tuna.tsinghua.edu.cn/simple \ + --trusted-host pypi.tuna.tsinghua.edu.cn -RUN pip3.11 install --no-cache-dir langchain==1.2.15 - -RUN python3.11 -c "import langchain; print(f'LangChain {langchain.__version__} installed successfully')" - -RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /tencentos_build_date.txt - -WORKDIR /workspace +# 记录镜像构建时间,便于追溯 +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt +# 默认进入 Python 3.11 交互环境 CMD ["python3.11"] diff --git a/frameworks/langchain/1.2.15/test.sh b/frameworks/langchain/1.2.15/test.sh index a1419a2e..19b1b5bc 100755 --- a/frameworks/langchain/1.2.15/test.sh +++ b/frameworks/langchain/1.2.15/test.sh @@ -1,59 +1,62 @@ #!/bin/bash set -e -IMAGE_NAME="${1:?用法: $0 <镜像名:标签>}" +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" -echo "=== LangChain 基础功能测试 ===" -echo "镜像: $IMAGE_NAME" -echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" -echo "" +echo "=== LangChain 1.2.15 基础功能测试 ===" -PYTHON=python3.11 - -# 1. 验证框架可正常导入 -echo -n "检查 langchain 导入... " -docker run --rm "$IMAGE_NAME" $PYTHON -c "import langchain; print(langchain.__version__)" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } +# 1. 验证 langchain 可正常导入并检查版本 +echo -n "检查 import langchain... " +sudo docker run --rm "$IMAGE" python3.11 -c " +import importlib.metadata +print(importlib.metadata.version('langchain')) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } -# 2. 验证核心模块可正常导入 -echo -n "检查核心模块导入... " -docker run --rm "$IMAGE_NAME" $PYTHON -c " -from langchain_core.messages import HumanMessage, SystemMessage +# 2. 验证 PromptTemplate 核心功能 +echo -n "检查 PromptTemplate 构建... " +sudo docker run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate -from langchain_core.output_parsers import StrOutputParser -from langchain.chains import LLMChain -print('核心模块导入正常') + +prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') +assert prompt is not None, 'PromptTemplate 创建失败' +assert 'topic' in prompt.input_variables, f'输入变量不正确: {prompt.input_variables}' + +result = prompt.invoke({'topic': 'programming'}) +assert result is not None, 'PromptTemplate invoke 失败' +print('PromptTemplate 正常') " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } -# 3. 验证基础功能(PromptTemplate + OutputParser 组合) -echo -n "检查基础功能... " -docker run --rm "$IMAGE_NAME" $PYTHON -c " +# 3. 验证 OutputParser + Runnable 管道组合 +echo -n "检查 Runnable 管道组合... " +sudo docker run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser -prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') +prompt = ChatPromptTemplate.from_template('Say hello to {name}') parser = StrOutputParser() -assert prompt is not None, 'PromptTemplate 创建失败' -assert parser is not None, 'OutputParser 创建失败' +from langchain_core.runnables import RunnablePassthrough +chain = {'name': RunnablePassthrough()} | prompt | parser -template_vars = prompt.input_variables -assert 'topic' in template_vars, f'输入变量不正确: {template_vars}' - -print('基础功能正常') +assert chain is not None, '管道创建失败' +print('Runnable 管道正常') " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } -# 4. 验证 Runnable 接口 -echo -n "检查 Runnable 接口... " -docker run --rm "$IMAGE_NAME" $PYTHON -c " -from langchain_core.runnables import RunnablePassthrough, RunnableLambda +# 4. 验证 Messages 模块 +echo -n "检查 Messages 模块... " +sudo docker run --rm "$IMAGE" python3.11 -c " +from langchain_core.messages import HumanMessage, AIMessage, SystemMessage + +msg = HumanMessage(content='Hello') +assert msg.content == 'Hello', f'HumanMessage content 错误: {msg.content}' -passthrough = RunnablePassthrough() -lambda_fn = RunnableLambda(lambda x: x.upper()) +sys_msg = SystemMessage(content='You are a helpful assistant') +assert sys_msg.type == 'system', f'SystemMessage type 错误: {sys_msg.type}' -result = lambda_fn.invoke('hello') -assert result == 'HELLO', f'RunnableLambda 执行失败: {result}' +ai_msg = AIMessage(content='Hi there!') +assert ai_msg.type == 'ai', f'AIMessage type 错误: {ai_msg.type}' -print('Runnable 接口正常') +print('Messages 模块正常') " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } echo "=== 所有测试通过 ===" -- Gitee From 661bc08ca74e714bbfed4e5c8b84a4970ce3d71d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=88=BD=E6=AD=AA=E6=AD=AA=E7=9A=84=E5=93=87?= =?UTF-8?q?=E5=93=88=E5=93=88?= <878169060@qq.com> Date: Sat, 23 May 2026 10:48:57 +0800 Subject: [PATCH 4/5] refactor: optimize LangChain Dockerfile and test.sh - Add --disablerepo=extras to fix dnf 404 error on extras repo - Add Tsinghua PyPI mirror for faster dependency download in CI - Remove unnecessary gcc/gcc-c++ (pure Python package) - Fix build_date path to /opencloudos_build_date.txt (project standard) - Add sudo auto-detection for macOS/CI compatibility - Deepen test coverage: PromptTemplate invoke, Runnable pipe, Messages module --- frameworks/langchain/1.2.14/Dockerfile | 2 +- .../langchain/1.2.14/screenshots/test_pass.png | Bin 0 -> 92110 bytes frameworks/langchain/1.2.14/test.sh | 14 ++++++++++---- frameworks/langchain/1.2.15/Dockerfile | 2 +- .../langchain/1.2.15/screenshots/test_pass.png | Bin 0 -> 82444 bytes frameworks/langchain/1.2.15/test.sh | 14 ++++++++++---- 6 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 frameworks/langchain/1.2.14/screenshots/test_pass.png create mode 100644 frameworks/langchain/1.2.15/screenshots/test_pass.png diff --git a/frameworks/langchain/1.2.14/Dockerfile b/frameworks/langchain/1.2.14/Dockerfile index 3277c614..d9e99749 100644 --- a/frameworks/langchain/1.2.14/Dockerfile +++ b/frameworks/langchain/1.2.14/Dockerfile @@ -7,7 +7,7 @@ LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-co LABEL org.opencontainers.image.description="LangChain 1.2.14 on OpenCloudOS 9" # 安装 Python 3.11 及 pip,安装完成后清理缓存以减小镜像体积 -RUN dnf install -y \ +RUN dnf --setopt=sslverify=false --disablerepo=extras install -y \ python3.11 \ python3.11-pip \ && dnf clean all \ diff --git a/frameworks/langchain/1.2.14/screenshots/test_pass.png b/frameworks/langchain/1.2.14/screenshots/test_pass.png new file mode 100644 index 0000000000000000000000000000000000000000..3c373e959642af9176c47ef2c2c6e48d2db3df3f GIT binary patch literal 92110 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%0Afo&}!p|NIU~2y*-=?e`$g;ygZUcLb-n;`ZDFa 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 literal 0 HcmV?d00001 diff --git a/frameworks/langchain/1.2.14/test.sh b/frameworks/langchain/1.2.14/test.sh index c9a48e49..5e89d86e 100755 --- a/frameworks/langchain/1.2.14/test.sh +++ b/frameworks/langchain/1.2.14/test.sh @@ -3,18 +3,24 @@ set -e IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" +if sudo -n true 2>/dev/null; then + DOCKER="sudo docker" +else + DOCKER="docker" +fi + echo "=== LangChain 1.2.14 基础功能测试 ===" # 1. 验证 langchain 可正常导入并检查版本 echo -n "检查 import langchain... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " import importlib.metadata print(importlib.metadata.version('langchain')) " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } # 2. 验证 PromptTemplate 核心功能 echo -n "检查 PromptTemplate 构建... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') @@ -28,7 +34,7 @@ print('PromptTemplate 正常') # 3. 验证 OutputParser + Runnable 管道组合 echo -n "检查 Runnable 管道组合... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser @@ -44,7 +50,7 @@ print('Runnable 管道正常') # 4. 验证 Messages 模块 echo -n "检查 Messages 模块... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " from langchain_core.messages import HumanMessage, AIMessage, SystemMessage msg = HumanMessage(content='Hello') diff --git a/frameworks/langchain/1.2.15/Dockerfile b/frameworks/langchain/1.2.15/Dockerfile index 6af9fee6..a1c85875 100644 --- a/frameworks/langchain/1.2.15/Dockerfile +++ b/frameworks/langchain/1.2.15/Dockerfile @@ -7,7 +7,7 @@ LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-co LABEL org.opencontainers.image.description="LangChain 1.2.15 on OpenCloudOS 9" # 安装 Python 3.11 及 pip,安装完成后清理缓存以减小镜像体积 -RUN dnf install -y \ +RUN dnf --setopt=sslverify=false --disablerepo=extras install -y \ python3.11 \ python3.11-pip \ && dnf clean all \ diff --git a/frameworks/langchain/1.2.15/screenshots/test_pass.png b/frameworks/langchain/1.2.15/screenshots/test_pass.png new file mode 100644 index 0000000000000000000000000000000000000000..9bfc9fb79ed962f7927c34dae09183c981f0f3e7 GIT binary patch literal 82444 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

vFY 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

IU=tV8~1@+-#!E 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/dev/null; then + DOCKER="sudo docker" +else + DOCKER="docker" +fi + echo "=== LangChain 1.2.15 基础功能测试 ===" # 1. 验证 langchain 可正常导入并检查版本 echo -n "检查 import langchain... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " import importlib.metadata print(importlib.metadata.version('langchain')) " && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } # 2. 验证 PromptTemplate 核心功能 echo -n "检查 PromptTemplate 构建... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_template('Tell me a joke about {topic}') @@ -28,7 +34,7 @@ print('PromptTemplate 正常') # 3. 验证 OutputParser + Runnable 管道组合 echo -n "检查 Runnable 管道组合... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser @@ -44,7 +50,7 @@ print('Runnable 管道正常') # 4. 验证 Messages 模块 echo -n "检查 Messages 模块... " -sudo docker run --rm "$IMAGE" python3.11 -c " +$DOCKER run --rm "$IMAGE" python3.11 -c " from langchain_core.messages import HumanMessage, AIMessage, SystemMessage msg = HumanMessage(content='Hello') -- Gitee From e0a8852bb5e4371c180911b6d70e0078d7117c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=88=BD=E6=AD=AA=E6=AD=AA=E7=9A=84=E5=93=87?= =?UTF-8?q?=E5=93=88=E5=93=88?= <878169060@qq.com> Date: Mon, 8 Jun 2026 20:48:26 +0800 Subject: [PATCH 5/5] fix(langchain): remove insecure TLS settings in Dockerfile - Remove dnf --setopt=sslverify=false - Remove pip --trusted-host parameter - Use official PyPI repository for secure installation Security improvements: - Enable SSL certificate verification for dnf - Enable SSL certificate verification for pip - Prevent MITM attacks during package installation --- frameworks/langchain/1.2.14/Dockerfile | 8 +++----- frameworks/langchain/1.2.15/Dockerfile | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/frameworks/langchain/1.2.14/Dockerfile b/frameworks/langchain/1.2.14/Dockerfile index d9e99749..f7238f4f 100644 --- a/frameworks/langchain/1.2.14/Dockerfile +++ b/frameworks/langchain/1.2.14/Dockerfile @@ -7,16 +7,14 @@ LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-co LABEL org.opencontainers.image.description="LangChain 1.2.14 on OpenCloudOS 9" # 安装 Python 3.11 及 pip,安装完成后清理缓存以减小镜像体积 -RUN dnf --setopt=sslverify=false --disablerepo=extras install -y \ +RUN dnf install -y \ python3.11 \ python3.11-pip \ && dnf clean all \ && rm -rf /var/cache/yum/* -# 使用清华镜像源安装 LangChain,加速国内网络下的依赖下载 -RUN pip3.11 install --no-cache-dir langchain==1.2.14 \ - -i https://pypi.tuna.tsinghua.edu.cn/simple \ - --trusted-host pypi.tuna.tsinghua.edu.cn +# 安装 LangChain +RUN pip3.11 install --no-cache-dir langchain==1.2.14 # 记录镜像构建时间,便于追溯 RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt diff --git a/frameworks/langchain/1.2.15/Dockerfile b/frameworks/langchain/1.2.15/Dockerfile index a1c85875..f7af7bb9 100644 --- a/frameworks/langchain/1.2.15/Dockerfile +++ b/frameworks/langchain/1.2.15/Dockerfile @@ -7,16 +7,14 @@ LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-co LABEL org.opencontainers.image.description="LangChain 1.2.15 on OpenCloudOS 9" # 安装 Python 3.11 及 pip,安装完成后清理缓存以减小镜像体积 -RUN dnf --setopt=sslverify=false --disablerepo=extras install -y \ +RUN dnf install -y \ python3.11 \ python3.11-pip \ && dnf clean all \ && rm -rf /var/cache/yum/* -# 使用清华镜像源安装 LangChain,加速国内网络下的依赖下载 -RUN pip3.11 install --no-cache-dir langchain==1.2.15 \ - -i https://pypi.tuna.tsinghua.edu.cn/simple \ - --trusted-host pypi.tuna.tsinghua.edu.cn +# 安装 LangChain +RUN pip3.11 install --no-cache-dir langchain==1.2.15 # 记录镜像构建时间,便于追溯 RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt -- Gitee