跳到主要内容
这将帮助您开始使用 NVIDIA 聊天模型。有关所有 ChatNVIDIA 功能和配置的详细文档,请参阅 API 参考

概览

langchain-nvidia-ai-endpoints 包包含 LangChain 集成,用于使用 NVIDIA NIM 推理微服务上的模型构建应用程序。NIM 支持来自社区和 NVIDIA 的跨领域模型,如聊天、嵌入和重新排序模型。这些模型经过 NVIDIA 优化,可在 NVIDIA 加速基础设施上提供最佳性能,并作为 NIM 部署,NIM 是一种易于使用的预构建容器,可使用 NVIDIA 加速基础设施上的单个命令部署到任何位置。 NVIDIA 托管的 NIM 部署可在 NVIDIA API 目录上进行测试。测试后,NIM 可以使用 NVIDIA AI Enterprise 许可证从 NVIDIA 的 API 目录导出,并在本地或云端运行,从而使企业拥有并完全控制其 IP 和 AI 应用程序。 NIM 作为容器镜像打包,按模型分发,并通过 NVIDIA NGC 目录作为 NGC 容器镜像分发。NIM 的核心是为在 AI 模型上运行推理提供简单、一致且熟悉的 API。 本示例介绍了如何使用 LangChain 通过 ChatNVIDIA 类与 NVIDIA 支持的模型进行交互。 有关通过此 API 访问聊天模型的更多信息,请查阅 ChatNVIDIA 文档。

集成详情

类别本地可序列化JS 支持下载量版本
ChatNVIDIAlangchain-nvidia-ai-endpoints测试版PyPI - DownloadsPyPI - Version

模型功能

工具调用结构化输出JSON 模式图像输入音频输入视频输入令牌级流式传输原生异步Token 用量Logprobs

设置

入门
  1. 在托管 NVIDIA AI Foundation 模型的 NVIDIA 创建一个免费帐户。
  2. 点击您选择的模型。
  3. Input 下选择 Python 选项卡,然后点击 Get API Key。然后点击 Generate Key
  4. 复制并保存生成的密钥为 NVIDIA_API_KEY。从那里,您应该可以访问端点。

凭据

import getpass
import os

if not os.getenv("NVIDIA_API_KEY"):
    # Note: the API key should start with "nvapi-"
    os.environ["NVIDIA_API_KEY"] = getpass.getpass("Enter your NVIDIA API key: ")
要启用模型调用的自动化跟踪,请设置您的 LangSmith API 密钥
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")

安装

LangChain NVIDIA AI 端点集成位于 langchain-nvidia-ai-endpoints 包中
pip install -qU langchain-nvidia-ai-endpoints

实例化

现在我们可以访问 NVIDIA API 目录中的模型
## Core LC Chat Interface
from langchain_nvidia_ai_endpoints import ChatNVIDIA

llm = ChatNVIDIA(model="mistralai/mixtral-8x7b-instruct-v0.1")

调用

result = llm.invoke("Write a ballad about LangChain.")
print(result.content)

使用 NVIDIA NIM

准备部署时,您可以使用 NVIDIA NIM(包含在 NVIDIA AI Enterprise 软件许可证中)自托管模型,并在任何地方运行它们,从而让您拥有自定义的所有权并完全控制您的知识产权 (IP) 和 AI 应用程序。 了解更多关于 NIM 的信息
from langchain_nvidia_ai_endpoints import ChatNVIDIA

# connect to an embedding NIM running at localhost:8000, specifying a specific model
llm = ChatNVIDIA(base_url="https://:8000/v1", model="meta/llama3-8b-instruct")

流式、批处理和异步

这些模型原生支持流式传输,并且与所有 LangChain LLM 一样,它们公开了一个批处理方法来处理并发请求,以及用于调用、流式传输和批处理的异步方法。以下是一些示例。
print(llm.batch(["What's 2*3?", "What's 2*6?"]))
# Or via the async API
# await llm.abatch(["What's 2*3?", "What's 2*6?"])
for chunk in llm.stream("How far can a seagull fly in one day?"):
    # Show the token separations
    print(chunk.content, end="|")
async for chunk in llm.astream(
    "How long does it take for monarch butterflies to migrate?"
):
    print(chunk.content, end="|")

支持的模型

查询 available_models 仍将为您提供 API 凭据提供的所有其他模型。 playground_ 前缀是可选的。
ChatNVIDIA.get_available_models()
# llm.get_available_models()

模型类型

以上所有模型都受支持,并且可以通过 ChatNVIDIA 访问。 某些模型类型支持独特的提示技术和聊天消息。我们将在下面回顾几个重要的模型。 要了解有关特定模型的更多信息,请导航到 AI 基础模型的 API 部分,链接在此处

通用聊天

诸如 meta/llama3-8b-instructmistralai/mixtral-8x22b-instruct-v0.1 之类的模型是通用模型,您可以将它们用于任何 LangChain 聊天消息。示例如下。
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_nvidia_ai_endpoints import ChatNVIDIA

prompt = ChatPromptTemplate.from_messages(
    [("system", "You are a helpful AI assistant named Fred."), ("user", "{input}")]
)
chain = prompt | ChatNVIDIA(model="meta/llama3-8b-instruct") | StrOutputParser()

