mirror of
https://github.com/hwchase17/langchain.git
synced 2025-05-01 21:35:34 +00:00
## **Description:** This PR was requested after the `langchain-naver` partner-managed packages were completed. We build our package as requested in [this comment](https://github.com/langchain-ai/langchain/pull/29243#issuecomment-2595222791) and the initial version is now uploaded to [pypi](https://pypi.org/project/langchain-naver/). So we've updated some our documents with the additional changed features and how to download our partner-managed package. ## **Dependencies:** https://github.com/langchain-ai/langchain/pull/29243#issuecomment-2595222791 --------- Co-authored-by: ccurme <chester.curme@gmail.com>
357 lines
14 KiB
Plaintext
357 lines
14 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "raw",
|
||
"id": "afaf8039",
|
||
"metadata": {},
|
||
"source": [
|
||
"---\n",
|
||
"sidebar_label: Naver\n",
|
||
"---"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c8444f1a-e907-4f07-b8b6-68fbedfb868e",
|
||
"metadata": {},
|
||
"source": [
|
||
"# ChatClovaX\n",
|
||
"\n",
|
||
"This notebook provides a quick overview for getting started with Naver’s HyperCLOVA X [chat models](https://python.langchain.com/docs/concepts/chat_models) via CLOVA Studio. For detailed documentation of all ChatClovaX features and configurations head to the [API reference](https://guide.ncloud-docs.com/docs/clovastudio-dev-langchain).\n",
|
||
"\n",
|
||
"[CLOVA Studio](http://clovastudio.ncloud.com/) has several chat models. You can find information about latest models and their costs, context windows, and supported input types in the CLOVA Studio Guide [documentation](https://guide.ncloud-docs.com/docs/clovastudio-model).\n",
|
||
"\n",
|
||
"## Overview\n",
|
||
"### Integration details\n",
|
||
"\n",
|
||
"| Class | Package | Local | Serializable | JS support | Package downloads | Package latest |\n",
|
||
"| :--- | :--- |:-----:| :---: |:------------------------------------------------------------------------:| :---: | :---: |\n",
|
||
"| [ChatClovaX](https://guide.ncloud-docs.com/docs/clovastudio-dev-langchain#HyperCLOVAX%EB%AA%A8%EB%8D%B8%EC%9D%B4%EC%9A%A9) | [langchain-naver](https://pypi.org/project/langchain-naver/) | ❌ | ❌ | ❌ |  |  |\n",
|
||
"\n",
|
||
"### Model features\n",
|
||
"| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n",
|
||
"|:------------------------------------------:| :---: | :---: | :---: | :---: | :---: |:-----------------------------------------------------:| :---: |:------------------------------------------------------:|:----------------------------------:|\n",
|
||
"|✅| ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |\n",
|
||
"\n",
|
||
"## Setup\n",
|
||
"\n",
|
||
"Before using the chat model, you must go through the four steps below.\n",
|
||
"\n",
|
||
"1. Creating [NAVER Cloud Platform](https://www.ncloud.com/) account\n",
|
||
"2. Apply to use [CLOVA Studio](https://www.ncloud.com/product/aiService/clovaStudio)\n",
|
||
"3. Create a CLOVA Studio Test App or Service App of a model to use (See [here](https://guide.ncloud-docs.com/docs/clovastudio-playground-testapp).)\n",
|
||
"4. Issue a Test or Service API key (See [here](https://api.ncloud-docs.com/docs/ai-naver-clovastudio-summary#API%ED%82%A4).)\n",
|
||
"\n",
|
||
"### Credentials\n",
|
||
"\n",
|
||
"Set the `CLOVASTUDIO_API_KEY` environment variable with your API key.\n",
|
||
"\n",
|
||
"You can add them to your environment variables as below:\n",
|
||
"\n",
|
||
"``` bash\n",
|
||
"export CLOVASTUDIO_API_KEY=\"your-api-key-here\"\n",
|
||
"```"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "2def81b5-b023-4f40-a97b-b2c5ca59d6a9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import getpass\n",
|
||
"import os\n",
|
||
"\n",
|
||
"if not os.getenv(\"CLOVASTUDIO_API_KEY\"):\n",
|
||
" os.environ[\"CLOVASTUDIO_API_KEY\"] = getpass.getpass(\n",
|
||
" \"Enter your CLOVA Studio API Key: \"\n",
|
||
" )"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7c695442",
|
||
"metadata": {},
|
||
"source": [
|
||
"To enable automated tracing of your model calls, set your [LangSmith](https://docs.smith.langchain.com/) API key:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "6151aeb6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# os.environ[\"LANGSMITH_TRACING\"] = \"true\"\n",
|
||
"# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "17bf9053-90c5-4955-b239-55a35cb07566",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Installation\n",
|
||
"\n",
|
||
"The LangChain Naver integration lives in the `langchain-naver` package:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "a15d341e-3e26-4ca3-830b-5aab30ed66de",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# install package\n",
|
||
"%pip install -qU langchain-naver"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a38cde65-254d-4219-a441-068766c0d4b5",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Instantiation\n",
|
||
"\n",
|
||
"Now we can instantiate our model object and generate chat completions:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "cb09c344-1836-4e0c-acf8-11d13ac1dbae",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from langchain_naver import ChatClovaX\n",
|
||
"\n",
|
||
"chat = ChatClovaX(\n",
|
||
" model=\"HCX-005\",\n",
|
||
" temperature=0.5,\n",
|
||
" max_tokens=None,\n",
|
||
" timeout=None,\n",
|
||
" max_retries=2,\n",
|
||
" # other params...\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "47752b59",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Invocation\n",
|
||
"\n",
|
||
"In addition to invoke, `ChatClovaX` also support batch and stream functionalities."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "62e0dbc3",
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"AIMessage(content='네이버 인공지능을 사용하는 것을 정말 좋아합니다.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 11, 'prompt_tokens': 28, 'total_tokens': 39, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'HCX-005', 'system_fingerprint': None, 'id': 'b70c26671cd247a0864115bacfb5fc12', 'finish_reason': 'stop', 'logprobs': None}, id='run-3faf6a8d-d5da-49ad-9fbb-7b56ed23b484-0', usage_metadata={'input_tokens': 28, 'output_tokens': 11, 'total_tokens': 39, 'input_token_details': {}, 'output_token_details': {}})"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"messages = [\n",
|
||
" (\n",
|
||
" \"system\",\n",
|
||
" \"You are a helpful assistant that translates English to Korean. Translate the user sentence.\",\n",
|
||
" ),\n",
|
||
" (\"human\", \"I love using NAVER AI.\"),\n",
|
||
"]\n",
|
||
"\n",
|
||
"ai_msg = chat.invoke(messages)\n",
|
||
"ai_msg"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "24e7377f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"네이버 인공지능을 사용하는 것을 정말 좋아합니다.\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(ai_msg.content)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "18e2bfc0-7e78-4528-a73f-499ac150dca8",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Chaining\n",
|
||
"\n",
|
||
"We can [chain](/docs/how_to/sequence/) our model with a prompt template like so:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "e197d1d7-a070-4c96-9f8a-a0e86d046e0b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"AIMessage(content='저는 네이버 인공지능을 사용하는 것을 좋아합니다.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 28, 'total_tokens': 38, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'HCX-005', 'system_fingerprint': None, 'id': 'b7a826d17fcf4fee8386fca2ebc63284', 'finish_reason': 'stop', 'logprobs': None}, id='run-35957816-3325-4d9c-9441-e40704912be6-0', usage_metadata={'input_tokens': 28, 'output_tokens': 10, 'total_tokens': 38, 'input_token_details': {}, 'output_token_details': {}})"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from langchain_core.prompts import ChatPromptTemplate\n",
|
||
"\n",
|
||
"prompt = ChatPromptTemplate.from_messages(\n",
|
||
" [\n",
|
||
" (\n",
|
||
" \"system\",\n",
|
||
" \"You are a helpful assistant that translates {input_language} to {output_language}. Translate the user sentence.\",\n",
|
||
" ),\n",
|
||
" (\"human\", \"{input}\"),\n",
|
||
" ]\n",
|
||
")\n",
|
||
"\n",
|
||
"chain = prompt | chat\n",
|
||
"chain.invoke(\n",
|
||
" {\n",
|
||
" \"input_language\": \"English\",\n",
|
||
" \"output_language\": \"Korean\",\n",
|
||
" \"input\": \"I love using NAVER AI.\",\n",
|
||
" }\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "66e69286",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Streaming"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "2c07af21-dda5-4514-b4de-1f214c2cebcd",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"In Korean, the informal way of saying 'hi' is \"안녕\" (annyeong). If you're addressing someone older or showing more respect, you would use \"안녕하세요\" (annjeonghaseyo). Both phrases are used as greetings similar to 'hello'. Remember, pronunciation is key so make sure to pronounce each syllable clearly: 안-녀-엉 (an-nyeo-eong) and 안-녕-하-세-요 (an-nyeong-ha-se-yo)."
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"system = \"You are a helpful assistant that can teach Korean pronunciation.\"\n",
|
||
"human = \"Could you let me know how to say '{phrase}' in Korean?\"\n",
|
||
"prompt = ChatPromptTemplate.from_messages([(\"system\", system), (\"human\", human)])\n",
|
||
"\n",
|
||
"chain = prompt | chat\n",
|
||
"\n",
|
||
"for chunk in chain.stream({\"phrase\": \"Hi\"}):\n",
|
||
" print(chunk.content, end=\"\", flush=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d1ee55bc-ffc8-4cfa-801c-993953a08cfd",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Additional functionalities\n",
|
||
"\n",
|
||
"### Using fine-tuned models\n",
|
||
"\n",
|
||
"You can call fine-tuned models by passing the `task_id` to the `model` parameter as: `ft:{task_id}`.\n",
|
||
"\n",
|
||
"You can check `task_id` from corresponding Test App or Service App details."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "cb436788",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"AIMessage(content='네이버 인공지능을 사용하는 것을 정말 좋아합니다.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 11, 'prompt_tokens': 28, 'total_tokens': 39, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'HCX-005', 'system_fingerprint': None, 'id': '2222d6d411a948c883aac1e03ca6cebe', 'finish_reason': 'stop', 'logprobs': None}, id='run-9696d7e2-7afa-4bb4-9c03-b95fcf678ab8-0', usage_metadata={'input_tokens': 28, 'output_tokens': 11, 'total_tokens': 39, 'input_token_details': {}, 'output_token_details': {}})"
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"fine_tuned_model = ChatClovaX(\n",
|
||
" model=\"ft:a1b2c3d4\", # set as `ft:{task_id}` with your fine-tuned model's task id\n",
|
||
" # other params...\n",
|
||
")\n",
|
||
"\n",
|
||
"fine_tuned_model.invoke(messages)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3a5bb5ca-c3ae-4a58-be67-2cd18574b9a3",
|
||
"metadata": {},
|
||
"source": [
|
||
"## API reference\n",
|
||
"\n",
|
||
"For detailed documentation of all ChatClovaX features and configurations head to the [API reference](https://guide.ncloud-docs.com/docs/clovastudio-dev-langchain)"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.12.8"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|