網頁

2026/6/22

LangChain 使用Agent物件

LangChain除了直接使用語言模型,也可以使用Agent進行問答。


事前要求

LangChain 使用語言模型物件


範例

main.py內容如下。

main.py

from langchain.agents import create_agent
from langchain.messages import HumanMessage
from pprint import pprint
from dotenv import load_dotenv

# 載入.env設定
load_dotenv()

# 建立一個Agent物件
agent = create_agent(model="claude-sonnet-4-6")

# 輸入提示詞
response = agent.invoke(
    {"messages": [HumanMessage(content="say 'hello world' only")]}
)

# 印出回應訊息
pprint(response)
# 印出回應物件
print(response['messages'][-1].content)

github


這裡使用create_agent來建立agent物件(CompiledStateGraph),輸入參數model指定要使用的語言模型(Models)。

呼叫agent的invoke函式並傳入提示詞,使用HumanMessage包裝。


測試

在專案根目錄下cmd執行uv run main.py結果如下。

C:\..\langchain-demo>uv run main.py
{'messages': [HumanMessage(content="say 'hello world' only", additional_kwargs={}, response_metadata={}, id='6f7fc773-e544-4413-8ea1-7ec4424810b9'),
              AIMessage(content='hello world', additional_kwargs={}, response_metadata={'id': 'msg_017Z3dS6anXwhE992v5KP9VC', 'container': None, 'model': 'claude-sonnet-4-6', 'stop_details': None, 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'cache_creation': {'ephemeral_1h_input_tokens': 0, 'ephemeral_5m_input_tokens': 0}, 'cache_creation_input_tokens': 0, 'cache_read_input_tokens': 0, 'inference_geo': 'global', 'input_tokens': 14, 'output_tokens': 5, 'output_tokens_details': None, 'server_tool_use': None, 'service_tier': 'standard'}, 'model_name': 'claude-sonnet-4-6', 'model_provider': 'anthropic'}, id='lc_run--019eee56-187d-7a00-a2eb-a4414aafdfe4-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 14, 'output_tokens': 5, 'total_tokens': 19, 'input_token_details': {'cache_read': 0, 'cache_creation': 0, 'ephemeral_5m_input_tokens': 0, 'ephemeral_1h_input_tokens': 0}})]}
hello world

下面為pprint(response)排版後的內容,可以看到整個Agent的執行訊息鍊,即為Chain。首先第一個訊息為我們送出的HumanMessage訊息,然後第二則為模型回應的AIMessage

{
    "messages": [
        HumanMessage(
            content="say 'hello world' only",
            additional_kwargs={},
            response_metadata={},
            id="6f7fc773-e544-4413-8ea1-7ec4424810b9",
        ),
        AIMessage(
            content="hello world",
            additional_kwargs={},
            response_metadata={
                "id": "msg_017Z3dS6anXwhE992v5KP9VC",
                "container": None,
                "model": "claude-sonnet-4-6",
                "stop_details": None,
                "stop_reason": "end_turn",
                "stop_sequence": None,
                "usage": {
                    "cache_creation": {
                        "ephemeral_1h_input_tokens": 0,
                        "ephemeral_5m_input_tokens": 0,
                    },
                    "cache_creation_input_tokens": 0,
                    "cache_read_input_tokens": 0,
                    "inference_geo": "global",
                    "input_tokens": 14,
                    "output_tokens": 5,
                    "output_tokens_details": None,
                    "server_tool_use": None,
                    "service_tier": "standard",
                },
                "model_name": "claude-sonnet-4-6",
                "model_provider": "anthropic",
            },
            id="lc_run--019eee56-187d-7a00-a2eb-a4414aafdfe4-0",
            tool_calls=[],
            invalid_tool_calls=[],
            usage_metadata={
                "input_tokens": 14,
                "output_tokens": 5,
                "total_tokens": 19,
                "input_token_details": {
                    "cache_read": 0,
                    "cache_creation": 0,
                    "ephemeral_5m_input_tokens": 0,
                    "ephemeral_1h_input_tokens": 0,
                },
            },
        ),
    ]
}


沒有留言:

張貼留言