for txt in chain.stream({"input": "What's your name?"}):
    print(txt, end="")

代码生成

这些模型接受与常规聊天模型相同的参数和输入结构,但它们在代码生成和结构化代码任务上表现更好。一个例子是 meta/codellama-70b
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are an expert coding AI. Respond only in valid python; no narration whatsoever.",
        ),
        ("user", "{input}"),
    ]
)
chain = prompt | ChatNVIDIA(model="meta/codellama-70b") | StrOutputParser()

for txt in chain.stream({"input": "How do I solve this fizz buzz problem?"}):
    print(txt, end="")

多模态

NVIDIA 还支持多模态输入,这意味着您可以提供图像和文本供模型进行推理。支持多模态输入的示例模型是 nvidia/neva-22b 以下是一个使用示例:
import IPython
import requests

image_url = "https://www.nvidia.com/content/dam/en-zz/Solutions/research/ai-playground/nvidia-picasso-3c33-p@2x.jpg"  ## Large Image
image_content = requests.get(image_url).content

IPython.display.Image(image_content)
from langchain_nvidia_ai_endpoints import ChatNVIDIA

llm = ChatNVIDIA(model="nvidia/neva-22b")

通过 URL 传递图像

from langchain.messages import HumanMessage

llm.invoke(
    [
        HumanMessage(
            content=[
                {"type": "text", "text": "Describe this image:"},
                {"type": "image_url", "image_url": {"url": image_url}},
            ]
        )
    ]
)

通过 base64 编码字符串传递图像

目前,客户端会进行一些额外处理以支持更大的图像,例如上面的图像。但对于较小的图像(为了更好地说明底层过程),我们可以直接传入图像,如下所示
import IPython
import requests

image_url = "https://picsum.photos/seed/kitten/300/200"
image_content = requests.get(image_url).content

IPython.display.Image(image_content)
import base64

from langchain.messages import HumanMessage

## Works for simpler images. For larger images, see actual implementation
b64_string = base64.b64encode(image_content).decode("utf-8")

llm.invoke(
    [
        HumanMessage(
            content=[
                {"type": "text", "text": "Describe this image:"},
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/png;base64,{b64_string}"},
                },
            ]
        )
    ]
)

直接在字符串中

NVIDIA API 独特地接受在 <img/> HTML 标签中内联的 base64 图像。虽然这与其他 LLM 不兼容,但您可以相应地直接提示模型。
base64_with_mime_type = f"data:image/png;base64,{b64_string}"
llm.invoke(f'What\'s in this image?\n<img src="{base64_with_mime_type}" />')

在 RunnableWithMessageHistory 中的示例用法

与任何其他集成一样,ChatNVIDIA 很好地支持聊天实用程序,例如 RunnableWithMessageHistory,它类似于使用 ConversationChain。下面,我们展示了应用于 mistralai/mixtral-8x22b-instruct-v0.1 模型的 LangChain RunnableWithMessageHistory 示例。
pip install -qU langchain
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

# store is a dictionary that maps session IDs to their corresponding chat histories.
store = {}  # memory is maintained outside the chain


# A function that returns the chat history for a given session ID.
def get_session_history(session_id: str) -> InMemoryChatMessageHistory:
    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]


chat = ChatNVIDIA(
    model="mistralai/mixtral-8x22b-instruct-v0.1",
    temperature=0.1,
    max_tokens=100,
    top_p=1.0,
)

#  Define a RunnableConfig object, with a `configurable` key. session_id determines thread
config = {"configurable": {"session_id": "1"}}

conversation = RunnableWithMessageHistory(
    chat,
    get_session_history,
)

conversation.invoke(
    "Hi I'm Srijan Dubey.",  # input or query
    config=config,
)
conversation.invoke(
    "I'm doing well! Just having a conversation with an AI.",
    config=config,
)
conversation.invoke(
    "Tell me about yourself.",
    config=config,
)

工具调用

从 v0.2 开始,ChatNVIDIA 支持 bind_tools ChatNVIDIA 提供了与 build.nvidia.com 上的各种模型以及本地 NIM 的集成。并非所有这些模型都经过工具调用训练。请务必为您的实验和应用程序选择支持工具调用的模型。 您可以使用以下命令获取已知支持工具调用的模型列表:
tool_models = [
    model for model in ChatNVIDIA.get_available_models() if model.supports_tools
]
tool_models
使用具备工具调用能力的模型,
from langchain.tools import tool
from pydantic import Field


@tool
def get_current_weather(
    location: str = Field(..., description="The location to get the weather for."),
):
    """Get the current weather for a location."""
    ...


llm = ChatNVIDIA(model=tool_models[0].id).bind_tools(tools=[get_current_weather])
response = llm.invoke("What is the weather in Boston?")
response.tool_calls
有关更多示例,请参阅 如何使用聊天模型调用工具

API 参考

有关所有 ChatNVIDIA 功能和配置的详细文档,请参阅 API 参考:python.langchain.com/api_reference/nvidia_ai_endpoints/chat_models/langchain_nvidia_ai_endpoints.chat_models.ChatNVIDIA.html
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.