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等模块实现自定义模型。

使用场景

  • 多轮对话:使用聊天模型管理对话历史。
  • 嵌入检索:通过文本嵌入模型实现文档相似性搜索。
  • 工具驱动:集成外部工具增强模型能力。
相关推荐
海底的星星fly5 小时前
【Prompt学习技能树地图】LangChain原理及应用操作指南
人工智能·语言模型·langchain·prompt
呲溜滑_5 小时前
langchain(node.js) 实际应用订单助手
microsoft·langchain·node.js
nvd1119 小时前
一个简单的GitHub AI Agent 实现指南
人工智能·langchain
FreeCode20 小时前
一文了解LangGraph智能体设计开发过程:Thinking in LangGraph
python·langchain·agent
曦云沐20 小时前
第二篇:LangChain 1.0 模块化架构与依赖管理
人工智能·langchain·智能体
Dr_哈哈21 小时前
🚀 LangGraph 保姆级教程:从零构建你的第一个 AI Agent 工作流
langchain·node.js·agent
天星烛1 天前
Milvus 分词器学习笔记
langchain
再会呀1 天前
[Ai Agent] 10 MCP基础:打破孤岛,让MCP连接万物
langchain·mcp
陈鋆1 天前
Langchain-Chatchat[三、知识库管理的 RAG]
windows·langchain