LangChain除了直接使用語言模型,也可以使用Agent進行問答。
事前要求
範例
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)
這裡使用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,
},
},
),
]
}
沒有留言:
張貼留言