iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
生成式 AI

LLM與生成式AI筆記系列 第 19

Day 18: langchain 由入門到熟練(建立 Agent-使用Open AI -API)

  • 分享至 

  • xImage
  •  

前言:

這一天是使用langgraph 調用工具(使用搜索)以及記憶的功能。

另外這個也是langgraph教學中的一個例子,有興趣的可以去找找。


LLM本身無法採取行動,它們只能輸出文本。LangChain 的一個重要用例是創建代理。代理是使用 LLM 作為推理引擎來決定要採取哪些行動以及向其傳遞什麼輸入的系統。執行操作後,結果可以反饋回 LLM,以確定是否需要更多操作,或者是否可以結束。

在本教學中,我們將構建一個可以與搜尋引擎互動的代理。您將能夠向此代理提出問題,觀察它調用搜尋工具,並與之進行對話。

端到端代理
下面的程式碼片段代表了一個功能齊全的代理,它使用 LLM 來決定使用哪些工具。它配備了一個通用搜尋工具,並具有對話記憶功能——這意味著它可以用作多輪聊天機器人。

在本指南的其餘部分,我們將詳細介紹各個組件及其作用——但如果您只想獲取一些程式碼並開始使用,請隨意使用此程式碼!

# Import relevant functionality
from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import HumanMessage
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent

# Create the agent
memory = MemorySaver()
model = ChatAnthropic(model_name="claude-3-sonnet-20240229")
search = TavilySearchResults(max_results=2)
tools = [search]
agent_executor = create_react_agent(model, tools, checkpointer=memory)

# Use the agent
config = {"configurable": {"thread_id": "abc123"}}
for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="hi im bob! and i live in sf")]}, config
):
    print(chunk)
    print("----")

for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="whats the weather where I live?")]}, config
):
    print(chunk)
    print("----")
%pip install -U langchain-community langgraph langchain-anthropic tavily-python langgraph-checkpoint-sqlite langchain-openai
import getpass
import os
from langchain_openai import ChatOpenAI
from anthropic import Anthropic

os.environ["LANGCHAIN_TRACING_V2"] = "true"
# 替換為你的LANGCHAIN_API_KEY
os.environ["LANGCHAIN_API_KEY"] = "替換為你的LANGCHAIN_API_KEY"

os.environ["OPENAI_API_KEY"] = "替換為你的OPENAI_API_KEY"

os.environ["TAVILY_API_KEY"] ="替換為你的TAVILY_API_KEY"

定義工具
首先,我們需要創建我們想要使用的工具。我們的主要工具選擇將是 Tavily —— 一個搜尋引擎。LangChain 內建了一個工具,可以輕鬆地將 Tavily 搜尋引擎作為工具使用。

from langchain_community.tools.tavily_search import TavilySearchResults

search = TavilySearchResults(max_results=2)
search_results = search.invoke("what is the weather in SF")
print(search_results)
# If we want, we can create other tools.
# Once we have all the tools we want, we can put them in a list that we will reference later.
tools = [search]
[{'url': 'https://www.weatherapi.com/', 'content': "{'location': {'name': 'San Francisco', 'region': 'California', 'country': 'United States of America', 'lat': 37.78, 'lon': -122.42, 'tz_id': 'America/Los_Angeles', 'localtime_epoch': 1724075718, 'localtime': '2024-08-19 06:55'}, 'current': {'last_updated_epoch': 1724075100, 'last_updated': '2024-08-19 06:45', 'temp_c': 15.2, 'temp_f': 59.4, 'is_day': 1, 'condition': {'text': 'Partly cloudy', 'icon': '//cdn.weatherapi.com/weather/64x64/day/116.png', 'code': 1003}, 'wind_mph': 2.2, 'wind_kph': 3.6, 'wind_degree': 10, 'wind_dir': 'N', 'pressure_mb': 1017.0, 'pressure_in': 30.02, 'precip_mm': 0.0, 'precip_in': 0.0, 'humidity': 96, 'cloud': 75, 'feelslike_c': 15.2, 'feelslike_f': 59.4, 'windchill_c': 11.9, 'windchill_f': 53.5, 'heatindex_c': 12.4, 'heatindex_f': 54.4, 'dewpoint_c': 11.2, 'dewpoint_f': 52.2, 'vis_km': 16.0, 'vis_miles': 9.0, 'uv': 1.0, 'gust_mph': 7.6, 'gust_kph': 12.2}}"}, {'url': 'https://www.weathertab.com/en/c/e/08/united-states/california/san-francisco/', 'content': 'Avg Low Temps 50 to 60 °F. Explore comprehensive August 2024 weather forecasts for San Francisco, including daily high and low temperatures, precipitation risks, and monthly temperature trends. Featuring detailed day-by-day forecasts, dynamic graphs of daily rain probabilities, and temperature trends to help you plan ahead.'}]

