도구 호출을 지원하는 파운데이션 모델과 함께 watsonx.ai 채팅 API를 사용하여 상담원 중심 애플리케이션을 구축하세요.
에이전트 애플리케이션을 사용하면 foundation model 사용자와의 상호 작용 흐름을 제어하는 에이전트로서 기능할 수 있습니다. foundation model 사용할 수 있는 도구를 포함하여 상호 작용의 매개 변수를 정의하지만, foundation model 상호 작용의 현재 상태에 따라 차선책을 결정하도록 허용합니다. 도구 호출을 함수 호출이라고도 합니다.
실제 워크플로에서는 모든 상호작용을 시작할 때 항상 하나의 도구를 호출하는 것이 좋습니다. 나중에 교환에서 사용자가 작업에 대한 후속 질문에 어떻게 대답하는지에 따라 다른 프롬프트를 사용할 수 있습니다. 또는 워크플로우를 완료하는 데 필요한 다양한 타사 도구를 호출할 수도 있습니다. 이러한 옵션을 정의한 다음 foundation model 적절한 시점에 반환할 프롬프트 또는 사용할 도구를 선택하도록 할 수 있습니다.
예를 들어 레스토랑 예약 앱에서 다음 정보를 수집한 다음 예약을 생성해야 할 수 있습니다:
- 위치
- 게스트 수
- 날짜 및 시간
정보가 수집되는 순서는 테이블당 수용 인원이 제한되어 있거나 날씨가 좋은 날 야외에 더 많은 좌석이 있는 일부 장소에서만 중요할 수 있습니다. 코드에서 이러한 조건을 고려하여 상담원이 예약 요청을 완료하기 전에 타사 날씨 앱과 같은 추가 도구를 호출할 시기를 foundation model 결정하도록 할 수 있습니다.
지원되는 파운데이션 모델
상담원 워크플로를 구축할 때는 다음 요구 사항을 충족하는 foundation model 선택하세요:
- 채팅 작업 처리
- 도구 호출 지원
- 다음 작업을 선택할 수 있습니다
다음 모델 ID를 가진 파운데이션 모델은 채팅 API를 사용한 대화형 워크플로우의 맥락에서 다양한 도구를 호출하는 데 사용할 수 있습니다:
- ibm/granite-3-2b-instruct
- ibm/granite-3-8b-instruct
- meta-llama/llama-3-1-70b-instruct
- meta-llama/llama-3-1-8b-instruct
- meta-llama/llama-3-2-11b-vision-instruct
- meta-llama/llama-3-2-1b-instruct
- meta-llama/llama-3-2-90b-vision-instruct
- meta-llama/llama-3-3-70b-instruct
- meta-llama/llama-3-405b-instruct
- mistral-large
채팅 API에서 도구 호출을 지원하는 기초 모델 목록을 프로그래밍 방식으로 가져오려면 사용 가능한 기초 모델 목록 메서드 요청을 제출할 때 filters=task_function_calling
매개변수를 지정하세요.
API 참조를 참조하세요.
예를 들어,
curl -X GET \
'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=task_function_calling'
이러한 기초 모델은 watsonx.ai 또는 CrewAI 같은 타사 도구에서 추론할 수 있습니다. CrewAI 에이전트 애플리케이션을 구축하기 위한 Python 프레임워크입니다. 자세한 내용은 CrewAI 설명서를 참조하세요.
샘플 노트북
다음 샘플 노트북을 사용할 수 있습니다:
REST API를 사용하여 타사 도구를 호출하는 채팅을 구축하세요: 간단한 채팅 대화 및 도구 호출을 위해 watsonx mistral-large 사용하세요
Python SDK를 사용하여 시스템 프롬프트, 어시스턴트, 사용자 등 다양한 사용자 유형 간에 대화를 나누고, 사용자 입력에 따라 다양한 도구를 호출하여 수학 방정식을 계산할 수 있습니다. ' Use watsonx, and mistralai/mistral-large to make simple chat conversation and tool calls 참조
대화에 포함할 정보를 가져오는 도구를 호출하기 위해 Python SDK를 사용하고, 계산기 함수를 작성하고 구현하기 위해 LangChain 사용하고, LangGraph 이어지는 워크플로우를 설명합니다. 간단한 계산을 수행하는 도구에 대한 지원은 watsonx 사용 및 mistral-large 참조하세요.
API 세부사항
API 메서드에 대한 자세한 내용은 API 참조 문서를 확인하세요.
도구 호출 요청 예시
다음 예제에서는 덧셈 함수와 곱셈 함수라는 두 가지 도구를 정의합니다. 이 예에서는 사용자 입력을 foundation model 제출하고 모델이 질문에 답하는 데 사용할 도구를 선택할 수 있도록 합니다.
다음 예제에서는 ' {url}
변수를 ' us-south.ml.cloud.ibm.com
와 같이 인스턴스에 적합한 값으로 바꿉니다. 나만의 무기명 토큰과 프로젝트 ID를 추가하세요.
curl -X POST \
'https://{url}/ml/v1/text/chat?version=2024-10-08' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOi...'
--data '{
"model_id": "mistralai/mistral-large",
"project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is 2 plus 4?"
}
]
}
],
"tools": [
{
"type": "function",
"function": {
"name": "add",
"description": "Adds the values a and b to get a sum.",
"parameters": {
"type": "object",
"properties": {
"a": {
"description": "A number value",
"type": "float"
},
"b": {
"description": "A number value",
"type": "float"
}
},
"required": [
"a",
"b"
]
}
}
},
{
"type": "function",
"function": {
"name": "multiply",
"description": "Multiplies the values a and b.",
"parameters": {
"type": "object",
"properties": {
"a": {
"description": "A number value",
"type": "float"
},
"b": {
"description": "A number value",
"type": "float"
}
},
"required": [
"a",
"b"
]
}
}
}
],
"tool_choice_option": "auto",
"max_tokens": 300,
"time_limit": 1000
}'
샘플 출력은 모델(이 경우 mistral-large )이 작업에 사용할 올바른 도구인 ' add
함수를 선택할 수 있음을 보여줍니다.
{
"id": "chat-a00942a130e84f83bc0090c38c2f419f",
"model_id": "mistralai/mistral-large",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"tool_calls": [
{
"id": "chatcmpl-tool-77cbe4e94d88489383a0c6ed1b644674",
"type": "function",
"function": {
"name": "add",
"arguments": "{\"a\": 2, \"b\": 4}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"created": 1728413314,
"model_version": "2.0.0",
"created_at": "2024-10-08T18:48:34.818Z",
"usage": {
"completion_tokens": 25,
"prompt_tokens": 189,
"total_tokens": 214
},
"system": {
"warnings": [
{
"message": "This model is a Non-IBM Product governed by a third-party license that may impose use restrictions and other obligations. By using this model you agree to its terms as identified in the following URL.",
"id": "disclaimer_warning",
"more_info": "https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models.html?context=wx"
}
]
}
}
granite-3-2b-instruct 사용한 도구 호출 요청 예시
다음 요청은 덧셈 함수와 곱셈 함수라는 두 가지 도구를 정의하고 granite-3-2b-instruct foundation model 어떤 도구를 사용할지 묻습니다.
Granite 모델은 요청과 함께 시스템 프롬프트를 제공하면 도구를 더 잘 호출할 수 있습니다. 다음과 같은 시스템 프롬프트가 사용됩니다:
귀하는 다음 함수 호출에 액세스할 수 있는 유용한 도우미입니다. 여러분의 임무는 사용자 발화에 대한 응답을 생성하는 데 필요한 함수 호출 시퀀스를 생성하는 것입니다. 필요에 따라 다음 함수 호출을 사용합니다. 도구 호출 출력은 다음 JSON 형식을 따라야 합니다: <|tool_call|>[{"name":func_name1", "arguments": {"argument1": "value1", "argument2": "value2"},... (필요에 따라 더 많은 도구 호출)]. 함수 호출이 필요하지 않은 경우 사용자 메시지에 직접 답장하세요.
다음 예제에서는 ' {url}
변수를 ' us-south.ml.cloud.ibm.com
와 같이 인스턴스에 적합한 값으로 바꿉니다. 나만의 무기명 토큰과 프로젝트 ID를 추가하세요.
curl -X POST \
'https://{url}/ml/v1/text/chat?version=2024-10-08' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOi...'
요청 본문에는 다음 JSON 스니펫이 포함됩니다:
{
"model_id": "ibm/granite-3-2b-instruct",
"project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
"messages": [
{
"role":"system",
"content":[
{
"type":"text",
"text":"<|start_of_role|>system<|end_of_role|>You are a helpful assistant with access to the following function calls. Your task is to produce a sequence of function calls necessary to generate response to the user utterance. Use the following function calls as required. The tool calling output MUST adhere to the following JSON format: <|tool_call|>[{\"name\": \"func_name1\", \"arguments\": {\"argument1\": \"value1\", \"argument2\": \"value2\"}},... (more tool calls as required)]. If no function call is needed, please directly reply to the user message.<|end_of_text|>"
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is 2 plus 4?"
}
]
}
],
"tools": [
{
"type": "function",
"function": {
"name": "add",
"description": "Adds the values a and b to get a sum.",
"parameters": {
"type": "object",
"properties": {
"a": {
"description": "A number value",
"type": "float"
},
"b": {
"description": "A number value",
"type": "float"
}
},
"required": [
"a",
"b"
]
}
}
},
{
"type": "function",
"function": {
"name": "multiply",
"description": "Multiplies the values a and b.",
"parameters": {
"type": "object",
"properties": {
"a": {
"description": "A number value",
"type": "float"
},
"b": {
"description": "A number value",
"type": "float"
}
},
"required": [
"a",
"b"
]
}
}
}
],
"tool_choice_option": "auto",
"max_tokens": 300,
"time_limit": 10000
}
granite-3-2b-instruct foundation model 쿼리에 답할 수 있는 올바른 도구를 선택할 수 있습니다.
응답은 다음과 같습니다:
{
"id": "chat-9eb3284f12c94256a3271180bdf6b6d2",
"model_id": "ibm/granite-3-2b-instruct",
"model": "ibm/granite-3-2b-instruct",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"tool_calls": [
{
"id": "chatcmpl-tool-6cd1758c5caf4f058c63188a7c7b78fb",
"type": "function",
"function": {
"name": "add",
"arguments": "{\"a\": 2, \"b\": 4}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"created": 1733504510,
"model_version": "1.0.0",
"created_at": "2024-12-06T17:01:50.321Z",
"usage": {
"completion_tokens": 23,
"prompt_tokens": 383,
"total_tokens": 406
}
}
자세히 알아보기
상위 주제: 코딩 제너레이티브 AI 솔루션