这两种方式都是与 Ollama 服务交互的方式,但它们的用途和实现方式有所不同。以下是它们的区别:


1. 直接使用 requests.post 请求 Ollama API

response = requests.post(self.ollama_api_url, json=payload)
response.raise_for_status()
特点:
  • 底层 HTTP 请求

    • 使用 Python 的 requests 库直接发送 HTTP POST 请求到 Ollama 的 API 端点。
    • 需要手动构建请求体(payload)和处理响应。
  • 灵活性

    • 可以完全自定义请求和响应的处理逻辑。
    • 适合需要精细控制请求参数或处理非标准响应的场景。
  • 适用场景

    • 当需要直接调用 Ollama 的特定 API 端点(如生成嵌入、生成文本等)时。
    • 当 LangChain 或其他高级封装不满足需求时。
示例:
import requests

# 定义 Ollama API 地址和请求体
ollama_api_url = "http://127.0.0.1:11434/api/embeddings"
payload = {
    "model": "nomic-embed-text:v1.5",
    "prompt": "关于公司法律条款的解释"
}

# 发送请求
response = requests.post(ollama_api_url, json=payload)
response.raise_for_status()  # 检查请求是否成功
embedding = response.json()["embedding"]  # 提取嵌入向量

2. 使用 LangChain 的 Ollama

llm = Ollama(
    model="deepseek-r1:1.5b",  # 模型名称
    base_url="http://127.0.0.1:11434"  # Ollama 服务的地址和端口
)

# 创建 RAG 管道
qa_pipeline = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",  # 简单拼接检索到的文档块
    retriever=vector_store.as_retriever(search_kwargs={"k": 3})  # 检索前 3 个相关块
)
特点:
  • 高级封装

    • 使用 LangChain 的 Ollama 类封装了与 Ollama 的交互逻辑。
    • 提供了更高级的功能,如链式调用、检索增强生成(RAG)等。
  • 易用性

    • 无需手动构建请求体或处理响应,LangChain 会自动处理这些细节。
    • 适合快速构建复杂的 AI 应用(如问答系统、聊天机器人等)。
  • 适用场景

    • 当需要快速构建基于 Ollama 的 AI 应用时。
    • 当需要使用 LangChain 的高级功能(如 RAG、链式调用等)时。
示例:
from langchain.llms import Ollama
from langchain.chains import RetrievalQA

# 初始化 Ollama 模型
llm = Ollama(
    model="deepseek-r1:1.5b",  # 模型名称
    base_url="http://127.0.0.1:11434"  # Ollama 服务的地址和端口
)

# 创建 RAG 管道
qa_pipeline = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",  # 简单拼接检索到的文档块
    retriever=vector_store.as_retriever(search_kwargs={"k": 3})  # 检索前 3 个相关块
)

# 查询
question = "关于公司法律条款的解释"
answer = qa_pipeline({"query": question})
print("回答:", answer)

主要区别

特性 直接使用 requests.post 使用 LangChain 的 Ollama
实现方式 手动发送 HTTP 请求,处理响应 高级封装,自动处理请求和响应
灵活性 高,可以完全自定义请求和响应逻辑 较低,依赖 LangChain 的封装
易用性 较低,需要手动处理细节 高,适合快速构建应用
适用场景 需要精细控制请求或处理非标准响应的场景 快速构建基于 Ollama 的 AI 应用
功能支持 仅支持直接调用 API 支持 LangChain 的高级功能(如 RAG、链式调用等)

选择建议

  • 如果你需要快速构建一个基于 Ollama 的 AI 应用(如问答系统、聊天机器人等),并且不需要精细控制请求细节,推荐使用 LangChain 的 Ollama
  • 如果你需要直接调用 Ollama 的特定 API 端点,或者需要处理非标准响应,推荐使用 requests.post

根据你的需求选择合适的实现方式!

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