API Reference:TavilySearchResults

您可以通過傳入一個消息列表來調用語言模型。默認情況下,響應是一個 content 字串。

from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4")
response = model.invoke([HumanMessage(content="hi!")])
response.content
'Hello! How can I assist you today?'

API Reference:HumanMessage

現在,我們可以看看如何讓這個模型能夠進行工具調用。為了實現這一點,我們使用 .bind_tools 方法讓語言模型了解這些工具。

model_with_tools = model.bind_tools(tools)

現在我們可以調用模型了。讓我們首先用一個普通的訊息來調用它,看看它是如何響應的。我們可以查看 content 字段以及 tool_calls 字段。

response = model_with_tools.invoke([HumanMessage(content="Hi!")])

print(f"ContentString: {response.content}")
print(f"ToolCalls: {response.tool_calls}")
ContentString: Hello! How can I assist you today?
ToolCalls: []

現在,讓我們嘗試用一些預計會調用工具的輸入來調用它。

response = model_with_tools.invoke([HumanMessage(content="What's the weather in SF?")])

print(f"ContentString: {response.content}")
print(f"ToolCalls: {response.tool_calls}")
ContentString: Sorry, I'm a text-based assistant and currently don't have access to real-time weather data. You can check the weather in San Francisco by using a weather forecasting service or app like the Weather Channel, BBC Weather, or your phone's built-in weather app.
ToolCalls: []

我們可以看到現在沒有文本內容,但有一個工具調用!它希望我們調用 Tavily Search 工具。

這還沒有真正調用該工具 - 它只是告訴我們這樣做。為了實際調用它,我們需要創建我們的代理。

創建代理

現在我們已經定義了工具和 LLM,我們可以創建代理了。我們將使用 LangGraph 來構建代理。目前,我們正在使用高級接口來構建代理,但 LangGraph 的優點是,這個高級接口背後有一個低級、高度可控的 API,以防您想修改代理邏輯。

現在,我們可以使用 LLM 和工具來初始化代理。

請注意,我們傳入的是 model,而不是 model_with_tools。這是因為 create_react_agent 會在內部為我們調用 .bind_tools 方法。

from langgraph.prebuilt import create_react_agent

agent_executor = create_react_agent(model, tools)

運行代理(Agent)

現在我們可以在一些查詢上運行代理了!請注意,目前這些都是無狀態查詢(它不會記住之前的交互)。請注意,代理將在交互結束時返回最終狀態(其中包括任何輸入,我們稍後將看到如何僅獲取輸出)。

首先,讓我們看看當不需要調用工具時它是如何響應的:

response = agent_executor.invoke({"messages": [HumanMessage(content="hi!")]})

response["messages"]
[HumanMessage(content='hi!', id='1adcdfa0-2300-4a85-bf40-cdb7e9f56f78'),
 AIMessage(content='Hello! How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 83, 'total_tokens': 93}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-cd7cc3fc-fb6e-4099-a714-48c3fb265d91-0', usage_metadata={'input_tokens': 83, 'output_tokens': 10, 'total_tokens': 93})]

為了確切了解幕後發生了什麼(並確保它沒有調用工具),我們可以查看 LangSmith 的追蹤記錄

現在讓我們嘗試一個它應該會調用工具的例子。

