精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

LangGraph實(shí)戰(zhàn):可控的AI航空客服助手

發(fā)布于 2024-5-20 15:13
瀏覽
0收藏

當(dāng)智能助手代表用戶執(zhí)行操作時(shí),用戶幾乎總是應(yīng)該對是否執(zhí)行這些操作擁有最終決定權(quán)。否則,即使是智能助手的一點(diǎn)小失誤,或是它未能抵御的任何指令注入,都可能對用戶造成實(shí)際損害。

在這部分,我們將利用LangGraph的interrupt_before功能,在執(zhí)行任何工具之前,暫停流程并把控制權(quán)交還給用戶。

您的流程圖可能看起來像這樣:

LangGraph實(shí)戰(zhàn):可控的AI航空客服助手-AI.x社區(qū)

流程圖示例

和之前一樣,我們首先定義狀態(tài):

狀態(tài)與智能助手

我們的流程圖狀態(tài)和LLM調(diào)用與第一部分基本相同,除了:

  • 我們新增了一個(gè)user_info字段,它將由我們的流程圖主動填充
  • 我們可以在Assistant對象中直接使用狀態(tài),而不是使用可配置的參數(shù)

from typing import Annotated

from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import Runnable, RunnableConfig
from typing_extensions import TypedDict

from langgraph.graph.message import AnyMessage, add_messages

class State(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]
    user_info: str

class Assistant:
    def __init__(self, runnable: Runnable):
        self.runnable = runnable

    def __call__(self, state: State, config: RunnableConfig):
        while True:
            passenger_id = config.get("passenger_id", None)
            result = self.runnable.invoke(state)
            # 如果大型語言模型恰好返回了一個(gè)空響應(yīng),我們將重新請求一個(gè)實(shí)際的響應(yīng)。
            if not result.tool_calls and (
                not result.content
                or isinstance(result.content, list)
                and not result.content[0].get("text")
            ):
                messages = state["messages"] + [("user", "請給出真實(shí)的輸出。")]
                state = {**state, "messages": messages}
            else:
                break
        return {"messages": result}

# Haiku模型更快更經(jīng)濟(jì),但準(zhǔn)確性較低
# llm = ChatAnthropic(model="claude-3-haiku-20240307")
llm = ChatAnthropic(model="claude-3-sonnet-20240229", temperature=1)
# 你也可以使用OpenAI或其他模型,盡管你可能需要調(diào)整提示
# from langchain_openai import ChatOpenAI

# llm = ChatOpenAI(model="gpt-4-turbo-preview")

assistant_prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "你是一個(gè)樂于助人的瑞士航空客戶支持智能助手。"
            "利用提供的工具搜索航班、公司政策和其他信息,以幫助解答用戶的疑問。"
            "在搜索時(shí),要持之以恒。如果首次搜索沒有結(jié)果,就擴(kuò)大你的搜索范圍。"
            "如果搜索依然一無所獲,繼續(xù)擴(kuò)大搜索范圍,不要輕言放棄。"
            "\n\n當(dāng)前用戶:\n<User>\n{user_info}\n</User>"
            "\n當(dāng)前時(shí)間:{time}。",
        ),
        ("placeholder", "{messages}"),
    ]
).partial(time=datetime.now())

part_2_tools = [
    TavilySearchResults(max_results=1),
    fetch_user_flight_information,
    search_flights,
    lookup_policy,
    update_ticket_to_new_flight,
    cancel_ticket,
    search_car_rentals,
    book_car_rental,
    update_car_rental,
    cancel_car_rental,
    search_hotels,
    book_hotel,
    update_hotel,
    cancel_hotel,
    search_trip_recommendations,
    book_excursion,
    update_excursion,
    cancel_excursion,
]
part_2_assistant_runnable = assistant_prompt | llm.bind_tools(part_2_tools)

定義流程圖

現(xiàn)在,創(chuàng)建流程圖。根據(jù)第一部分的反饋,我們做出兩個(gè)改變:

  1. 在使用工具之前加入一個(gè)中斷點(diǎn)。
  2. 在第一個(gè)節(jié)點(diǎn)中明確填充用戶狀態(tài),這樣智能助手就不必通過使用工具來了解用戶信息。

from langgraph.checkpoint.sqlite import SqliteSaver
from langgraph.graph import END, StateGraph
from langgraph.prebuilt import ToolNode, tools_condition

