이 노트북은 langchain.chat_models.ChatYuan2를 사용하여 LangChain에서 YUAN2 API를 사용하는 방법을 보여줍니다. Yuan2.0은 IEIT System에서 개발한 새로운 세대의 기본 대규모 언어 모델입니다. 우리는 Yuan 2.0-102B, Yuan 2.0-51B, Yuan 2.0-2B 세 가지 모델을 모두 공개했습니다. 그리고 다른 개발자들을 위해 사전 학습, 미세 조정 및 추론 서비스를 위한 관련 스크립트를 제공합니다. Yuan2.0은 Yuan1.0을 기반으로 하며, 더 광범위한 고품질 사전 학습 데이터와 instruction fine-tuning 데이터셋을 활용하여 의미론, 수학, 추론, 코드, 지식 및 기타 측면에 대한 모델의 이해를 향상시켰습니다.

시작하기

설치

먼저, Yuan2.0은 OpenAI 호환 API를 제공하며, OpenAI client를 사용하여 ChatYuan2를 langchain chat model에 통합했습니다. 따라서 Python 환경에 openai 패키지가 설치되어 있는지 확인하세요. 다음 명령을 실행하세요:
pip install -qU openai

필요한 모듈 가져오기

설치 후, Python 스크립트에 필요한 모듈을 가져옵니다:
from langchain_community.chat_models import ChatYuan2
from langchain.messages import AIMessage, HumanMessage, SystemMessage

API 서버 설정하기

yuan2 openai api server를 따라 OpenAI 호환 API 서버를 설정하세요. 로컬에 api 서버를 배포한 경우, 간단히 yuan2_api_key="EMPTY" 또는 원하는 값으로 설정할 수 있습니다. yuan2_api_base가 올바르게 설정되어 있는지만 확인하세요.
yuan2_api_key = "your_api_key"
yuan2_api_base = "http://127.0.0.1:8001/v1"

ChatYuan2 모델 초기화

chat model을 초기화하는 방법은 다음과 같습니다:
chat = ChatYuan2(
    yuan2_api_base="http://127.0.0.1:8001/v1",
    temperature=1.0,
    model_name="yuan2",
    max_retries=3,
    streaming=False,
)

기본 사용법

다음과 같이 system 및 human 메시지로 모델을 호출합니다:
messages = [
    SystemMessage(content="你是一个人工智能助手。"),
    HumanMessage(content="你好,你是谁?"),
]
print(chat.invoke(messages))

streaming을 사용한 기본 사용법

지속적인 상호작용을 위해 streaming 기능을 사용하세요:
from langchain_core.callbacks import StreamingStdOutCallbackHandler

chat = ChatYuan2(
    yuan2_api_base="http://127.0.0.1:8001/v1",
    temperature=1.0,
    model_name="yuan2",
    max_retries=3,
    streaming=True,
    callbacks=[StreamingStdOutCallbackHandler()],
)
messages = [
    SystemMessage(content="你是个旅游小助手。"),
    HumanMessage(content="给我介绍一下北京有哪些好玩的。"),
]
chat.invoke(messages)

고급 기능

async 호출 사용법

다음과 같이 non-blocking 호출로 모델을 호출합니다:
async def basic_agenerate():
    chat = ChatYuan2(
        yuan2_api_base="http://127.0.0.1:8001/v1",
        temperature=1.0,
        model_name="yuan2",
        max_retries=3,
    )
    messages = [
        [
            SystemMessage(content="你是个旅游小助手。"),
            HumanMessage(content="给我介绍一下北京有哪些好玩的。"),
        ]
    ]

    result = await chat.agenerate(messages)
    print(result)
import asyncio

asyncio.run(basic_agenerate())

prompt template 사용법

다음과 같이 non-blocking 호출과 chat template을 사용하여 모델을 호출합니다:
async def ainvoke_with_prompt_template():
    from langchain_core.prompts.chat import (
        ChatPromptTemplate,
    )

    chat = ChatYuan2(
        yuan2_api_base="http://127.0.0.1:8001/v1",
        temperature=1.0,
        model_name="yuan2",
        max_retries=3,
    )
    prompt = ChatPromptTemplate.from_messages(
        [
            ("system", "你是一个诗人,擅长写诗。"),
            ("human", "给我写首诗,主题是{theme}。"),
        ]
    )
    chain = prompt | chat
    result = await chain.ainvoke({"theme": "明月"})
    print(f"type(result): {type(result)}; {result}")
asyncio.run(ainvoke_with_prompt_template())

streaming에서 async 호출 사용법

streaming 출력과 함께 non-blocking 호출을 사용하려면 astream 메서드를 사용하세요:
async def basic_astream():
    chat = ChatYuan2(
        yuan2_api_base="http://127.0.0.1:8001/v1",
        temperature=1.0,
        model_name="yuan2",
        max_retries=3,
    )
    messages = [
        SystemMessage(content="你是个旅游小助手。"),
        HumanMessage(content="给我介绍一下北京有哪些好玩的。"),
    ]
    result = chat.astream(messages)
    async for chunk in result:
        print(chunk.content, end="", flush=True)
import asyncio

asyncio.run(basic_astream())

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I