response = agent_executor.invoke(
    {"messages": [HumanMessage(content="whats the weather in sf?")]}
)
response["messages"]
[HumanMessage(content='whats the weather in sf?', id='c949efa1-c511-4683-9044-466af1f936e2'),
 AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_g0cGcR3iX0sQ2uKN3agjKjY0', 'function': {'arguments': '{\n  "query": "current weather in San Francisco"\n}', 'name': 'tavily_search_results_json'}, 'type': 'function'}], 'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 23, 'prompt_tokens': 88, 'total_tokens': 111}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-b15d6b87-079f-4ba6-a691-703e4a339150-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': 'current weather in San Francisco'}, 'id': 'call_g0cGcR3iX0sQ2uKN3agjKjY0', 'type': 'tool_call'}], usage_metadata={'input_tokens': 88, 'output_tokens': 23, 'total_tokens': 111}),
 ToolMessage(content='[{"url": "https://www.weatherapi.com/", "content": "{\'location\': {\'name\': \'San Francisco\', \'region\': \'California\', \'country\': \'United States of America\', \'lat\': 37.78, \'lon\': -122.42, \'tz_id\': \'America/Los_Angeles\', \'localtime_epoch\': 1724075718, \'localtime\': \'2024-08-19 06:55\'}, \'current\': {\'last_updated_epoch\': 1724075100, \'last_updated\': \'2024-08-19 06:45\', \'temp_c\': 15.2, \'temp_f\': 59.4, \'is_day\': 1, \'condition\': {\'text\': \'Partly cloudy\', \'icon\': \'//cdn.weatherapi.com/weather/64x64/day/116.png\', \'code\': 1003}, \'wind_mph\': 2.2, \'wind_kph\': 3.6, \'wind_degree\': 10, \'wind_dir\': \'N\', \'pressure_mb\': 1017.0, \'pressure_in\': 30.02, \'precip_mm\': 0.0, \'precip_in\': 0.0, \'humidity\': 96, \'cloud\': 75, \'feelslike_c\': 15.2, \'feelslike_f\': 59.4, \'windchill_c\': 11.9, \'windchill_f\': 53.5, \'heatindex_c\': 12.4, \'heatindex_f\': 54.4, \'dewpoint_c\': 11.2, \'dewpoint_f\': 52.2, \'vis_km\': 16.0, \'vis_miles\': 9.0, \'uv\': 1.0, \'gust_mph\': 7.6, \'gust_kph\': 12.2}}"}, {"url": "https://www.timeanddate.com/weather/@z-us-94110/hourly", "content": "Sun & Moon. Weather Today Weather Hourly 14 Day Forecast Yesterday/Past Weather Climate (Averages) Currently: 71 \\u00b0F. Broken clouds. (Weather station: San Francisco International Airport, USA). See more current weather."}]', name='tavily_search_results_json', id='3aacff9f-10f9-42d2-b015-50dabeed6a36', tool_call_id='call_g0cGcR3iX0sQ2uKN3agjKjY0', artifact={'query': 'current weather in San Francisco', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'title': 'Weather in San Francisco', 'url': 'https://www.weatherapi.com/', 'content': "{'location': {'name': 'San Francisco', 'region': 'California', 'country': 'United States of America', 'lat': 37.78, 'lon': -122.42, 'tz_id': 'America/Los_Angeles', 'localtime_epoch': 1724075718, 'localtime': '2024-08-19 06:55'}, 'current': {'last_updated_epoch': 1724075100, 'last_updated': '2024-08-19 06:45', 'temp_c': 15.2, 'temp_f': 59.4, 'is_day': 1, 'condition': {'text': 'Partly cloudy', 'icon': '//cdn.weatherapi.com/weather/64x64/day/116.png', 'code': 1003}, 'wind_mph': 2.2, 'wind_kph': 3.6, 'wind_degree': 10, 'wind_dir': 'N', 'pressure_mb': 1017.0, 'pressure_in': 30.02, 'precip_mm': 0.0, 'precip_in': 0.0, 'humidity': 96, 'cloud': 75, 'feelslike_c': 15.2, 'feelslike_f': 59.4, 'windchill_c': 11.9, 'windchill_f': 53.5, 'heatindex_c': 12.4, 'heatindex_f': 54.4, 'dewpoint_c': 11.2, 'dewpoint_f': 52.2, 'vis_km': 16.0, 'vis_miles': 9.0, 'uv': 1.0, 'gust_mph': 7.6, 'gust_kph': 12.2}}", 'score': 0.9789612, 'raw_content': None}, {'title': 'Hourly forecast for San Francisco, USA - timeanddate.com', 'url': 'https://www.timeanddate.com/weather/@z-us-94110/hourly', 'content': 'Sun & Moon. Weather Today Weather Hourly 14 Day Forecast Yesterday/Past Weather Climate (Averages) Currently: 71 °F. Broken clouds. (Weather station: San Francisco International Airport, USA). See more current weather.', 'score': 0.9382373, 'raw_content': None}], 'response_time': 3.07}),
 AIMessage(content='The current weather in San Francisco, California is partly cloudy with a temperature of 15.2°C (59.4°F). The wind is blowing from the north at a speed of 3.6 km/h (2.2 mph). The humidity level is high, at 96%. [Source](https://www.weatherapi.com/)\n', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 70, 'prompt_tokens': 607, 'total_tokens': 677}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-63337b80-5ae6-4f56-9420-8d219463569e-0', usage_metadata={'input_tokens': 607, 'output_tokens': 70, 'total_tokens': 677})]