builder = StateGraph(State)

def user_info(state: State):
    return {"user_info": fetch_user_flight_information.invoke({})}

# 新增:fetch_user_info節(jié)點(diǎn)首先執(zhí)行,這意味著我們的智能助手可以在
# 不采取任何行動的情況下查看用戶的航班信息
builder.add_node("fetch_user_info", user_info)
builder.set_entry_point("fetch_user_info")
builder.add_node("assistant", Assistant(part_2_assistant_runnable))
builder.add_node("action", create_tool_node_with_fallback(part_2_tools))
builder.add_edge("fetch_user_info", "assistant")
builder.add_conditional_edges(
    "assistant", tools_condition, {"action": "action", END: END}
)
builder.add_edge("action", "assistant")

memory = SqliteSaver.from_conn_string(":memory:")
part_2_graph = builder.compile(
    checkpointer=memory,
    # 新增:流程圖在執(zhí)行“action”節(jié)點(diǎn)之前總是暫停。
    # 用戶可以在智能助手繼續(xù)之前批準(zhǔn)或拒絕(甚至修改請求)
    interrupt_before=["action"],
)

from IPython.display import Image, display

try:
    display(Image(part_2_graph.get_graph(xray=True).draw_mermaid_png()))
except:
    # 這需要一些額外的依賴項(xiàng),并且是可選的
    pass

LangGraph實(shí)戰(zhàn):可控的AI航空客服助手-AI.x社區(qū)

流程圖示例2

示例對話

現(xiàn)在,讓我們通過以下對話示例來測試我們新修訂的聊天機(jī)器人。

import shutil
import uuid

# 使用備份文件更新,以便我們可以從每個(gè)部分的起始點(diǎn)重新啟動
shutil.copy(backup_file, db)
thread_id = str(uuid.uuid4())

config = {
    "configurable": {
        # passenger_id在我們的航班工具中使用,以獲取用戶的航班信息
        "passenger_id": "3442 587242",
        # 通過thread_id訪問檢查點(diǎn)
        "thread_id": thread_id,
    }
}

_printed = set()
# 我們可以重復(fù)使用第一部分的教程問題,以觀察聊天機(jī)器人的表現(xiàn)。
for question in tutorial_questions:
    events = part_2_graph.stream(
        {"messages": ("user", question)}, config, stream_mode="values"
    )
    for event in events:
        _print_event(event, _printed)
    snapshot = part_2_graph.get_state(config)
    while snapshot.next:
        # 我們遇到了一個(gè)中斷!代理正試圖使用一個(gè)工具,而用戶可以批準(zhǔn)或拒絕它
        # 注意:這段代碼位于你的流程圖之外。通常,你會將輸出流式傳輸?shù)接脩艚缑妗?        # 然后,你會在用戶輸入時(shí),通過API調(diào)用觸發(fā)一個(gè)新的運(yùn)行。
        user_input = input(
            "你同意上述操作嗎?輸入'y'以繼續(xù);"
            "否則,請說明你請求的更改。\n\n"
        )
        if user_input.strip() == "y":
            # 繼續(xù)執(zhí)行
            result = part_2_graph.invoke(
                None,
                config,
            )
        else:
            # 通過提供關(guān)于請求更改/改變主意的說明,滿足工具調(diào)用
            result = part_2_graph.invoke(
                {
                    "messages": [
                        ToolMessage(
                            tool_call_id=event["messages"][-1].tool_calls[0]["id"],
                            cnotallow=f"API調(diào)用被用戶拒絕。理由:'{user_input}'. 繼續(xù)協(xié)助,考慮用戶的輸入。",
                        )
                    ]
                },
                config,
            )
        snapshot = part_2_graph.get_state(config)

第二部分回顧

現(xiàn)在,我們的智能助手能夠節(jié)省一步來響應(yīng)我們的航班詳情。我們還完全控制了執(zhí)行的操作。這一切都是通過LangGraph的interrupts和checkpointers實(shí)現(xiàn)的。中斷暫停了流程圖的執(zhí)行,其狀態(tài)使用配置的檢查點(diǎn)器安全地持久化。用戶隨后可以在任何時(shí)候通過使用正確的配置運(yùn)行它來啟動它。

