LangChain与模型

支持的模型类别

  1. OpenAI系列
  • GPT-4、GPT-4 Turbo、GPT-3.5-Turbo
  • GPT-4 Vision、GPT-4 All Tools
  • Embeddings模型(text-embedding-ada-002等)
  1. Anthropic系列
  • Claude-3系列(Opus、Sonnet、Haiku)
  • Claude-2、Claude-Instant
  1. 开源模型
    Meta系列
  • LLaMA 2 (7B/13B/70B)
  • LLaMA 3 (8B/70B)
  • Code LLaMA
    微软系列
  • Phi-3 (mini/small/medium)
    其他开源模型
  • Mistral (7B/8x7B)
  • Gemma (2B/7B)
  • Falcon (7B/40B)
  • ChatGLM系列
  • Qwen系列
  • Baichuan系列
  1. 云端API模型
  • Google PaLM 2、Gemini Pro
  • Amazon Titan、Cohere
  • Azure OpenAI服务
  • Hugging Face Hub模型
  1. 嵌入模型
  • OpenAI Embeddings
  • Hugging Face Embeddings
  • Cohere Embeddings
  • 本地嵌入模型(SentenceTransformers)

示例

requirements.txt

clike 复制代码
langchain==0.1.0
langchain-community==0.0.10
openai==1.3.0
anthropic==0.7.0
google-generativeai==0.3.0
cohere==4.0.0
huggingface-hub==0.17.0
transformers==4.35.0
torch==2.1.0
sentence-transformers==2.2.0
tiktoken==0.5.0

main.py

clike 复制代码
from langchain.llms import OpenAI, Anthropic, HuggingFaceHub
from langchain.chat_models import ChatOpenAI, ChatAnthropic
from langchain.embeddings import OpenAIEmbeddings, HuggingFaceEmbeddings
import os

# 设置API密钥
os.environ["OPENAI_API_KEY"] = "your-openai-key"
os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-key"
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "your-hf-token"

def demo_openai_models():
    """OpenAI模型示例"""
    print("=== OpenAI Models ===")
    
    # GPT-4
    gpt4 = ChatOpenAI(model="gpt-4")
    response = gpt4.invoke("Hello, how are you?")
    print(f"GPT-4: {response.content}")
    
    # GPT-3.5-Turbo
    gpt35 = ChatOpenAI(model="gpt-3.5-turbo")
    response = gpt35.invoke("What's 2+2?")
    print(f"GPT-3.5: {response.content}")

def demo_anthropic_models():
    """Anthropic模型示例"""
    print("\n=== Anthropic Models ===")
    
    # Claude-3
    claude = ChatAnthropic(model="claude-3-sonnet-20240229")
    response = claude.invoke("Explain quantum computing simply")
    print(f"Claude-3: {response.content}")

def demo_open_source_models():
    """开源模型示例"""
    print("\n=== Open Source Models ===")
    
    # Hugging Face Hub模型
    # Llama 2 (需要授权)
    # llm = HuggingFaceHub(
    #     repo_id="meta-llama/Llama-2-7b-chat-hf",
    #     model_kwargs={"temperature": 0.5}
    # )
    
    # 使用公开模型示例
    falcon = HuggingFaceHub(
        repo_id="tiiuae/falcon-7b-instruct",
        model_kwargs={"temperature": 0.7, "max_length": 100}
    )
    response = falcon.invoke("What is AI?")
    print(f"Falcon-7B: {response}")

def demo_embedding_models():
    """嵌入模型示例"""
    print("\n=== Embedding Models ===")
    
    # OpenAI嵌入
    openai_embeddings = OpenAIEmbeddings()
    text = "This is a sample text for embedding"
    embedding = openai_embeddings.embed_query(text)
    print(f"OpenAI Embedding dimension: {len(embedding)}")
    
    # Hugging Face嵌入
    hf_embeddings = HuggingFaceEmbeddings(
        model_name="sentence-transformers/all-MiniLM-L6-v2"
    )
    hf_embedding = hf_embeddings.embed_query(text)
    print(f"HF Embedding dimension: {len(hf_embedding)}")

if __name__ == "__main__":
    # 演示各种模型
    demo_openai_models()
    demo_anthropic_models()
    demo_open_source_models()
    demo_embedding_models()

LangChain使用自定义模型

  1. 自定义模型封装:继承LLM基类,实现_llm_type_call_identifying_params方法
  2. API请求处理:通过requests库发送HTTP POST请求,处理响应
  3. 错误处理:检查HTTP状态码,抛出异常
  4. 可扩展性:支持自定义API端点和参数
  5. 安全性:通过API密钥验证身份
  6. 集成示例:包含完整测试调用逻辑

关键实现说明

  • 继承基类:CustomLLM继承langchain.llms.base.LLM,实现核心方法
  • API调用:使用requests库封装HTTP请求,支持自定义URL和参数
  • 错误处理:通过状态码判断请求成功与否,返回错误信息
  • 参数化设计:通过modelapi_key参数化模型选择和认证
  • 可扩展性:支持自定义API端点和响应解析逻辑