我們可以查看 LangSmith 追蹤紀錄,以確保它有效地調用了搜尋工具。

串流訊息

我們已經看到如何使用 .invoke 調用代理來獲取最終響應。如果代理正在執行多個步驟,這可能需要一段時間。為了顯示中間進度,我們可以在訊息發生時將它們串流傳輸回來。

for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="whats the weather in sf?")]}
):
    print(chunk)
    print("----")
{'agent': {'messages': [AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Hjsd39wYncqNeNia91ecuJDZ', 'function': {'arguments': '{\n  "query": "current weather in San Francisco"\n}', 'name': 'tavily_search_results_json'}, 'type': 'function'}], 'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 23, 'prompt_tokens': 88, 'total_tokens': 111}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-2325a5ad-0f54-426f-b993-471eb0d3be12-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': 'current weather in San Francisco'}, 'id': 'call_Hjsd39wYncqNeNia91ecuJDZ', 'type': 'tool_call'}], usage_metadata={'input_tokens': 88, 'output_tokens': 23, 'total_tokens': 111})]}}
----
{'tools': {'messages': [ToolMessage(content='[{"url": "https://www.weatherapi.com/", "content": "{\'location\': {\'name\': \'San Francisco\', \'region\': \'California\', \'country\': \'United States of America\', \'lat\': 37.78, \'lon\': -122.42, \'tz_id\': \'America/Los_Angeles\', \'localtime_epoch\': 1724075911, \'localtime\': \'2024-08-19 06:58\'}, \'current\': {\'last_updated_epoch\': 1724075100, \'last_updated\': \'2024-08-19 06:45\', \'temp_c\': 15.2, \'temp_f\': 59.4, \'is_day\': 1, \'condition\': {\'text\': \'Partly cloudy\', \'icon\': \'//cdn.weatherapi.com/weather/64x64/day/116.png\', \'code\': 1003}, \'wind_mph\': 2.2, \'wind_kph\': 3.6, \'wind_degree\': 10, \'wind_dir\': \'N\', \'pressure_mb\': 1017.0, \'pressure_in\': 30.02, \'precip_mm\': 0.0, \'precip_in\': 0.0, \'humidity\': 96, \'cloud\': 75, \'feelslike_c\': 15.2, \'feelslike_f\': 59.4, \'windchill_c\': 11.9, \'windchill_f\': 53.5, \'heatindex_c\': 12.4, \'heatindex_f\': 54.4, \'dewpoint_c\': 11.2, \'dewpoint_f\': 52.2, \'vis_km\': 16.0, \'vis_miles\': 9.0, \'uv\': 1.0, \'gust_mph\': 7.6, \'gust_kph\': 12.2}}"}, {"url": "https://www.weather.gov/mtr/", "content": "Current Hazards. Current Outlooks; Daily Briefing; Submit Report; Detailed Hazards; ... Sun, Aug 18, 2024 at 5:08:19 am PDT Watches, Warnings & Advisories. Zoom Out. Small Craft Advisory . Text Product Selector (Selected product opens in current window) ... National Weather Service San Francisco Bay Area, CA 21 Grace Hopper Ave, Stop 5 Monterey ..."}]', name='tavily_search_results_json', tool_call_id='call_Hjsd39wYncqNeNia91ecuJDZ', artifact={'query': 'current weather in San Francisco', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'title': 'Weather in San Francisco', 'url': 'https://www.weatherapi.com/', 'content': "{'location': {'name': 'San Francisco', 'region': 'California', 'country': 'United States of America', 'lat': 37.78, 'lon': -122.42, 'tz_id': 'America/Los_Angeles', 'localtime_epoch': 1724075911, 'localtime': '2024-08-19 06:58'}, 'current': {'last_updated_epoch': 1724075100, 'last_updated': '2024-08-19 06:45', 'temp_c': 15.2, 'temp_f': 59.4, 'is_day': 1, 'condition': {'text': 'Partly cloudy', 'icon': '//cdn.weatherapi.com/weather/64x64/day/116.png', 'code': 1003}, 'wind_mph': 2.2, 'wind_kph': 3.6, 'wind_degree': 10, 'wind_dir': 'N', 'pressure_mb': 1017.0, 'pressure_in': 30.02, 'precip_mm': 0.0, 'precip_in': 0.0, 'humidity': 96, 'cloud': 75, 'feelslike_c': 15.2, 'feelslike_f': 59.4, 'windchill_c': 11.9, 'windchill_f': 53.5, 'heatindex_c': 12.4, 'heatindex_f': 54.4, 'dewpoint_c': 11.2, 'dewpoint_f': 52.2, 'vis_km': 16.0, 'vis_miles': 9.0, 'uv': 1.0, 'gust_mph': 7.6, 'gust_kph': 12.2}}", 'score': 0.9987696, 'raw_content': None}, {'title': 'San Francisco Bay Area, CA - National Weather Service', 'url': 'https://www.weather.gov/mtr/', 'content': 'Current Hazards. Current Outlooks; Daily Briefing; Submit Report; Detailed Hazards; ... Sun, Aug 18, 2024 at 5:08:19 am PDT Watches, Warnings & Advisories. Zoom Out. Small Craft Advisory . Text Product Selector (Selected product opens in current window) ... National Weather Service San Francisco Bay Area, CA 21 Grace Hopper Ave, Stop 5 Monterey ...', 'score': 0.99796516, 'raw_content': None}], 'response_time': 3.4})]}}
----
{'agent': {'messages': [AIMessage(content='The current weather in San Francisco, California is partly cloudy with a temperature of 15.2°C (59.4°F). The wind is coming from the North at a speed of 3.6 kph (2.2 mph). The humidity is at 96%. There is also a small craft advisory in effect according to the National Weather Service. [source](https://www.weatherapi.com/) [source](https://www.weather.gov/mtr/)', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 94, 'prompt_tokens': 632, 'total_tokens': 726}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-fb8b61f6-1027-46bb-afea-c217db50ca96-0', usage_metadata={'input_tokens': 632, 'output_tokens': 94, 'total_tokens': 726})]}}
----

串流 token

除了串流傳輸回消息外,串流傳輸回 token 也很有用。我們可以使用 .astream_events 方法來做到這一點。

async for event in agent_executor.astream_events(
    {"messages": [HumanMessage(content="whats the weather in sf?")]}, version="v1"
):
    kind = event["event"]
    if kind == "on_chain_start":
        if (
            event["name"] == "Agent"
        ):  # Was assigned when creating the agent with `.with_config({"run_name": "Agent"})`
            print(
                f"Starting agent: {event['name']} with input: {event['data'].get('input')}"
            )
    elif kind == "on_chain_end":
        if (
            event["name"] == "Agent"
        ):  # Was assigned when creating the agent with `.with_config({"run_name": "Agent"})`
            print()
            print("--")
            print(
                f"Done agent: {event['name']} with output: {event['data'].get('output')['output']}"
            )
    if kind == "on_chat_model_stream":
        content = event["data"]["chunk"].content
        if content:
            # Empty content in the context of OpenAI means
            # that the model is asking for a tool to be invoked.
            # So we only print non-empty content
            print(content, end="|")
    elif kind == "on_tool_start":
        print("--")
        print(
            f"Starting tool: {event['name']} with inputs: {event['data'].get('input')}"
        )
    elif kind == "on_tool_end":
        print(f"Done tool: {event['name']}")
        print(f"Tool output was: {event['data'].get('output')}")
        print("--")
/usr/local/lib/python3.10/dist-packages/langchain_core/_api/beta_decorator.py:87: LangChainBetaWarning: This API is in beta and may change in the future.
  warn_beta(


I|'m| sorry|,| I| am| not| currently| able| to| provide| real|-time| data| such| as| weather| updates|.| Please| use| a| trusted| weather| reporting| service| for| the| most| accurate| information|.|

雖然這個狀態表示這個tool目前不能用來抓取實時天氣的資料,不過也證明了起碼交互式有建立起來的。

添加記憶功能

如前所述,此代理是無狀態的。這意味著它不記得先前的互動。為了賦予它記憶功能,我們需要傳入一個檢查點(checkpointer)。當傳入檢查點時,我們還必須在調用代理時傳入一個 thread_id(以便它知道要從哪個線程/對話恢復)。

from langgraph.checkpoint.memory import MemorySaver

memory = MemorySaver()

agent_executor = create_react_agent(model, tools, checkpointer=memory)

config = {"configurable": {"thread_id": "abc123"}}
for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="hi im bob! and i live in sf")]}, config
):
    print(chunk)
    print("----")
{'agent': {'messages': [AIMessage(content='Hi Bob! How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 11, 'prompt_tokens': 90, 'total_tokens': 101}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-438e6eac-020b-4d27-a464-c17bb086c350-0', usage_metadata={'input_tokens': 90, 'output_tokens': 11, 'total_tokens': 101})]}}
----
for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="whats my name?")]}, config
):
    print(chunk)
    print("----")
{'agent': {'messages': [AIMessage(content='Your name is Bob.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 6, 'prompt_tokens': 113, 'total_tokens': 119}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-0fa20512-9b6b-412c-8ed3-29a7a9610181-0', usage_metadata={'input_tokens': 113, 'output_tokens': 6, 'total_tokens': 119})]}}
----

