使用 Docker 构建 LangChain 开发环镜及 ChatOllama 示例

embedded/2025/3/23 23:22:57/

文章目录

  • Github
  • 官网
  • 简介
  • Dockerfile
  • requirements.txt
  • 构建 LangChain 镜像
  • ChatOllama 示例
  • Ollama 示例
  • 模拟 tools

Github

官网

  • https://python.langchain.com/docs/introduction/

简介

LangChain 是一个用于构建 LLM 驱动的应用程序的框架。它可以帮助您将可互操作的组件和第三方集成链接在一起,以简化 AI 应用程序开发 - 同时随着底层技术的发展做出面向未来的决策。

LangChain 的用途:

  • 实时数据增强。利用 LangChain 庞大的集成库(包含模型提供商、工具、向量存储、检索器等),轻松将 LLM 连接到各种数据源和外部 / 内部系统。
  • 模型互操作性。您的工程团队可以进行实验,以找到最适合您应用程序需求的选择,从而交换模型。随着行业前沿的发展,快速适应 — LangChain 的抽象概念让您不断前进,而不会失去动力。

LangChain 的生态:

  • LangSmith - 有助于代理评估和可观察性。调试性能不佳的 LLM 应用程序运行,评估代理轨迹,获得生产中的可见性,并随着时间的推移提高性能。
  • LangGraph - 使用我们的低级代理编排框架 LangGraph 构建能够可靠地处理复杂任务的代理。 LangGraph 提供可定制的架构、长期记忆和人机交互工作流程,并受到 LinkedIn、Uber、Klarna 和 GitLab 等公司在生产中的信任。
  • LangGraph 平台- 使用专门为长期运行、有状态的工作流构建的部署平台轻松部署和扩展代理。在团队之间发现、重用、配置和共享代理 — 并使用 LangGraph Studio中的可视化原型快速迭代。

Dockerfile

