NVIDIA NIM 是 NVIDIA AI Enterprise 的一部分,它提供了用于自托管 GPU 加速推理微服务的容器,这些微服务适用于预训练和自定义 AI 模型,并且可以跨云、数据中心和工作站部署。还能轻松集成到 AI 应用程序、开发框架和工作流程中。
下面就通过一个代码小示例,来演示一下在本地快速跑通一个代码注释应用程序。
核心代码:
# 设置环境变量
os.environ['NVIDIA_API_KEY'] = api_key
# 初始化嵌入层
embeddings = NVIDIAEmbeddings()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_documents(docs)
vector = FAISS.from_documents(documents, embeddings)
retriever = vector.as_retriever()
# 初始化模型
model = ChatNVIDIA(model=model_name)
# 创建提示模板
hyde_prompt = ChatPromptTemplate.from_template(hyde_template)
hyde_query_transformer = hyde_prompt | model | StrOutputParser()
# 定义检索函数
@chain
def hyde_retriever(question):
hypothetical_document = hyde_query_transformer.invoke({
"question": question})
return retriever.invoke(hypothetical_document)
# 定义最终回答链
prompt = ChatPromptTemplate.from_template(template)
answer_chain = prompt | model | StrOutputParser()
@chain
def final_chain(question):
documents = hyde_retriever.invoke(question)
response = ""
for s in answer_chain.stream({
"question": question, "context": documents}):
response += s
return response
# 调用最终链获取答案
return str(datetime.now()) + final_chain.invoke(question)
界面使用Gradio 快速构建:
# 启动Gradio应用
iface = gr.Interface(
fn=process_question,
inputs=[
gr.Textbox(label="输入需要注释的代码"),
gr.Textbox(label="NVIDIA API Key"),
gr.Dropdown(models, label="选择语言模型"),
# gr.Textbox(label="输入问题")
],
outputs="text",
title="代码注释生成系统"
)
# 启动Gradio界面
iface.launch()