使用步骤

  1. 替换api.your-model.com为实际API地址
  2. 设置your-model-nameyour-api-key
  3. 调用llm("提示文本")生成响应

注意事项

  • 确保API支持JSON格式请求
  • 处理API返回的JSON结构
  • 根据模型特性调整max_tokens等参数

示例

clike 复制代码
from langchain.llms.base import LLM
from typing import Optional, List, Any, Mapping
from langchain.callbacks.manager import CallbackManagerForLLMRun
from http import HTTPStatus
import requests

class CustomLLM(LLM):
    model: str
    api_key: str

    def __init__(self, model: str, api_key: str):
        self.model = model
        self.api_key = api_key

    @property
    def _llm_type(self) -> str:
        return "custom_llm"

    def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        run_manager: Optional[CallbackManagerForLLMRun] = None,
        **kwargs: Any,
    ) -> str:
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        data = {
            "model": self.model,
            "prompt": prompt,
            "max_tokens": 150
        }
        response = requests.post("https://api.your-model.com/v1/completions", headers=headers, json=data)
        if response.status_code != HTTPStatus.OK:
            raise ValueError(f"API请求失败: {response.text}")
        return response.json()["choices"][0]["text"]

    @property
    def _identifying_params(self) -> Mapping[str, Any]:
        return {"model": self.model}

if __name__ == "__main__":
    # 初始化自定义模型
    llm = CustomLLM(model="your-model-name", api_key="your-api-key")
    # 测试调用
    response = llm("你好,世界!")
    print(response)

LangChain支持自定义模型类型

  1. LLM(大型语言模型)

    • 核心功能:将文本字符串作为输入,返回文本字符串输出。适用于生成文本、问答等任务。

    • 实现示例:

      python 复制代码
      from langchain.llms.base import LLM
      class CustomLLM(LLM):
          def _call(self, prompt: str, **kwargs) -> str:
              自定义模型调用逻辑
              return "生成的文本"
  2. 聊天模型(Chat Model)

    • 核心功能:处理结构化的聊天消息列表,返回聊天消息。支持多轮对话和上下文管理。

    • 实现示例:

      python 复制代码
      from langchain.chat_models.base import ChatModel
      class CustomChatModel(ChatModel):
          def _generate(self, messages: List[ChatMessage], **kwargs) -> ChatResult:
              处理聊天消息列表
              return ChatResult(messages=[ChatMessage(content="回复内容")])
  3. 文本嵌入模型(Text Embedding Models)

    • 核心功能:将文本转换为浮点向量表示,用于相似性比较、聚类等任务。

    • 实现示例:

      python 复制代码
      from langchain.embeddings.base import Embeddings
      class CustomEmbeddings(Embeddings):
          def embed_query(self, text: str) -> List[float]:
              返回文本嵌入向量
              return [0.1, 0.2, 0.3]
  4. 流式输出模型(Streaming Models)

    • 核心功能:支持流式文本生成,通过回调机制逐字符/逐词返回输出。

    • 实现示例:

      python 复制代码
      from langchain.llms.base import LLM
      class StreamingLLM(LLM):
          def _stream(self, prompt: str, **kwargs) -> Iterator[str]:
              实现流式输出逻辑
              yield "字符1"
              yield "字符2"
  5. 嵌入式工具模型(Tool-Enabled Models)

    • 核心功能:集成外部工具(如搜索引擎、数据库)作为模型能力扩展。

    • 实现示例:

      python 复制代码
      from langchain.agents import Tool
      class ToolLLM(LLM):
          def _call(self, prompt: str, tools: List[Tool], **kwargs) -> str:
              调用外部工具
              return tools[0].run(prompt)

关键实现要点

  • 核心方法:必须实现_call(文本生成)、_generate(聊天消息处理)等基础方法。
  • 可选增强:支持流式输出(_stream)、事件回调、工具集成等高级功能。
  • 集成示例:通过langchain.llms.baselangchain.chat_models.base等模块实现自定义模型。

使用场景

  • 多轮对话:使用聊天模型管理对话历史。
  • 嵌入检索:通过文本嵌入模型实现文档相似性搜索。
  • 工具驱动:集成外部工具增强模型能力。
相关推荐
JaydenAI8 小时前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
OPEN-Source9 小时前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
一切尽在,你来11 小时前
1.4 LangChain 1.2.7 核心架构概览
人工智能·langchain·ai编程
一切尽在,你来11 小时前
1.3 环境搭建
人工智能·ai·langchain·ai编程
蛇皮划水怪18 小时前
深入浅出LangChain4J
java·langchain·llm
、BeYourself19 小时前
LangChain4j 流式响应
langchain
、BeYourself19 小时前
LangChain4j之Chat and Language
langchain
qfljg21 小时前
langchain usage
langchain
kjkdd1 天前
6.1 核心组件(Agent)
python·ai·语言模型·langchain·ai编程
渣渣苏1 天前
Langchain实战快速入门
人工智能·python·langchain