精品欧美一区二区三区在线观看 _久久久久国色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)推薦
国产高清自拍99| 欧美精品一区二区免费| www.xxx亚洲| h视频在线播放| 激情久久久久久久久久久久久久久久| 欧美尺度大的性做爰视频| 蜜臀av粉嫩av懂色av| 欧洲一级精品| 亚洲一区二区欧美激情| 欧美大陆一区二区| 国产精品一区二区黑人巨大| 亚洲精品123区| 色琪琪综合男人的天堂aⅴ视频| 深夜视频在线观看| 成人免费一区| 五月婷婷另类国产| 中文字幕制服丝袜在线| 日本亚洲欧美| 国产99久久久国产精品免费看| 日韩美女在线看| 亚洲精品在线观看av| 日韩欧美大片| 日韩精品中文字幕在线观看| 无套内谢丰满少妇中文字幕| 欧美大片1688| 性做久久久久久免费观看| 一区不卡字幕| 国产粉嫩一区二区三区在线观看| 成人综合婷婷国产精品久久蜜臀 | 欧美色欧美亚洲另类二区| 人妻激情另类乱人伦人妻 | 欧美成人精品在线观看| 九色porny自拍视频| 国产厕拍一区| 日韩欧美一区中文| 亚洲欧美自拍另类日韩| 欧美freesex| 欧美性色xo影院| 婷婷五月综合缴情在线视频| 在线视频国产区| 国产精品免费看片| 青青草成人网| 日韩av免费观影| 99久久免费精品高清特色大片| 91人成网站www| 一级全黄少妇性色生活片| 丝袜诱惑制服诱惑色一区在线观看 | 国产噜噜噜噜噜久久久久久久久 | 欧美老女人第四色| 国产免费又粗又猛又爽| 欧美大胆性生话| 色综合中文字幕国产| 国产深夜男女无套内射| 97人人爽人人澡人人精品| 一区二区在线看| 嫩草影院中文字幕| 动漫一区二区| 亚洲国产欧美日韩另类综合| 可以看毛片的网址| 黄色成人在线网| 亚洲国产日产av| 日日碰狠狠添天天爽超碰97| 国产精品vvv| 韩曰欧美视频免费观看| 激情五月开心婷婷| 亚洲高清黄色| 欧美日韩一区不卡| 日韩av在线中文| 国产一区二区三区精品在线观看 | 午夜视频在线观| 91亚洲精品在看在线观看高清| 欧美日韩久久一区| 国产精品久久久久久9999| 日韩中文字幕一区二区高清99| 精品乱码亚洲一区二区不卡| 国产极品一区二区| 免费久久久久久久久| 中文在线不卡视频| 久久中文免费视频| 狠狠爱成人网| 国产成人一区二| 国产精品探花视频| 国产成人aaa| 欧美久久久久久| 国产激情视频在线观看| 亚洲最大的成人av| av片中文字幕| 97精品资源在线观看| 亚洲国产毛片完整版| 九一在线免费观看| 国模大胆一区二区三区| 日本久久91av| www夜片内射视频日韩精品成人| 91小视频在线| 在线码字幕一区| 国模精品视频| 欧美日韩三级视频| 岛国精品资源网站| 99久久久久| 欧美与黑人午夜性猛交久久久| 一区二区三区在线免费观看视频| 国产91在线观看| 日韩成人av网站| 日韩三级免费| 欧美日韩在线综合| 北岛玲一区二区| 亚洲成av人片乱码色午夜| 欧美重口另类videos人妖| 国产免费视频一区二区三区| 99久久久精品免费观看国产蜜| 亚洲在线视频一区二区| 韩日毛片在线观看| 欧美一三区三区四区免费在线看| 香蕉视频黄色在线观看| 欧美视频亚洲视频| 国产美女精彩久久| 先锋av资源站| 一区2区3区在线看| 伊人网在线综合| 亚洲国产合集| 国模gogo一区二区大胆私拍| 国产精品九九九九| 国产三级精品在线| 日韩精品视频一区二区在线观看| 美国十次综合久久| 最新日韩中文字幕| 天天干,天天干| 99视频一区二区| 欧美中文字幕在线观看视频| 日韩成人精品一区二区三区| 亚洲日韩欧美视频| 国产三级av片| av成人老司机| 国产无限制自拍| 欧美特黄不卡| 欧美成人高清视频| 国产免费的av| 中文字幕一区不卡| 永久免费的av网站| 精品一区二区三| 国产不卡视频在线| 欧美日韩视频精品二区| 天天操天天干天天综合网| zjzjzjzjzj亚洲女人| 国产精品www.| 97人人模人人爽人人喊38tv| 好吊日视频在线观看| 欧美人狂配大交3d怪物一区 | 欧美亚洲精品在线| 国产成人亚洲精品| 国产精品秘入口| 欧美日韩性生活| 精品亚洲aⅴ无码一区二区三区| 久久aⅴ国产紧身牛仔裤| 久久国产手机看片| 久久人体大尺度| 国产亚洲激情视频在线| 超碰在线免费97| 亚洲欧洲国产日本综合| www.色就是色.com| 影音先锋日韩在线| 99伊人久久| 爱搞国产精品| 亚洲深夜福利网站| 在线观看国产一区二区三区| 国产精品久久久久久久第一福利| 欧美国产日韩在线视频| 午夜精品久久| 国产一区二区三区四区hd| 日本三级一区| 国产一区二区三区高清在线观看| 中文字幕日韩经典| 亚洲女女做受ⅹxx高潮| 免费观看污网站| 香蕉久久夜色精品| 亚洲精品不卡| 亚洲91网站| 2020欧美日韩在线视频| av片在线免费观看| 欧美一区二区三区免费观看视频| 五月天婷婷网站| 久久精品亚洲麻豆av一区二区 | 亚洲 欧美 中文字幕| 国产精品理伦片| 国产精品一级无码| 久久九九免费| 欧美日韩一级在线| 色婷婷av一区二区三区丝袜美腿| 国产精品久久久久av| 深夜国产在线播放| 精品亚洲国产视频| 国产孕妇孕交大片孕| 无吗不卡中文字幕| 亚洲av无一区二区三区| 成人av一区二区三区| 九九热在线免费| 亚洲承认在线| www亚洲国产| 校园春色另类视频| 91精品中文在线| 欧美7777| 韩国19禁主播vip福利视频| 国产高清免费在线播放| 日韩精品一区二区三区视频 | 精品久久久久久久人人人人传媒| 瑟瑟视频在线免费观看| 亚洲午夜私人影院| 少妇太紧太爽又黄又硬又爽小说| k8久久久一区二区三区 | 色爱av美腿丝袜综合粉嫩av| 欧美性受xxxx狂喷水| 在线成人av网站| 99超碰在线观看| 亚洲国产精品一区二区www在线| 极品人妻videosss人妻| 不卡一区中文字幕| 色婷婷一区二区三区在线观看| 久久永久免费| 黄色一级片在线看| 中文av一区| 一区二区不卡视频| 欧美丝袜激情| 鲁鲁视频www一区二区| 成人性生交大片免费看中文视频| 国产日韩欧美中文| 成人精品国产| 国产精品久久久久久久午夜| 中文av在线全新| 97人洗澡人人免费公开视频碰碰碰| bt在线麻豆视频| 久久精品国产亚洲7777| а天堂8中文最新版在线官网| 日韩精品在线观看一区二区| 蜜桃av噜噜一区二区三区麻豆| 7777精品伊人久久久大香线蕉的 | 精品国精品国产尤物美女| 国产精品国产三级国产普通话对白 | 午夜精品一区二| 日韩欧美在线第一页| 日韩 欧美 综合| 亚洲成人777| 国产大片中文字幕| 一区二区三区精品在线| 久久r这里只有精品| 亚洲女同一区二区| 男人与禽猛交狂配| 亚洲精品中文在线影院| 欧美又粗又大又长| 有码一区二区三区| 久久综合久久鬼| 午夜不卡av免费| 在线观看免费av片| 色综合一区二区三区| 日本视频免费观看| 欧美专区亚洲专区| 亚洲视频在线观看免费视频| 欧美日韩成人综合在线一区二区| 一级淫片免费看| 91精品国产色综合久久ai换脸 | 国内成人免费视频| 亚洲国产欧美91| 粉嫩绯色av一区二区在线观看 | 国产日产亚洲精品系列| 一区二区伦理片| 国产精品卡一卡二| 私库av在线播放| 亚洲成人中文在线| 亚洲不卡视频在线观看| 在线欧美日韩精品| 国产精品午夜福利| 亚洲国产高潮在线观看| 可以在线观看的av网站| 视频在线观看99| 主播国产精品| 欧美一区二区三区…… | 校园激情久久| 黄色手机在线视频| 国产福利一区在线| 少妇大叫太粗太大爽一区二区| 中文字幕乱码亚洲精品一区| 黄色一级片在线| 欧美性高潮在线| 国产精品一区二区黑人巨大| 亚洲精品av在线| 91最新在线| 97国产精品视频| 成人影院在线免费观看| 波多野结衣一区二区三区在线观看| 伊人成综合网yiren22| 中国人体摄影一区二区三区| 亚洲二区视频| 日本高清久久久| www.激情成人| xxxx日本少妇| 91久久奴性调教| 二区三区在线视频| 在线成人激情黄色| 国产精品yjizz视频网| 成人国产亚洲精品a区天堂华泰| 国内精品偷拍| 99re99热| 日韩精品高清不卡| 亚洲麻豆一区二区三区| 日本一区二区不卡视频| 97免费在线观看视频| 欧美福利电影网| 久香视频在线观看| 久久免费视频观看| 亚洲青青一区| 日韩精品在在线一区二区中文| 亚洲韩日在线| 被黑人猛躁10次高潮视频| 国产视频在线观看一区二区三区| 久久久无码精品亚洲国产| 欧美高清视频不卡网| 国产对白叫床清晰在线播放| 91av国产在线| 北条麻妃一区二区三区在线| 精品国产三级a∨在线| 欧美a一区二区| 爱爱免费小视频| 亚洲成年人影院| 黄色av网站免费在线观看| 久久午夜a级毛片| 深夜视频一区二区| 欧美一区二区视频17c| 亚洲综合不卡| 成年人的黄色片| 亚洲一级二级三级| www.看毛片| 欧美xxxx综合视频| gogo大尺度成人免费视频| 亚洲精品欧洲精品| 久久久久免费| 久久久亚洲av波多野结衣| 精品成人乱色一区二区| 亚洲精品久久久蜜桃动漫| 成人97在线观看视频| 国产高清日韩| 一级全黄肉体裸体全过程| 国产真实乱对白精彩久久| 国产精品69久久久久孕妇欧美| 日本电影亚洲天堂一区| 久青青在线观看视频国产| 欧美亚洲另类激情另类| 香蕉一区二区| 熟妇人妻无乱码中文字幕真矢织江| 91蝌蚪porny成人天涯| www.国产com| 亚洲女成人图区| 日韩成人亚洲| 一区二区三区四区| 国产一区视频网站| 精品欧美一区二区久久久久| 欧美成人高清电影在线| 1234区中文字幕在线观看| 国产在线视频欧美一区二区三区| 国产精品久久久免费| 日韩中文字幕电影| 在线观看成人小视频| 国产男女在线观看| av剧情在线观看| 国产精品日韩欧美一区二区三区| 国产精品草草| 97人妻精品一区二区三区免| 色诱亚洲精品久久久久久| av在线收看| 亚洲va男人天堂| 亚洲日本成人| 亚洲v国产v欧美v久久久久久| 欧美日韩一区二区不卡| 在线免费av导航| 国产一区二区免费电影| 久色成人在线| 国产一区二区播放| 亚洲精品国产精品国产自| 欧亚一区二区| 日韩视频一二三| 久久综合色一综合色88| 一级α片免费看刺激高潮视频| 欧美老少配视频| 欧美亚视频在线中文字幕免费| 69久久久久久| 亚洲线精品一区二区三区八戒| 欧美在线观看在线观看| 成人久久精品视频| 国产欧美日韩亚洲一区二区三区| www.4hu95.com四虎| 精品美女在线播放| 黄色欧美视频| 日本www在线视频| 国产精品理论在线观看| 无码国产色欲xxxx视频| 国产欧美精品一区二区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产一级黄色av| 国产午夜一区二区| 操欧美女人视频| 少妇一级淫免费播放| 五月激情六月综合|