# 基础镜像选择
FROM python:3.12-slim# 安装LangChain项目常见依赖
RUN apt-get update \&& apt-get install -y --no-install-recommends gcc python3-dev libssl-dev curl \&& rm -rf /var/lib/apt/lists/*# 设置优化后的pip安装参数
ENV PIP_NO_CACHE_DIR=1 \PIP_DISABLE_PIP_VERSION_CHECK=1# 安装LangChain核心依赖(示例)
COPY requirements.txt .
RUN pip install -U pip \&& pip install -r requirements.txt --no-cache-dir

requirements.txt

langchain>=0.1.0
langgraph
langsmith
langchain-community
langchain-core
langchain_ollama
langchain_deepseek
ollama>=0.1.30
sqlalchemy
python-dotenv

构建 LangChain 镜像

docker build -t langchain-dev:3.12 .

ChatOllama__56">ChatOllama 示例

  • demo.py
from langchain_ollama import ChatOllamallm = ChatOllama(base_url="http://192.168.0.100:11434",model = "deepseek-r1:1.5b",temperature = 0.8,num_predict = 256,timeout = 120,format = "json"
)
print(llm.invoke("你好"))

注:http://192.168.0.100:11434 连接局域网内的 Ollama 服务。

  • 使用容器执行 Python 脚本
docker run -it --rm --network="host" \
-v /home:/app \
localhost/langchain-dev:3.12 \
python /app/demo.py
  • 使用容器执行 Python 脚本前安装依赖
docker run -it --rm --network="host" \
-v /home:/app \
localhost/langchain-dev:3.12 \
bash -c "pip install langchain_ollama && python /app/demo.py"

Ollama 示例

from langchain_community.llms import Ollama
from langchain_core.prompts import PromptTemplatellm = Ollama(model="deepseek-r1:1.5b", base_url="http://192.168.0.100:11434")
prompt = PromptTemplate.from_template("请用简单的语言解释以下概念:{question}")# 示例问题
question = "什么是量子纠缠?"# 调用模型
response = llm.invoke(prompt.format(question=question))
print(response)

模拟 tools

from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplatellm = ChatOllama(model="deepseek-r1:1.5b",base_url="http://192.168.31.112:11434",temperature=0.5,format="json"
)prompt = ChatPromptTemplate.from_messages([("system", "你是一个智能助手,可以调用以下工具:{tools}请用JSON格式响应,包含'tool'和'input'字段"),("user", "{query}")
])# 构建处理链
chain = prompt | llmtools = [{"name": "weather", "desc": "天气查询"},{"name": "calculator", "desc": "打开计算器"},{"name": "ide", "desc": "打开开发工具"}
]# 示例使用
question = "计算器"
response = chain.invoke({"query": question, "tools": tools})
print(response)
  • 输出
content='{"tool": "calculator", "input": "打开计算器"}' additional_kwargs={} response_metadata={'model': 'deepseek-r1:1.5b', 'created_at': '2025-03-21T11:57:21.509937Z', 'done': True, 'done_reason': 'stop', 'total_duration': 998191116, 'load_duration': 21412184, 'prompt_eval_count': 72, 'prompt_eval_duration': 93847676, 'eval_count': 14, 'eval_duration': 881793264, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-7d373c77-3bc2-4de1-bbfc-2067781d8488-0' usage_metadata={'input_tokens': 72, 'output_tokens': 14, 'total_tokens': 86}

http://www.ppmy.cn/embedded/174635.html

相关文章

Flink实战教程从入门到精通(基础篇)(二)Flink快速上手

目录 前言: 一、环境准备 二、创建项目 1.创建工程 2、添加项目依赖 三、WordCount代码编写(有界流) 1、批处理和流处理 2、数据准备 3、编写代码 1、DataSet API (不推荐)(批处理&#xff…

第二章 EXI协议原理与实现--7.5 Efficient XML库和OpenEXI.jar编解码交叉测试

7.5 Efficient XML库和OpenEXI.jar编解码交叉测试 本节对Efficient XML库和OpenEXI.jar库进行编解码交叉测试,目的是验证Efficient XML库的兼容性。 7.5.1 测试方案 目标文件: flightdata.xml、flightdata.xsd、flightdata.cxs 由于efficientXML库默…

ManiWAV:通过野外的音频-视频数据学习机器人操作

24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习,尤其是当视觉信息本身…

kotlin 内联函数 inline

高阶函数实现的原理:函数类型其实是生成了一个对象 。 inline翻译成中文的意思就是内联,在kotlin里面inline被用来修饰函数,表明当前函数在编译时是以内嵌的形式进行编译的,从而减少了一层函数调用栈: inline fun fun…

手机电脑如何通过跨平台远程控制工具来实现无缝互联

在如今数字化办公和生活的场景里,远程控制工具已经成了连接各种设备的关键桥梁。不管是跨系统协作、远程技术支持,还是让移动端和电脑端高效联动,用户对这些工具的要求早就从“能用就行”变成了“得用得顺手”。 接下来,我就从跨平…

Python 在自然语言处理(NLP)领域的应用场景和技术实现方式

Python 在自然语言处理(NLP)领域拥有丰富的应用场景和技术实现方式,涵盖从基础文本处理到复杂的深度学习模型构建。以下是基于搜索结果的详细分类总结: 一、基础文本处理任务 文本预处理 功能:清洗噪音(如H…

LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(下)

前面两节课程分别给大家介绍了“控制器连接、定时获取轴状态、轴坐标、控制器型号、轴参数设置、IO控制、Basic文件下载”(详情点击→LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(上)&#…

存储过程在高并发环境下的重要性

在高并发系统中,数据库的性能和稳定性至关重要。随着系统并发请求的增加,SQL 语句的执行效率、事务管理以及锁机制的优化成为核心问题。存储过程(Stored Procedure)作为数据库内部的执行逻辑,能够有效提升高并发环境下…