查看一個(gè)LangSmith示例跟蹤,以更好地理解流程圖是如何運(yùn)行的。注意從這個(gè)跟蹤中,你通常通過使用(None, config)調(diào)用流程圖來恢復(fù)流程。狀態(tài)從檢查點(diǎn)加載,就像它從未被中斷過一樣。

這個(gè)流程圖工作得很好!但當(dāng)需要我們參與每一個(gè)智能助手的行動的要求,十分影響使用體驗(yàn),并且助手在執(zhí)行查詢等動作時(shí)并不會影響實(shí)際業(yè)務(wù)。

LangGraph實(shí)戰(zhàn):可控的AI航空客服助手-AI.x社區(qū)


本文轉(zhuǎn)載自?? AI小智??,作者: AI小智

標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
亚洲精品无码久久久久久久| 亚洲欧洲一二三| 欧美亚洲天堂网| 亚洲免费成人av在线| 欧美日韩小视频| 国产911在线观看| 亚洲三级黄色片| 蜜臀99久久精品久久久久久软件| 大胆欧美人体视频| 久久久久久久无码| 久久精品国产精品亚洲毛片| 亚洲激情五月婷婷| 欧洲成人一区二区| 亚洲第一免费视频| 日韩中文字幕不卡| 欧美疯狂xxxx大交乱88av| 欧美高清性xxxx| 国产精品日本一区二区不卡视频| 欧美视频在线看| 51xx午夜影福利| 国产人成在线观看| 理论片日本一区| 91黑丝在线观看| 成人免费视频国产免费观看| 欧美极品在线观看| 亚洲激情免费观看| 三级黄色片免费看| 99只有精品| 色婷婷一区二区| 99在线观看视频免费| 国产在线观看免费| 99久久精品一区二区| 91青青草免费在线看| 在线观看日批视频| 久久久久久久波多野高潮日日| 欧美福利小视频| 日韩在线中文字幕视频| 成人高清av| 亚洲午夜激情免费视频| 日本一区二区三区网站| 亚洲第一二区| 91精品国产麻豆| 亚洲欧美国产日韩综合| 日韩漫画puputoon| 91黄色免费网站| 欧美 日韩精品| 天堂√中文最新版在线| 午夜久久久久久| 全黄性性激高免费视频| 青青草原av在线| 一区二区三区在线观看动漫 | 国产一区二区三区91| 亚洲黄在线观看| 91丝袜在线观看| 老牛国内精品亚洲成av人片| 亚洲电影成人av99爱色| 国产69视频在线观看| 福利在线一区| 亚洲福利视频专区| 国产精品无码电影| 婷婷国产精品| 国产小视频国产精品| 亚洲精品成人无码| 不卡中文一二三区| 日韩三级影视基地| 四虎永久免费在线| 在线欧美不卡| 2021国产精品视频| 亚洲大尺度在线观看| 日本成人超碰在线观看| 国产主播欧美精品| 国产成人三级一区二区在线观看一| 激情五月播播久久久精品| 91久久久久久久久| 亚洲AV无码国产精品午夜字幕| 成人中文字幕合集| 精品在线观看一区二区| 国产一区精品| 亚洲欧洲另类国产综合| 97碰在线视频| 无遮挡爽大片在线观看视频| 日本韩国一区二区| 国产三级生活片| 91久久偷偷做嫩草影院电| 亚洲成人网在线观看| 亚洲香蕉中文网| 久久99国产精品视频| 中文字幕亚洲综合久久筱田步美| 天堂网avav| 亚洲免费大片| 国产精品久久久久久久久久新婚| 国产一区二区女内射| 成人精品视频.| 日本一区不卡| av在线免费观看网址| 偷拍与自拍一区| 国产小视频精品| 视频精品国内| 亚洲欧美日韩中文在线制服| 国产第一页浮力| 国产亚洲欧洲| 91九色国产视频| 天堂√在线中文官网在线| 91美女在线视频| 亚洲小说欧美另类激情| 成人香蕉视频| 欧美成人高清电影在线| 免费看的黄色网| 狠狠综合久久| 成人av资源在线播放| 午夜福利视频一区二区| 亚洲欧美怡红院| 欧美激情成人网| 日韩在线亚洲| 日韩在线观看网址| 久久久久久久久久久久久av| 国产麻豆一精品一av一免费 | 欧美少妇另类| 亚洲免费观看高清完整| 黄色三级视频片| 国产色噜噜噜91在线精品| 日韩中文字幕网址| 日韩免费av网站| av不卡在线观看| 黑人巨茎大战欧美白妇 | 91九色蝌蚪国产| 毛片免费在线观看| 精品欧美aⅴ在线网站| 国产又粗又长又爽又黄的视频| 免费看成人吃奶视频在线| 久久全球大尺度高清视频| 国产露脸91国语对白| 中文欧美字幕免费| 成年人小视频网站| 中文字幕av一区二区三区人| 91精品国产99| 日本波多野结衣在线| 亚洲综合免费观看高清在线观看| 奇米视频888| 日本道不卡免费一区| 欧美资源在线观看| 亚洲欧洲成人在线| 天天av天天翘天天综合网色鬼国产| 波多野结衣网页| 亚洲一区欧美| 亚洲自拍高清视频网站| 超碰公开在线| 日韩久久久精品| 欧美精品入口蜜桃| 国产成人免费视频| 国产黄色激情视频| 国产精品久久久网站| 久久久免费观看| 日本国产在线观看| 无吗不卡中文字幕| 强伦人妻一区二区三区| 日韩综合在线视频| 亚洲一区不卡在线| 91精品一久久香蕉国产线看观看| 日韩三级成人av网| 朝桐光av在线一区二区三区| 一个色综合av| 国产精品久久久久久亚洲色| 国产视频一区三区| 欧美18视频| 国产香蕉久久| 久久成人在线视频| 六月丁香色婷婷| 欧美性生交大片免费| 美女被到爽高潮视频| 久久福利资源站| 天堂av在线中文| 国产成人精品福利| 日本免费久久高清视频| 3d成人动漫在线| 日韩一级片在线观看| 在线看成人av| 中文字幕第一页久久| 中文字幕资源在线观看| 欧美三级在线| 欧美久久在线| 国产日本亚洲| 午夜欧美不卡精品aaaaa| 猫咪在线永久网站| 7777精品伊人久久久大香线蕉完整版 | 久久亚洲天堂网| 欧美国产精品v| 国产老头和老头xxxx×| 国产精品试看| 精品少妇人妻av一区二区| 精品欠久久久中文字幕加勒比| 日韩美女av在线免费观看| 麻豆电影在线播放| 日韩av最新在线| 97人妻一区二区精品免费视频 | 亚洲欧洲在线播放| 国产精品视频无码| 欧美视频13p| 91插插插插插插| 久久综合狠狠综合久久激情| 91在线第一页| 日韩黄色免费电影| 欧美乱做爰xxxⅹ久久久| 国产一区二区三区不卡视频网站| 波多野结衣一区二区三区在线观看| 亚洲最大成人| 欧美激情精品久久久久久免费印度 | 久久中文免费视频| 久久蜜桃一区二区| 女教师高潮黄又色视频| 青草国产精品久久久久久| 免费毛片网站在线观看| 五月精品视频| 欧美色欧美亚洲另类七区| 日韩中文字幕无砖| 国产欧美日韩丝袜精品一区| 中文av在线全新| 欧美激情videos| 免费av网站在线看| 国产午夜精品视频| 日韩成人黄色| 亚洲成人av在线播放| 国产日韩免费视频| 欧美精品色一区二区三区| 日本视频网站在线观看| 亚洲高清免费在线| 日韩在线观看视频一区二区| 欧美激情一区二区| 51妺嘿嘿午夜福利| 97精品超碰一区二区三区| 熟女人妻一区二区三区免费看| 久久99精品国产| 在线免费视频一区| 久久一区视频| 日韩a在线播放| 一本综合精品| 国产精品久久中文字幕| 国产中文一区| 日本一本中文字幕| 亚洲手机在线| 国产aaa免费视频| 亚洲国内自拍| 青草青青在线视频| 亚洲精选国产| 欧美视频在线免费播放| 在线成人国产| 色欲色香天天天综合网www| 欧美日韩国产成人精品| 中文字幕免费高| 一本一道久久综合狠狠老| 中文字幕在线亚洲三区| 99re久久最新地址获取| 伊甸园精品99久久久久久| 国产精品x453.com| 一本—道久久a久久精品蜜桃| 久久中文字幕av| 在线观看成人免费| 欧美日韩国产亚洲一区| 99在线观看视频免费| 黄色欧美日韩| 国产网站免费在线观看| 性欧美长视频| 污污的网站18| 久久精品国产99久久6| 午夜激情影院在线观看| 国产精品一区二区你懂的| 成人一区二区三区仙踪林| 成人精品视频网站| 波多野结衣办公室33分钟| 国产欧美精品一区二区三区四区| 日本不卡一区视频| 亚洲色图第一区| 国产在线视频二区| 欧美性xxxxxxxxx| 中文字幕在线视频免费| 日韩三级在线观看| 日韩av成人| 日韩中文字幕国产| 超清av在线| 国产成人综合av| 国产一区二区视频在线看| 国产欧美一区二区三区另类精品| 亚洲图片久久| 一区二区日本| 在线日韩中文| 天天爽夜夜爽一区二区三区| 成人中文字幕在线| 免费看日本黄色片| 亚洲午夜激情网页| 成人免费视频国产免费| 日韩午夜精品电影| 国模精品一区二区| 欧美老少做受xxxx高潮| 日韩三级影视| 鬼打鬼之黄金道士1992林正英| 欧美男gay| 日韩在线观看a| 奇米影视一区二区三区小说| 欧美xxxxx少妇| 欧美国产激情二区三区| 国产一级二级三级| 欧美体内she精视频| 丰满肥臀噗嗤啊x99av| 国产亚洲精品久久久| 丝袜国产在线| 国产精品亚洲片夜色在线| 牛牛影视一区二区三区免费看| 亚洲精品永久www嫩草| 亚洲经典视频在线观看| 最新免费av网址| 久久精品欧美日韩| 国产乡下妇女做爰| 91精品国产综合久久精品性色| 蜜桃成人在线视频| 97精品久久久| 国内精品视频| 亚洲欧美日韩不卡一区二区三区| 日韩一区二区久久| 免费在线观看日韩av| 亚洲视频一区在线| 自拍偷拍精品视频| 日韩精品免费在线| 电影k8一区二区三区久久| 成人在线观看视频网站| 青青草成人影院| 成年人免费大片| 91蝌蚪porny| 日韩欧美亚洲视频| 精品国产亚洲在线| www红色一片_亚洲成a人片在线观看_| 日本一区二区不卡| 日本中文字幕在线一区| 久久99中文字幕| 国产成人亚洲精品狼色在线| 顶臀精品视频www| 欧美日韩国产a| 午夜免费播放观看在线视频| 国产精品高潮粉嫩av| 西野翔中文久久精品字幕| 俄罗斯av网站| 99精品视频在线免费观看| 日本特黄特色aaa大片免费| 日韩欧美久久久| 91精品久久| av在线不卡一区| 国产精品vip| 日本国产在线视频| 精品久久久久久久大神国产| 天堂成人在线视频| 国产69久久精品成人看| 少妇久久久久| 无码人妻丰满熟妇区五十路百度| 久久人人超碰精品| 免费看一级视频| 伊人久久久久久久久久久久久 | 欧美大片aaaa| 97人人爽人人| 亚洲精选在线视频| 亚洲国产精品视频在线| 韩国三级电影久久久久久| 日韩影视高清在线观看| 国产亚洲天堂网| 欧美国产一区视频在线观看| 亚洲天堂手机在线| 欧美成人中文字幕| 国产精品对白| 日韩精品一区二区三区不卡 | 成人免费看片98| 日韩高清中文字幕| 国产一区二区主播在线| 亚洲一区bb| 福利电影一区二区三区| 久久久久女人精品毛片九一 | 免费看黄色三级| 欧美酷刑日本凌虐凌虐| 亚洲奶水xxxx哺乳期| 精品久久精品久久| 日本女人一区二区三区| frxxee中国xxx麻豆hd| 欧美精品一区二区高清在线观看| 中文在线免费视频| 影音先锋欧美资源| 成人黄色在线视频| 加勒比在线一区| 九九久久国产精品| 神马日本精品| 亚洲欧美日韩精品一区| 亚洲午夜影视影院在线观看| 国产高清免费av在线| 岛国视频一区| 丝袜美腿亚洲一区| 欧美成人手机视频| 亚洲最新中文字幕| jizz久久精品永久免费| 少妇黄色一级片| 一区二区理论电影在线观看| 麻豆导航在线观看| 97人人香蕉| 热久久久久久久| 国产精品18p|