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

使用场景

  • 多轮对话:使用聊天模型管理对话历史。
  • 嵌入检索:通过文本嵌入模型实现文档相似性搜索。
  • 工具驱动:集成外部工具增强模型能力。
相关推荐
xhxxx13 小时前
别再让 AI 自由发挥了!用 LangChain + Zod 强制它输出合法 JSON
前端·langchain·llm
San30.15 小时前
从零到一:开启 LangChain 的 AI 工程化之旅
人工智能·langchain·node.js
kimi-22218 小时前
create_tool_calling_agent、create_react_agent区别
langchain
大模型教程19 小时前
大模型LLM入门篇:小白入门一文快速了解大模型(附教程)
langchain·llm·agent
用户120391129472620 小时前
从零上手 LangChain:用 JavaScript 打造强大 AI 应用的全流程指南
javascript·langchain·llm
南山安1 天前
LangChain 入门实战:从零搭建 AI 应用工作流
javascript·面试·langchain
用户377833043491 天前
( 教学 )Agent 构建 Memory(提示词对话存储)1. ConversationBufferMemory(对话缓存存储, 版本>1.0和<1.0的区别
langchain·agent
后端小张1 天前
【AI 学习】LangChain框架深度解析:从核心组件到企业级应用实战
java·人工智能·学习·langchain·tensorflow·gpt-3·ai编程
大模型真好玩1 天前
LangGraph1.0速通指南(三)—— LangGraph1.0 自动邮件处理智能体实战
人工智能·langchain·agent
Robot侠1 天前
赋予 AI 记忆:在 RTX 3090 上搭建本地 RAG 知识库问答系统
人工智能·langchain·llm·llama·qwen·rag·chromadb