当前位置: 首页 > article >正文

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

文章目录

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

Github

  • https://github.com/langchain-ai/langchain

官网

  • 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 示例

  • demo.py
from langchain_ollama import ChatOllama

llm = 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 PromptTemplate

llm = 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 ChatPromptTemplate

llm = 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 | llm

tools = [
    {"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.kler.cn/a/598878.html

相关文章:

  • [vue]属性绑定
  • python总结
  • Pytorch系列教程:微调BERT实现命名实体识别
  • SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题
  • 查找单入口空闲区域[A卷-hw_od]
  • JS Typeof 运算符
  • 系统设计类问题回答模板
  • SQL Server行转列操作及PIVOT运算符
  • 算法基础篇(1)(蓝桥杯常考点)
  • FPGA时钟约束
  • 基于Matlab实现语音识别算法(源码+数据)
  • 【Linux文件IO】通过文件IO把bmp图片显示到Linux开发板的实现
  • 基于springboot的新闻推荐系统(045)
  • 【NLP 42、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】
  • 人脸表情识别系统分享(基于深度学习+OpenCV+PyQt5)
  • Spring Boot框架中常用注解
  • 【mysql】同一个字段,字符串相加
  • 从Oracle到OceanBase数据库迁移:全方位技术解析
  • 如何让Go 的regexp包支持 (?!...) 这样的 Perl 语法?
  • PHP转GO Day3 函数定义与包管理实践(创建数学工具包)