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들이 무엇이 있는지 확인하고 테스트 해보기

+ Recent posts