AI Agent
AI 에이전트는 사람의 개입 없이 특정 작업을 수행하는 자율 지능형 시스템
TOOL
AI Agent가 사용하게 되는 도구 Ex) 날씨 API, google 캘린더 API 등
Python을 사용한 AI Agent
1. 툴 작성
2. 툴 선택을 위한 prompt 작성
3. 툴 선택 prompt를 사용 llm 결과 반환
4. 툴의 사용
5. 4번의 결과로 답변 llm 생성
1. 툴 작성
# 입력 받는 타입으 str, 그 외 값을 받는가면 str로 casting
def add_too(input_str : str) -> str:
try:
arr = list(input_str.split())
return str(sum(arr))
except Exception as e:
return f"에러: {str(e)}"
2. 툴 선택을 위한 Prompt 작성
# 일반대화와 두 수를 더하는 2가지의 TOOL 정의
TOOL_PROMPT_DISC="""
당신은 다음 도구를 사용할 수 있습니다:
도구 이름: AddTool
기능: 두 숫자를 더합니다.
입력 예시: "3 5"
도구 이름: ChatTool
기능: 일반적인 질문이나 대화에 답변합니다. 계산, 검색, 도구 실행이 필요하지 않은 경우 사용하세요.
입력 예시: "오늘 기분이 어때?" 또는 "AI는 어떻게 작동해?"
사용자가 질문하면, 어떤 도구를 사용할지 판단하고 다음 형식으로 대답하세요:
사용할 도구: <도구 이름>
입력값: <도구에 줄 입력값>
사용자의 질문: "{question}"
"""
3. 툴 선택 Prompt를 사용한 LLM 결과 출력
from langchain_community.chat_models import ChatOpenAI
api_key = 'api_key'
model = 'gpt-4o-mini'
llm = ChatOpenAI(api_key=api_key, model=model)
query = "3더하기 5의 값은 뭐지?"
TOOL_PROMPT = TOOL_PROMPT_DISC.format(question=query)
TOOL_RESULT = llm.invoke(TOOL_PROMPT)
4. 툴의 사용
import re
match = re.search(r"사용할 도구:\s*(\w+)\s*입력값:\s*[\"']?(.+?)[\"']?$", TOOL_RESULT.content.strip(), re.DOTALL)
tool = match.group(1)
tool_input = match.group(2)
print(tool)
print(tool_input)
if tool == 'AddTool':
tool_result = add_tool(tool_input)
print(tool_result)
elif tool == 'ChatTool':
llm.invoke(tool_input)
5. 툴의 결과로 답변생성
import re
match = re.search(r"사용할 도구:\s*(\w+)\s*입력값:\s*[\"']?(.+?)[\"']?$", TOOL_RESULT.content.strip(), re.DOTALL)
tool = match.group(1)
tool_input = match.group(2)
print(tool)
print(tool_input)
if tool == 'AddTool':
tool_result = add_tool(tool_input)
print(tool_result)
FINAL_PROMPT_DISC = """
사용자의 질문: "{question}"
도구 실행 결과: {result}
이제 사용자에게 자연어로 대답하세요.
"""
FINAL_PROMPT = FINAL_PROMPT_DISC.format(question = query, result=tool_result)
print(llm.invoke(FINAL_PROMPT))
elif tool == 'ChatTool':
llm.invoke(tool_input)
.py로 만든 파일
from langchain_community.chat_models import ChatOpenAI
import re
api_key = ''
model = 'gpt-4o-mini'
llm = ChatOpenAI(api_key=api_key, model=model)
######## prompt
# 도구 선택 프롬프트
tool_prompt_disc="""
당신은 다음 도구를 사용할 수 있습니다:
도구 이름: AddTool
기능: 두 숫자를 더합니다.
입력 예시: "3 5"
도구 이름: ChatTool
기능: 일반적인 질문이나 대화에 답변합니다. 계산, 검색, 도구 실행이 필요하지 않은 경우 사용하세요.
입력 예시: "오늘 기분이 어때?" 또는 "AI는 어떻게 작동해?"
사용자가 질문하면, 어떤 도구를 사용할지 판단하고 다음 형식으로 대답하세요:
사용할 도구: <도구 이름>
입력값: <도구에 줄 입력값>
사용자의 질문: "{question}"
"""
final_prompt_disc="""
사용자의 질문: "{question}"
도구 실행 결과: {result}
이제 사용자에게 자연어로 대답하세요.
"""
########
def add_tool(input_str : str) -> str:
try:
arr = list(map(int, input_str.split()))
return str(sum(arr))
except Exception as e:
return f"에러: {str(e)}"
def run_agent(query: str):
tool_prompt = tool_prompt_disc.format(question=query)
tool_result = llm.invoke(tool_prompt)
match = re.search(r"사용할 도구:\s*(\w+)\s*입력값:\s*[\"']?(.+?)[\"']?$", tool_result.content.strip(), re.DOTALL)
tool = match.group(1)
tool_input = match.group(2)
print(tool_result.content)
if tool == "AddTool":
add_result = add_tool(tool_input)
final_prompt = final_prompt_disc.format(question = query, result=add_result)
return llm.invoke(final_prompt).content
elif tool == "ChatTool":
final_prompt = final_prompt_disc.format(question = query, result=tool_input)
return llm.invoke(final_prompt).content
if __name__ == '__main__':
query="3 더하기 5는 ?"
# query="오늘 저녁메뉴는 뭘 먹는게 좋을까?
print("사용자 질문 :", query)
result = run_agent(query)
print("llm 답변: ",result)
https://github.com/Kmmanki/RAG_inflearn/blob/main/Codes/2-1AI_Agent_python.ipynb
RAG_inflearn/Codes/2-1AI_Agent_python.ipynb at main · Kmmanki/RAG_inflearn
인프런 RAG를 활용한 LLM Application. Contribute to Kmmanki/RAG_inflearn development by creating an account on GitHub.
github.com
'AI????, LLM???' 카테고리의 다른 글
Langchain의 AgentType (2) | 2025.05.09 |
---|---|
AI Agent와 Tool 2 (langchain을 사용한) (0) | 2025.04.15 |
LangChain을 사용한 RAG 구성 1 (0) | 2025.04.15 |