DeepInfra
DeepInfra 是一個無伺服器推論即服務平台,提供存取 多種 LLM 和 嵌入模型 的管道。本筆記本說明如何將 LangChain 與 DeepInfra 搭配使用於聊天模型。
設定環境 API 金鑰
請務必從 DeepInfra 取得您的 API 金鑰。您必須登入並取得新的權杖。
您將獲得 1 小時的免費無伺服器 GPU 計算時間,以測試不同的模型。(請參閱此處)您可以使用 deepctl auth token
列印您的權杖
# get a new token: https://deepinfra.com/login?from=%2Fdash
import os
from getpass import getpass
from langchain_community.chat_models import ChatDeepInfra
from langchain_core.messages import HumanMessage
DEEPINFRA_API_TOKEN = getpass()
# or pass deepinfra_api_token parameter to the ChatDeepInfra constructor
os.environ["DEEPINFRA_API_TOKEN"] = DEEPINFRA_API_TOKEN
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)
API 參考:ChatDeepInfra | HumanMessage
ChatDeepInfra
也支援非同步和串流功能:
from langchain_core.callbacks import StreamingStdOutCallbackHandler
await chat.agenerate([messages])
chat = ChatDeepInfra(
streaming=True,
verbose=True,
callbacks=[StreamingStdOutCallbackHandler()],
)
chat.invoke(messages)
工具呼叫
DeepInfra 目前僅支援 invoke 和 async invoke 工具呼叫。
如需支援工具呼叫的模型完整列表,請參閱我們的工具呼叫文件。
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.tools import tool
from pydantic import BaseModel
model_name = "meta-llama/Meta-Llama-3-70B-Instruct"
_ = load_dotenv(find_dotenv())
# Langchain tool
@tool
def foo(something):
"""
Called when foo
"""
pass
# Pydantic class
class Bar(BaseModel):
"""
Called when Bar
"""
pass
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)
# [{'name': 'foo', 'args': {'something': None}, 'id': 'call_Mi4N4wAtW89OlbizFE1aDxDj'}, {'name': 'Bar', 'args': {}, 'id': 'call_daiE0mW454j2O1KVbmET4s2r'}]
async def call_ainvoke():
result = await llm_with_tools.ainvoke(messages)
print(result.tool_calls)
# Async call
asyncio.run(call_ainvoke())
# [{'name': 'foo', 'args': {'something': None}, 'id': 'call_ZH7FetmgSot4LHcMU6CEb8tI'}, {'name': 'Bar', 'args': {}, 'id': 'call_2MQhDifAJVoijZEvH8PeFSVB'}]