Langchain의 agents를 사용하면 보다 간단히 agnet를 만들 수 있다.
1. Tool 및 llm 정의
from langchain.agents import Tool
from langchain.agents.agent_types import AgentType
def add_tool(input_str : str) -> str:
# print(input_str)
try:
arr = list(map(int, input_str.split()))
return str(sum(arr))
except Exception as e:
return f"에러: {str(e)}"
def chat_tool(input_st: str):
return llm.invoke(input_st)
api_key = ''
model = 'gpt-4o-mini'
llm = ChatOpenAI(api_key=api_key, model=model)
# description은 툴의 설명을 적으며 어떤 상황에서 툴을 사용하게 될지, 입력은 어떻게 정의할지 작성한다.
# func는 해당 툴을 사용할 때 어떤 함수를 사용할지 정의한다.
tools = [
Tool( name= 'AddTool', func=add_tool, description="두 숫자를 더합니다. 입력은 두 숫자를 공백으로 구분한 문자열로 입력합니다. 입력 형식: '3 5'"),
Tool( name= 'ChatTool', func=chat_tool
, description="일반적인 질문이나 대화에 답변합니다. 계산, 검색, 도구 실행이 필요하지 않은 경우 사용하세요. 입력 예시: '오늘 기분이 어때?' 또는 'AI는 어떻게 작동해?'")
]
2. agent 작성
from langchain_community.chat_models import ChatOpenAI
from langchain.agents import initialize_agent
# llm 기반의 agent트 생성
# agentType은 분류되지 않은 추론형
# verbose agent의 동작 과정 확인
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
Agent 타입에 대한 설명
https://api.python.langchain.com/en/latest/agents/langchain.agents.agent_types.AgentType.html
3. agent 실행
response = agent.run("3하고 7을 더해줘.")
print(response)
결과
툴을 잘 선택했지만 input Type에 대한 에러가 발생했다.
확인해보니 "'3 5'" 와 같이 입력이 들어가서 description을 수정해주니 정상 동작했다.
before : .....입력 형식: '3 5'"
after : 입력 형식: 3 5"
또한 아래와 같이 Exception 발생 시 Exception을 추론하여 재시도하며 이후 마지막에는 다른 Tool(ChatTool)을 사용하여 결과를 만들어내는 것을 확인 할 수 있다.
> Entering new AgentExecutor chain...
3하고 7을 더하는 계산이 필요하다.
Action: AddTool
Action Input: '3 7'
Observation: 에러: invalid literal for int() with base 10: "'3"
Thought:입력 형식이 잘못된 것 같다. 숫자들에 불필요한 따옴표가 포함되어 있는 것 같다. 따옴표 없이 다시 시도해 보아야겠다.
Action: AddTool
Action Input: '3 7'
Observation: 에러: invalid literal for int() with base 10: "'3"
Thought:입력 형식이 여전히 잘못된 것 같다. 따옴표가 여전히 포함되어 있는 것 같지 않지만, 정확한 문제는 확인해봐야겠다.
Action: AddTool
Action Input: '3 7'
Observation: 에러: invalid literal for int() with base 10: "'3"
Thought:입력 형식에 문제가 있는 것 같다. 두 숫자를 더하는 방법을 다시 살펴봐야겠다.
Action: AddTool
Action Input: '3 7'
Observation: 에러: invalid literal for int() with base 10: "'3"
Thought:입력 형식에 문제가 발생하고 있다. 숫자를 더하기 위해 입력을 정확하게 조정해야 할 것 같다.
Action: AddTool
Action Input: '3 7'
Observation: 에러: invalid literal for int() with base 10: "'3"
Thought:입력 형식이 계속해서 잘못된 결과를 초래하고 있다. 문제를 해결하기 위해 입력을 다시 확인하고 수정해야 할 것 같다.
Action: AddTool
Action Input: '3 7'
Observation: 에러: invalid literal for int() with base 10: "'3"
Thought:입력 형식에 문제가 발생하고 있는 것 같다. 계속해서 같은 오류가 발생하고 있으므로, 다른 방법을 통해 질문에 답변해야 할 것 같다.
Action: ChatTool
Action Input: '3하고 7을 더해줘.'
Observation: content='3과 7을 더하면 10입니다.' additional_kwargs={} response_metadata={'token_usage': {'completion_tokens': 12, 'prompt_tokens': 17, 'total_tokens': 29, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini', 'system_fingerprint': 'fp_80cf447eee', 'finish_reason': 'stop', 'logprobs': None} id='run-3c1360fb-0f39-4f8c-9932-95fe87de0518-0'
Thought:I now know the final answer.
Final Answer: 3과 7을 더하면 10입니다.
> Finished chain.
3과 7을 더하면 10입니다.
https://github.com/Kmmanki/RAG_inflearn/blob/main/Codes/2-3AI_Agent_langchain.ipynb
RAG_inflearn/Codes/2-3AI_Agent_langchain.ipynb at main · Kmmanki/RAG_inflearn
인프런 RAG를 활용한 LLM Application. Contribute to Kmmanki/RAG_inflearn development by creating an account on GitHub.
github.com
todo:
- Agent들의 타입과 동작 방식 찾아보기
- 제공하고 있는 통합 Tool들이 무엇이 있는지 확인하고 테스트 해보기
'AI????, LLM???' 카테고리의 다른 글
AI Agent와 Tool 1 (Python을 사용한 간단한 AI Agnet 만들기) (0) | 2025.04.15 |
---|---|
LangChain을 사용한 RAG 구성 1 (0) | 2025.04.15 |