ChatClovaX
本笔记本提供了一个快速入门指南,帮助你通过 CLOVA Studio 使用 Naver 的 HyperCLOVA X 聊天模型。有关所有 ChatClovaX 功能和配置的详细文档,请访问 API 参考。
CLOVA Studio 有多个聊天模型。你可以在 CLOVA Studio API 指南 文档中找到有关最新模型及其成本、上下文窗口和支持的输入类型的信息。
概述
集成详情
类 | 包 | 本地 | 可序列化 | JS 支持 | 包下载 | 包最新版 |
---|---|---|---|---|---|---|
ChatClovaX | langchain-community | ❌ | ❌ | ❌ |
模型特性
工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | 令牌级流式传输 | 原生异步 | 令牌使用 | Logprobs |
---|---|---|---|---|---|---|---|---|---|
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
设置
在使用聊天模型之前,你必须完成以下三个步骤。
- 创建 NAVER Cloud Platform 账户
- 申请使用 CLOVA Studio
- 在创建 CLOVA Studio 测试应用或服务应用后找到 API 密钥 (请参阅此处。)
凭证
CLOVA Studio 需要 2 个密钥 (NCP_CLOVASTUDIO_API_KEY
和 NCP_APIGW_API_KEY
)。
NCP_CLOVASTUDIO_API_KEY
是为每个测试应用或服务应用颁发的NCP_APIGW_API_KEY
是为每个账户颁发的,根据你使用的区域,可以是可选的
这两个 API 密钥可以通过点击 CLOVA Studio 中的 应用请求状态
> 服务应用、测试应用列表
> 每个应用的“详情”按钮
找到
你可以将它们添加到你的环境变量中,如下所示
export NCP_CLOVASTUDIO_API_KEY="your-api-key-here"
export NCP_APIGW_API_KEY="your-api-key-here"
import getpass
import os
if not os.getenv("NCP_CLOVASTUDIO_API_KEY"):
os.environ["NCP_CLOVASTUDIO_API_KEY"] = getpass.getpass(
"Enter your NCP CLOVA Studio API Key: "
)
if not os.getenv("NCP_APIGW_API_KEY"):
os.environ["NCP_APIGW_API_KEY"] = getpass.getpass(
"Enter your NCP API Gateway API key: "
)
如果你想获得模型调用的自动化跟踪,你还可以通过取消注释以下内容来设置你的 LangSmith API 密钥
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
安装
LangChain Naver 集成位于 langchain-community
包中
# install package
!pip install -qU langchain-community
实例化
现在我们可以实例化我们的模型对象并生成聊天完成
from langchain_community.chat_models import ChatClovaX
chat = ChatClovaX(
model="HCX-003",
max_tokens=100,
temperature=0.5,
# clovastudio_api_key="..." # set if you prefer to pass api key directly instead of using environment variables
# task_id="..." # set if you want to use fine-tuned model
# service_app=False # set True if using Service App. Default value is False (means using Test App)
# include_ai_filters=False # set True if you want to detect inappropriate content. Default value is False
# other params...
)
调用
除了调用之外,我们还支持批处理和流式传输功能。
messages = [
(
"system",
"You are a helpful assistant that translates English to Korean. Translate the user sentence.",
),
("human", "I love using NAVER AI."),
]
ai_msg = chat.invoke(messages)
ai_msg
AIMessage(content='저는 네이버 AI를 사용하는 것이 좋아요.', additional_kwargs={}, response_metadata={'stop_reason': 'stop_before', 'input_length': 25, 'output_length': 14, 'seed': 1112164354, 'ai_filter': None}, id='run-b57bc356-1148-4007-837d-cc409dbd57cc-0', usage_metadata={'input_tokens': 25, 'output_tokens': 14, 'total_tokens': 39})
print(ai_msg.content)
저는 네이버 AI를 사용하는 것이 좋아요.
链式调用
我们可以像这样使用提示模板链接我们的模型
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant that translates {input_language} to {output_language}. Translate the user sentence.",
),
("human", "{input}"),
]
)
chain = prompt | chat
chain.invoke(
{
"input_language": "English",
"output_language": "Korean",
"input": "I love using NAVER AI.",
}
)
AIMessage(content='저는 네이버 AI를 사용하는 것이 좋아요.', additional_kwargs={}, response_metadata={'stop_reason': 'stop_before', 'input_length': 25, 'output_length': 14, 'seed': 2575184681, 'ai_filter': None}, id='run-7014b330-eba3-4701-bb62-df73ce39b854-0', usage_metadata={'input_tokens': 25, 'output_tokens': 14, 'total_tokens': 39})
流式传输
system = "You are a helpful assistant that can teach Korean pronunciation."
human = "Could you let me know how to say '{phrase}' in Korean?"
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)])
chain = prompt | chat
for chunk in chain.stream({"phrase": "Hi"}):
print(chunk.content, end="", flush=True)
Certainly! In Korean, "Hi" is pronounced as "안녕" (annyeong). The first syllable, "안," sounds like the "ahh" sound in "apple," while the second syllable, "녕," sounds like the "yuh" sound in "you." So when you put them together, it's like saying "ahhyuh-nyuhng." Remember to pronounce each syllable clearly and separately for accurate pronunciation.
附加功能
使用微调模型
你可以通过传入相应的 task_id
参数来调用微调模型。(调用微调模型时,你不需要指定 model_name
参数。)
你可以从相应的测试应用或服务应用详细信息中检查 task_id
。
fine_tuned_model = ChatClovaX(
task_id="5s8egt3a", # set if you want to use fine-tuned model
# other params...
)
fine_tuned_model.invoke(messages)
AIMessage(content='저는 네이버 AI를 사용하는 것이 너무 좋아요.', additional_kwargs={}, response_metadata={'stop_reason': 'stop_before', 'input_length': 25, 'output_length': 15, 'seed': 52559061, 'ai_filter': None}, id='run-5bea8d4a-48f3-4c34-ae70-66e60dca5344-0', usage_metadata={'input_tokens': 25, 'output_tokens': 15, 'total_tokens': 40})
服务应用
当使用 CLOVA Studio 上线生产级应用程序时,您应该申请并使用服务应用。(请参考此处。)
对于服务应用,会颁发相应的 NCP_CLOVASTUDIO_API_KEY
,并且只能使用该密钥进行调用。
# Update environment variables
os.environ["NCP_CLOVASTUDIO_API_KEY"] = getpass.getpass(
"Enter NCP CLOVA Studio API Key for Service App: "
)
chat = ChatClovaX(
service_app=True, # True if you want to use your service app, default value is False.
# clovastudio_api_key="..." # if you prefer to pass api key in directly instead of using env vars
model="HCX-003",
# other params...
)
ai_msg = chat.invoke(messages)
AI 过滤器
AI 过滤器会检测在 Playground 中创建的测试应用(或包括的服务应用)中不恰当的输出(例如亵渎性语言),并通知用户。有关详细信息,请参阅此处。
chat = ChatClovaX(
model="HCX-003",
include_ai_filters=True, # True if you want to enable ai filter
# other params...
)
ai_msg = chat.invoke(messages)
print(ai_msg.response_metadata["ai_filter"])
API 参考
有关所有 ChatNaver 功能和配置的详细文档,请访问 API 参考:https://python.langchain.ac.cn/api_reference/community/chat_models/langchain_community.chat_models.naver.ChatClovaX.html