토니의 연습장

Agent 주요기능 본문

언어 AI (NLP)/LLM & RAG & Agent

Agent 주요기능

bellmake 2025. 11. 19. 15:44

 

1. Agent, AgentExecutor

from langchain_core.prompts import ChatPromptTemplate

# 프롬프트 생성
# 프롬프트는 에이전트에게 모델이 수행할 작업을 설명하는 텍스트를 제공합니다. (도구의 이름과 역할을 입력)
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are a helpful assistant. "
            "Make sure to use the `search_news` tool for searching keyword related news.",
        ),
        ("placeholder", "{chat_history}"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"),
    ]
)

 

chat_history : multi-turn 위함

agent_scratchpad : agent 수행 과정 저장 위함

 

from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent

# LLM 정의
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# Agent 생성
agent = create_tool_calling_agent(llm, tools, prompt)

 

Agent 를 적절히 통제하기 위한 AgentExecutor 사용

 

 

AgentExecutor 예시1)

from langchain.agents import AgentExecutor

# AgentExecutor 생성
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,
    max_iterations=10,
    max_execution_time=10,
    handle_parsing_errors=True,
)

# AgentExecutor 실행
result = agent_executor.invoke({"input": "AI 투자와 관련된 뉴스를 검색해 주세요."})

print("Agent 실행 결과:")
print(result["output"])

 

# 스트리밍 모드 실행
result = agent_executor.stream({"input": "AI 투자와 관련된 뉴스를 검색해 주세요."}) 

for step in result:
    # 중간 단계 출력
    print(step)

 

"====" 표시 까지가 첫 번째 단계

 

 

*LLM chain (ex. 기존의 Langchain/Langraph 이용 구조에 bind_tools 붙인 경우) 사용시 중간에 에러 발생시 멈추게 되지만, agent 를 사용하면 에러 발생해도 다시 thought -> Action -> Observation 의 루프를 돌며 이어서 수행하여 결과 도출 가능함

 

 

AgentExecutor 예시2)

# 질의에 대한 답변을 스트리밍으로 출력 요청
result = agent_executor.stream(
    {"input": "matplotlib 을 사용하여 pie 차트를 그리는 코드를 작성하고 실행하세요."}
)

for step in result:
    # 중간 단계를 parser 를 사용하여 단계별로 출력
    agent_stream_parser.process_agent_steps(step)

 

output : 

[도구 호출]
Tool: python_repl_tool
code: import matplotlib.pyplot as plt

# 데이터
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']

# 파이 차트 그리기
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
plt.title('Pie Chart Example')
plt.show()
Log: 
Invoking: `python_repl_tool` with `{'code': "import matplotlib.pyplot as plt\n\n# 데이터\nsizes = [15, 30, 45, 10]\nlabels = ['A', 'B', 'C', 'D']\ncolors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']\n\n# 파이 차트 그리기\nplt.figure(figsize=(8, 6))\nplt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)\nplt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.\nplt.title('Pie Chart Example')\nplt.show()"}`



[관찰 내용]
Observation: 
[최종 답변]
파이 차트가 성공적으로 그려졌습니다. 차트에는 A, B, C, D의 네 가지 카테고리가 포함되어 있으며, 각 카테고리의 비율이 표시되어 있습니다. 추가적인 질문이나 요청이 있으시면 말씀해 주세요!

 

 

2. Agent 중간단계 스트리밍 (stream), AgentStreamParser

 

callback 수정 사용 방법

# AgentCallbacks와 AgentStreamParser를 langchain_teddynote.messages에서 가져옵니다.
from langchain_teddynote.messages import AgentCallbacks, AgentStreamParser


# 도구 호출 시 실행되는 콜백 함수입니다.
def tool_callback(tool) -> None:
    print("<<<<<<< 도구 호출 >>>>>>")
    print(f"Tool: {tool.get('tool')}")  # 사용된 도구의 이름을 출력합니다.
    print("<<<<<<< 도구 호출 >>>>>>")


# 관찰 결과를 출력하는 콜백 함수입니다.
def observation_callback(observation) -> None:
    print("<<<<<<< 관찰 내용 >>>>>>")
    print(
        f"Observation: {observation.get('observation')[0]}"
    )  # 관찰 내용을 출력합니다.
    print("<<<<<<< 관찰 내용 >>>>>>")


# 최종 결과를 출력하는 콜백 함수입니다.
def result_callback(result: str) -> None:
    print("<<<<<<< 최종 답변 >>>>>>")
    print(result)  # 최종 답변을 출력합니다.
    print("<<<<<<< 최종 답변 >>>>>>")


# AgentCallbacks 객체를 생성하여 각 단계별 콜백 함수를 설정합니다.
agent_callbacks = AgentCallbacks(
    tool_callback=tool_callback,
    observation_callback=observation_callback,
    result_callback=result_callback,
)

# AgentStreamParser 객체를 생성하여 에이전트의 실행 과정을 파싱합니다.
agent_stream_parser = AgentStreamParser(agent_callbacks)
# 질의에 대한 답변을 스트리밍으로 출력 요청
result = agent_executor.stream({"input": "AI 투자관련 뉴스를 검색해 주세요."})

for step in result:
    # 중간 단계를 parser 를 사용하여 단계별로 출력
    agent_stream_parser.process_agent_steps(step)
<<<<<<< 도구 호출 >>>>>>
Tool: search_news
<<<<<<< 도구 호출 >>>>>>
<<<<<<< 관찰 내용 >>>>>>
Observation: {'url': 'https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5', 'content': 'AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문'}
<<<<<<< 관찰 내용 >>>>>>
<<<<<<< 최종 답변 >>>>>>
다음은 AI 투자와 관련된 최근 뉴스 기사들입니다:

1. [AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문](https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5)

2. [글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스](https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5)

3. [MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스](https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5)

4. [MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5)

5. [“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈](https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5)

이 기사들은 AI 투자에 대한 다양한 관점과 최근 동향을 다루고 있습니다.
<<<<<<< 최종 답변 >>>>>>

 

 

3. Agent  메모리 추가 (multi-turn 구현)

 

 

 

 


참고 : https://wikidocs.net/262586

'언어 AI (NLP) > LLM & RAG & Agent' 카테고리의 다른 글

Reranker  (0) 2025.11.06
generation function example  (0) 2025.09.23
Scaling - file formats  (0) 2025.09.18
고성능 RAG 테크닉  (0) 2025.09.09
AWS - Lambda / API Gateway / Bedrock  (0) 2025.09.04