支持的模型类别
- OpenAI系列
- GPT-4、GPT-4 Turbo、GPT-3.5-Turbo
- GPT-4 Vision、GPT-4 All Tools
- Embeddings模型(text-embedding-ada-002等)
- Anthropic系列
- Claude-3系列(Opus、Sonnet、Haiku)
- Claude-2、Claude-Instant
- 开源模型
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系列
- 云端API模型
- Google PaLM 2、Gemini Pro
- Amazon Titan、Cohere
- Azure OpenAI服务
- Hugging Face Hub模型
- 嵌入模型
- 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
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使用自定义模型
- 自定义模型封装:继承
LLM基类,实现_llm_type、_call、_identifying_params方法 - API请求处理:通过
requests库发送HTTP POST请求,处理响应 - 错误处理:检查HTTP状态码,抛出异常
- 可扩展性:支持自定义API端点和参数
- 安全性:通过API密钥验证身份
- 集成示例:包含完整测试调用逻辑
关键实现说明
- 继承基类:
CustomLLM继承langchain.llms.base.LLM,实现核心方法 - API调用:使用
requests库封装HTTP请求,支持自定义URL和参数 - 错误处理:通过状态码判断请求成功与否,返回错误信息
- 参数化设计:通过
model和api_key参数化模型选择和认证 - 可扩展性:支持自定义API端点和响应解析逻辑
使用步骤
- 替换
api.your-model.com为实际API地址 - 设置
your-model-name和your-api-key - 调用
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支持自定义模型类型
-
LLM(大型语言模型)
-
核心功能:将文本字符串作为输入,返回文本字符串输出。适用于生成文本、问答等任务。
-
实现示例:
pythonfrom langchain.llms.base import LLM class CustomLLM(LLM): def _call(self, prompt: str, **kwargs) -> str: 自定义模型调用逻辑 return "生成的文本"
-
-
聊天模型(Chat Model)
-
核心功能:处理结构化的聊天消息列表,返回聊天消息。支持多轮对话和上下文管理。
-
实现示例:
pythonfrom langchain.chat_models.base import ChatModel class CustomChatModel(ChatModel): def _generate(self, messages: List[ChatMessage], **kwargs) -> ChatResult: 处理聊天消息列表 return ChatResult(messages=[ChatMessage(content="回复内容")])
-
-
文本嵌入模型(Text Embedding Models)
-
核心功能:将文本转换为浮点向量表示,用于相似性比较、聚类等任务。
-
实现示例:
pythonfrom langchain.embeddings.base import Embeddings class CustomEmbeddings(Embeddings): def embed_query(self, text: str) -> List[float]: 返回文本嵌入向量 return [0.1, 0.2, 0.3]
-
-
流式输出模型(Streaming Models)
-
核心功能:支持流式文本生成,通过回调机制逐字符/逐词返回输出。
-
实现示例:
pythonfrom langchain.llms.base import LLM class StreamingLLM(LLM): def _stream(self, prompt: str, **kwargs) -> Iterator[str]: 实现流式输出逻辑 yield "字符1" yield "字符2"
-
-
嵌入式工具模型(Tool-Enabled Models)
-
核心功能:集成外部工具(如搜索引擎、数据库)作为模型能力扩展。
-
实现示例:
pythonfrom 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.base、langchain.chat_models.base等模块实现自定义模型。
使用场景
- 多轮对话:使用聊天模型管理对话历史。
- 嵌入检索:通过文本嵌入模型实现文档相似性搜索。
- 工具驱动:集成外部工具增强模型能力。