如果我想開始一個新的對話,我只需更改使用的 thread_id 即可。

config = {"configurable": {"thread_id": "xyz123"}}
for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="whats my name?")]}, config
):
    print(chunk)
    print("----")
{'agent': {'messages': [AIMessage(content="As an AI, I don't have access to personal data about individuals unless it has been shared with me in the course of our conversation. I am designed to respect user privacy and confidentiality.", additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 39, 'prompt_tokens': 86, 'total_tokens': 125}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-605ec129-3f5c-4c8c-a570-1751d9037acd-0', usage_metadata={'input_tokens': 86, 'output_tokens': 39, 'total_tokens': 125})]}}
----

結語

這就是本快速入門的全部內容!在這裡,我們介紹了如何創建一個簡單的代理。然後,我們展示了如何串流傳輸回回應——不僅是中間步驟,還包括 token!我們還添加了記憶功能,讓您可以與它們進行對話。代理是一個複雜的主題,還有很多東西要學!

欲了解更多關於代理的資訊,請查看 LangGraph 文檔。它有自己的一套概念、教程和操作指南。



下面為實際運作的環境

實際運作的colab


心得:

感覺真的能使用其他api 跟工具以及具有存儲功能的才真的有應用價值。


目錄:


Langchain:


  1. 介紹:

  2. 教學:

    1. 基礎:

      1. 使用 LCEL 建立簡單的 LLM 應用
      2. 建構一個聊天機器人
      3. 建立向量儲存和檢索器
      4. 建立 Agent
    2. 將外部資訊導入到 Agent 的運作中
      5. 建立檢索增強生成 (RAG) 應用程式
      6. 建立會話式 RAG 應用程式
      7. 基於 SQL 資料建構問答系統
      8. 建構查詢分析系統
      9. 建立本地 RAG 應用程式
      10. 透過圖形資料庫建立問答應用程式
      11. 建構 PDF 攝取和問答系統

    3. 特定的任務或功能
      12. 建構抽取資料的方法
      13. 產生合成資料
      14. 將文字用標籤分類
      15. 總結文本


LangGraph:


  1. 快速入門:

  2. 聊天機器人:

    1. 客戶支持機器人
    2. 根據使用者需求產生 prompt
    3. 程式碼助手
  3. RAG:
    4.自適應 RAG
    5.使用本地的LLM進行自適應 RAG
    6.自主檢索 RAG(Agentic RAG)
    7.自修正 RAG(Corrective RAG)
    8. 使用本地的LLM進行自修正 RAG
    9.自我詢問RAG(Self-RAG)
    10.使用本地的LLM自我詢問RAG(Self-RAG)
    11.SQL Agent

  4. Agent 架構:

    1. 多 Agent系統:
      12. 兩個Agent的協作
      13. 監督
      14. 分層團隊
      2.規劃型Agent:
      15. 規劃與執行
      16. 無觀察執行
      17. LLMCompiler
      3.反思與批評:
      18.基本反思
      19.反思
      20.語言 Agent 樹搜尋
      21.自主發現代理
  5. 評估與分析:
    22. 基於代理的評估
    23. 在LangSmith中的評估

  6. 實驗性項目:
    24. 網路搜索Agent(STORM)
    25. TNT-LLM
    26. Web導航 Agent
    27. 競賽中的程式設計
    28. 複雜資料抽取


LangSmith:


  1. 快速入門:
  2. 為您的 LLM 應用添加可觀察的方法
  3. 評估您的 LLM 應用
  4. 優化分類器
  5. RAG 評估
  6. 回測
  7. 代理商評價
  8. 優化 LangSmith 上的追蹤支出

整合 LangGraph 的工具介紹以及使用:


  1. agent-service-toolkit


上一篇
Day 17-1: langgraph (結合 RAG 與自我修正的程式碼生成)
下一篇
Day 19: 粗淺的理解LongWriter
系列文
LLM與生成式AI筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言