以编程方式使用文档

这将帮助您开始使用 OCIModelDeployment 聊天模型。有关所有功能的详细文档 ChatOCIModelDeployment 和配置,请参阅 langchain-oci 包.

OCI Data Science 是一个完全托管的无服务器平台,供数据科学团队在 Oracle Cloud Infrastructure 上构建、训练和管理机器学习模型。您可以使用 AI Quick Actions 在以下服务上轻松部署 LLM OCI Data Science Model Deployment Service。您可以选择使用流行的推理框架(如 vLLM 或 TGI)部署模型。默认情况下,模型部署端点模拟 OpenAI API 协议。

> 有关最新的更新、示例和实验性功能,请参阅 ADS LangChain 集成.

概述

集成详情

类包可序列化JS 支持下载量版本
ChatOCIModelDeploymentlangchain-ocibeta❌!PyPI - 下载量!PyPI - 版本

模型功能

工具调用结构化输出图像输入音频输入视频输入令牌级流式输出原生异步令牌使用量Logprobs
取决于取决于取决于取决于取决于✅✅✅✅

某些模型功能(包括工具调用、结构化输出和多模态输入)取决于所部署的模型。

设置

要使用 ChatOCIModelDeployment,请部署一个具有聊天补全端点的聊天模型并安装 langchain-oci 和 oracle-ads packages.

您可以使用 OCI Data Science Model deployment 上的 AI Quick Actions 轻松部署基础模型。有关其他部署示例,请访问 Oracle GitHub 示例仓库.

策略

请确保拥有访问 OCI Data Science Model Deployment 端点所需的 策略 。

凭证

您可以通过 Oracle ADS 设置身份验证。当您在 OCI Data Science Notebook Session 中工作时,可以使用资源主体访问其他 OCI 资源。

# Set authentication through ads
# Use resource principal are operating within a
# OCI service that has resource principal based
# authentication configured
ads.set_auth("resource_principal")

或者,您可以使用以下环境变量配置凭证。例如,要使用带有特定配置文件的 API 密钥:

# Set authentication through environment variables
# Use API Key setup when you are working from a local
# workstation or on platform which does not support
# resource principals.
os.environ["OCI_IAM_TYPE"] = "api_key"
os.environ["OCI_CONFIG_PROFILE"] = "default"
os.environ["OCI_CONFIG_LOCATION"] = "~/.oci"

查看 Oracle ADS 文档 了解更多选项。

安装

LangChain OCIModelDeployment 集成位于 langchain-oci package.

pip install -qU langchain-oci oracle-ads
uv add langchain-oci oracle-ads

实例化

您可以使用通用类实例化模型 ChatOCIModelDeployment 或框架特定的类,例如 ChatOCIModelDeploymentVLLM.

  • * 使用 ChatOCIModelDeployment 当您需要通用入口点来部署模型时。您可以通过以下方式传递模型参数 model_kwargs 在此类实例化期间。这允许灵活性和易于配置,而无需依赖框架特定的细节。
from langchain_oci import ChatOCIModelDeployment

# Create an instance of OCI Model Deployment Endpoint
# Replace the endpoint uri with your own
# Using generic class as entry point, you will be able
# to pass model parameters through model_kwargs during
# instantiation.
chat = ChatOCIModelDeployment(
    endpoint="https://modeldeployment.<region>.oci.customer-oci.com/<ocid>/predict",
    streaming=True,
    max_retries=1,
    model_kwargs={
        "temperature": 0.2,
        "max_tokens": 512,
    },  # other model params...
    default_headers={
        "route": "/v1/chat/completions",
        # other request headers ...
    },
)
  • * 使用框架特定的类,例如 ChatOCIModelDeploymentVLLM:这适用于您正在使用特定框架(例如 vLLM)并需要通过构造函数直接传递模型参数的情况,简化了设置过程。
from langchain_oci import ChatOCIModelDeploymentVLLM

# Create an instance of OCI Model Deployment Endpoint
# Replace the endpoint uri with your own
# Using framework specific class as entry point, you will
# be able to pass model parameters in constructor.
chat = ChatOCIModelDeploymentVLLM(
    endpoint="https://modeldeployment.<region>.oci.customer-oci.com/<md_ocid>/predict",
)

调用

messages = [
    (
        "system",
        "You are a helpful assistant that translates English to French. Translate the user sentence.",
    ),
    ("human", "I love programming."),
]

ai_msg = chat.invoke(messages)
ai_msg
AIMessage(content="J'adore programmer.", response_metadata={'token_usage': {'prompt_tokens': 44, 'total_tokens': 52, 'completion_tokens': 8}, 'model_name': 'odsc-llm', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='run-ca145168-efa9-414c-9dd1-21d10766fdd3-0')
print(ai_msg.content)
J'adore programmer.

链接

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are a helpful assistant that translates {input_language} to {output_language}.",
        ),
        ("human", "{input}"),
    ]
)

chain = prompt | chat
chain.invoke(
    {
        "input_language": "English",
        "output_language": "German",
        "input": "I love programming.",
    }
)
AIMessage(content='Ich liebe Programmierung.', response_metadata={'token_usage': {'prompt_tokens': 38, 'total_tokens': 48, 'completion_tokens': 10}, 'model_name': 'odsc-llm', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='run-5dd936b0-b97e-490e-9869-2ad3dd524234-0')

异步调用

from langchain_oci import ChatOCIModelDeployment

system = "You are a helpful translator that translates {input_language} to {output_language}."
human = "{text}"
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)])

chat = ChatOCIModelDeployment(
    endpoint="https://modeldeployment.us-ashburn-1.oci.customer-oci.com/<ocid>/predict"
)
chain = prompt | chat

await chain.ainvoke(
    {
        "input_language": "English",
        "output_language": "Chinese",
        "text": "I love programming",
    }
)
AIMessage(content='我喜欢编程', response_metadata={'token_usage': {'prompt_tokens': 37, 'total_tokens': 50, 'completion_tokens': 13}, 'model_name': 'odsc-llm', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='run-a2dc9393-f269-41a4-b908-b1d8a92cf827-0')

流式调用

from langchain_oci import ChatOCIModelDeployment
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [("human", "List out the 5 states in the United State.")]
)

chat = ChatOCIModelDeployment(
    endpoint="https://modeldeployment.us-ashburn-1.oci.customer-oci.com/<ocid>/predict"
)

chain = prompt | chat

for chunk in chain.stream({}):
    sys.stdout.write(chunk.content)
    sys.stdout.flush()
1. California
2. Texas
3. Florida
4. New York
5. Illinois

结构化输出

from langchain_oci import ChatOCIModelDeployment
from pydantic import BaseModel


class Joke(BaseModel):
    """A setup to a joke and the punchline."""

    setup: str
    punchline: str


chat = ChatOCIModelDeployment(
    endpoint="https://modeldeployment.us-ashburn-1.oci.customer-oci.com/<ocid>/predict",
)
structured_llm = chat.with_structured_output(Joke, method="json_mode")
output = structured_llm.invoke(
    "Tell me a joke about cats, respond in JSON with `setup` and `punchline` keys"
)

output.dict()
{'setup': 'Why did the cat get stuck in the tree?',
 'punchline': 'Because it was chasing its tail!'}

API 参考

有关所有功能和配置的详细信息,请参阅 langchain-oci 包 每个类的文档:

  • * ChatOCIModelDeployment
  • * ChatOCIModelDeploymentVLLM
  • * ChatOCIModelDeploymentTGI