ChatPremAI를 사용하여 다양한 chat model과 상호작용하기 위해 LangChain을 사용하는 방법을 다룹니다.
Installation 및 setup
먼저langchain과 premai-sdk를 설치합니다. 다음 명령어를 입력하여 설치할 수 있습니다:
LangChain에서 PremAI client setup
필요한 module을 import한 후 client를 설정해봅시다. 지금은project_id가 8이라고 가정하겠습니다. 하지만 반드시 자신의 project-id를 사용하세요. 그렇지 않으면 오류가 발생합니다.
langchain과 prem을 함께 사용하려면 chat-client에 model 이름을 전달하거나 parameter를 설정할 필요가 없습니다. 기본적으로 LaunchPad에서 사용된 model 이름과 parameter를 사용합니다.
참고: client를 설정할 때model이나temperature또는max_tokens와 같은 다른 parameter를 변경하면 LaunchPad에서 사용된 기존 기본 구성을 재정의합니다.
Chat Completions
ChatPremAI는 두 가지 method를 지원합니다: invoke (generate와 동일)와 stream.
첫 번째는 정적 결과를 제공합니다. 반면 두 번째는 token을 하나씩 스트리밍합니다. chat과 같은 completion을 생성하는 방법은 다음과 같습니다.
Always sound like a pirate로 설정했습니다. 필요한 경우 기본 system prompt를 재정의할 수도 있습니다. 방법은 다음과 같습니다.
여기에 system prompt를 배치하면 플랫폼에서 애플리케이션을 배포할 때 고정된 system prompt가 재정의됩니다.
Prem Repositories를 사용한 Native RAG 지원
Prem Repositories는 사용자가 문서(.txt, .pdf 등)를 업로드하고 해당 repository를 LLM에 연결할 수 있게 해줍니다. Prem repository를 native RAG로 생각할 수 있으며, 각 repository는 vector database로 간주될 수 있습니다. 여러 repository를 연결할 수 있습니다. repository에 대한 자세한 내용은 여기에서 확인할 수 있습니다. Repository는 langchain premai에서도 지원됩니다. 방법은 다음과 같습니다.참고:이제 RAG 기반 generation을 invoke하기 위해 repository를 chat object와 연결합니다.model_name과 유사하게repositoriesargument를 invoke하면 launchpad에 연결된 repository를 잠재적으로 재정의하게 됩니다.
이상적으로는 Retrieval Augmented Generation을 얻기 위해 여기에 Repository ID를 연결할 필요가 없습니다. prem 플랫폼에서 repository를 연결한 경우 동일한 결과를 얻을 수 있습니다.
Prem Templates
Prompt Template 작성은 매우 복잡할 수 있습니다. Prompt template은 길고 관리하기 어려우며 개선하고 애플리케이션 전체에서 동일하게 유지하기 위해 지속적으로 조정해야 합니다. Prem을 사용하면 prompt 작성 및 관리가 매우 쉬워집니다. launchpad 내의 Templates 탭을 사용하면 필요한 만큼 많은 prompt를 작성하고 SDK 내에서 사용하여 해당 prompt를 사용하는 애플리케이션을 실행할 수 있습니다. Prompt Template에 대한 자세한 내용은 여기에서 확인할 수 있습니다. LangChain과 함께 Prem Template을 기본적으로 사용하려면HumanMessage에 id를 전달해야 합니다. 이 id는 prompt template의 변수 이름이어야 합니다. HumanMessage의 content는 해당 변수의 값이어야 합니다.
예를 들어 prompt template이 다음과 같다면:
human_messages를 ChatPremAI Client에 전달하세요. 참고: Prem Template으로 generation을 invoke하려면 추가 template_id를 전달하는 것을 잊지 마세요. template_id에 대해 잘 모르는 경우 문서에서 자세히 알아볼 수 있습니다. 예제는 다음과 같습니다:
Streaming
이 섹션에서는 langchain과 PremAI를 사용하여 token을 스트리밍하는 방법을 살펴보겠습니다. 방법은 다음과 같습니다.Tool/Function Calling
LangChain PremAI는 tool/function calling을 지원합니다. Tool/function calling을 사용하면 model이 사용자 정의 schema와 일치하는 출력을 생성하여 주어진 prompt에 응답할 수 있습니다.- tool calling에 대한 모든 세부 정보는 문서에서 확인할 수 있습니다.
- langchain tool calling에 대한 자세한 내용은 문서의 이 부분에서 확인할 수 있습니다.
Model에 tool 전달하기
tool을 전달하고 LLM이 호출해야 하는 tool을 선택하도록 하려면 tool schema를 전달해야 합니다. Tool schema는 함수가 수행하는 작업, 함수의 각 argument가 무엇인지 등에 대한 적절한 docstring과 함께 함수 정의입니다. 아래는 schema가 포함된 몇 가지 간단한 산술 함수입니다. 참고: function/tool schema를 정의할 때 함수 argument에 대한 정보를 추가하는 것을 잊지 마세요. 그렇지 않으면 오류가 발생합니다.LLM에 tool schema binding하기
이제bind_tools method를 사용하여 위의 함수를 “tool”로 변환하고 model과 binding합니다. 이는 model을 invoke할 때마다 이러한 tool 정보를 전달한다는 의미입니다.
- 첫 번째 호출에서 LLM이 tool하기로 결정한 모든 tool을 수집하여 더 정확하고 환각 없는 결과를 제공하기 위한 추가 context로 결과를 얻을 수 있습니다.
- 두 번째 호출에서 LLM이 결정한 tool 세트를 파싱하고 실행한 다음(우리의 경우 LLM이 추출한 argument와 함께 정의한 함수가 됩니다) 이 결과를 LLM에 전달합니다.
Tool schema 정의하기: Pydantic class
위에서tool decorator를 사용하여 schema를 정의하는 방법을 보여주었지만 Pydantic을 사용하여 schema를 동등하게 정의할 수 있습니다. Pydantic은 tool input이 더 복잡할 때 유용합니다:
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.