토니의 연습장
Agent 주요기능 본문
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)

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 구현)
'언어 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 |
