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

LangGraph結構化輸出詳解:讓智能體返回格式化數據

人工智能
結構化輸出是現代AI應用開發中的重要技術。通過LangGraph的.with_structured_output()方法,我們可以輕松讓大語言模型返回格式化的數據,提高應用的可靠性和可維護性。

引言

在使用大語言模型進行開發時,我們經常需要模型返回特定格式的數據,而不是純文本。比如在構建AI應用時,我們可能需要模型返回JSON格式的數據用于后續處理,或者返回符合特定數據結構的對象。這就是結構化輸出的價值所在。

本文將深入探討LangGraph中的結構化輸出功能,重點介紹.with_structured_output()方法的使用,并通過實際代碼示例展示如何在項目中應用這一技術。

什么是結構化輸出?

結構化輸出是指LLM(或LangGraph工作流中的其他節點)返回的輸出被格式化為明確定義的、機器可讀的對象,如字典、列表、自定義類或JSON對象,而不是純文本。

對比示例:

  • 非結構化輸出:"答案是北京。"
  • 結構化輸出:{"城市": "北京", "國家": "中國", "人口": 2154}

為什么需要結構化輸出?

在LangGraph中,一個節點的輸出通常作為另一個節點的輸入。如果輸出是結構化的,下一步就能準確知道期望什么字段/數據以及如何訪問它們。這大大提高了系統的可靠性和可維護性。

核心技術:.with_structured_output()方法

.with_structured_output()是獲得結構化輸出的最簡單、最可靠的方法。它專為那些原生支持結構化輸出API(如工具/函數調用或JSON模式)的模型實現,并在后臺使用這些功能。

基本工作原理

該方法接受一個模式作為輸入,指定所需輸出屬性的名稱、類型和描述。它返回一個類似于模型的Runnable,但輸出的不是字符串或消息,而是對應于給定模式的對象。

實現方式詳解

方式一:使用Pydantic類

使用Pydantic的主要優點是模型生成的輸出將被驗證。如果任何必需的字段缺失或任何字段的類型錯誤,Pydantic將拋出錯誤。

from pydantic import BaseModel, Field
from langchain_deepseek import ChatDeepSeek
from typing import Optional

# 定義Pydantic模型
class ProductInfo(BaseModel):
    """產品基本信息"""
    
    name: str = Field(descriptinotallow="產品名稱")
    price: float = Field(descriptinotallow="產品價格,單位為元")
    category: str = Field(descriptinotallow="產品所屬類別")
    rating: Optional[int] = Field(
        default=None, descriptinotallow="產品評分,1-10分"
    )

# 初始化模型
llm = ChatDeepSeek(model="deepseek-chat")
structured_llm = llm.with_structured_output(ProductInfo)

# 調用示例
result = structured_llm.invoke("幫我分析一下iPhone 15這款手機")
print(result)
# 輸出: ProductInfo(name='iPhone 15', price=5999.0, category='智能手機', rating=9)

方式二:使用TypedDict

如果您不想使用Pydantic驗證,或者希望能夠流式輸出模型結果,可以使用TypedDict類定義模式。

from typing import Optional
from typing_extensions import Annotated, TypedDict

# 使用TypedDict定義模式
class StudentInfo(TypedDict):
    """學生基本信息"""
    
    name: Annotated[str, ..., "學生姓名"]
    age: Annotated[int, ..., "學生年齡"]
    major: Annotated[str, ..., "所學專業"]
    score: Annotated[Optional[float], None, "平均成績,0-100分"]

structured_llm = llm.with_structured_output(StudentInfo)

result = structured_llm.invoke("張明,20歲,計算機科學專業,平均成績85分")
print(result)
# 輸出: {'name': '張明', 'age': 20, 'major': '計算機科學', 'score': 85.0}

方式三:使用JSON Schema

您也可以直接傳入JSON Schema字典,這種方式不需要導入額外的類,但代碼會更冗長一些。

json_schema = {
    "title": "公司信息",
    "description": "公司基本信息",
    "type": "object",
    "properties": {
        "company_name": {
            "type": "string",
            "description": "公司名稱",
        },
        "industry": {
            "type": "string", 
            "description": "所屬行業",
        },
        "employee_count": {
            "type": "integer",
            "description": "員工總數",
            "default": None,
        },
    },
    "required": ["company_name", "industry"],
}

structured_llm = llm.with_structured_output(json_schema)
result = structured_llm.invoke("分析一下騰訊公司")
print(result)
# 輸出: {'company_name': '騰訊', 'industry': '互聯網科技', 'employee_count': 110715}

LangGraph中的完整應用示例

下面是一個完整的LangGraph應用示例,展示如何在工作流中使用結構化輸出:

import json
from pydantic import BaseModel, Field
from langchain_core.messages import HumanMessage, AIMessage
from langchain_deepseek import ChatDeepSeek
from langgraph.graph import StateGraph, MessagesState, END
from dotenv import load_dotenv

load_dotenv()

# 定義結構化輸出模型
class AnalysisResult(BaseModel):
    """文本分析結果"""
    topic: str = Field(descriptinotallow="文本主要主題")
    summary: str = Field(descriptinotallow="內容摘要,不超過100字")
    keywords: list[str] = Field(descriptinotallow="提取的關鍵詞列表")
    sentiment: str = Field(descriptinotallow="情感傾向:積極/消極/中性")

# 初始化模型
model = ChatDeepSeek(model="deepseek-chat")
structured_llm = model.with_structured_output(AnalysisResult).with_config(tags=["文本分析器"])

# 定義分析節點
def analysis_node(state: MessagesState):
    """對輸入文本進行結構化分析"""
    result = structured_llm.invoke(state["messages"])
    print(f"分析結果: {result}")
    
    # 將分析結果轉換為AIMessage
    response_content = f"""
?? 分析報告
主題: {result.topic}
摘要: {result.summary}
關鍵詞: {', '.join(result.keywords)}
情感傾向: {result.sentiment}
    """.strip()
    
    return {"messages": [AIMessage(cnotallow=response_content)]}

# 構建LangGraph工作流
workflow = StateGraph(MessagesState)
workflow.add_node("分析", analysis_node)
workflow.set_entry_point("分析")
workflow.add_edge("分析", END)

# 編譯圖
graph = workflow.compile()

# 測試用例
def test_analysis():
    """測試文本分析功能"""
    test_text = """
    人工智能技術正在快速發展,特別是大語言模型的出現,
    為各個行業帶來了前所未有的變革機會。從自動化客服到智能寫作,
    從代碼生成到數據分析,AI正在重塑我們的工作方式。
    雖然技術發展令人興奮,但我們也需要關注AI倫理和安全性問題。
    """
    
    graph_input = {"messages": [HumanMessage(cnotallow=f"請分析以下文本:{test_text}")]}
    
    # 運行分析
    result = graph.invoke(graph_input)
    print("="*50)
    print("最終輸出:")
    print(result["messages"][-1].content)

# 執行測試
if __name__ == "__main__":
    test_analysis()

多模式選擇

有時我們需要讓模型在多個輸出格式之間進行選擇。最簡單的方法是創建一個具有Union類型屬性的父模式:

from typing import Union
from pydantic import BaseModel, Field

class Joke(BaseModel):
    """笑話內容"""
    setup: str = Field(descriptinotallow="笑話的鋪墊部分")
    punchline: str = Field(descriptinotallow="笑話的笑點部分")
    rating: Optional[int] = Field(default=None, descriptinotallow="有趣程度,1-10分")

class ConversationalResponse(BaseModel):
    """普通對話回應"""
    response: str = Field(descriptinotallow="對用戶查詢的對話式回應")

class FinalResponse(BaseModel):
    """最終輸出,可以是笑話或普通回應"""
    final_output: Union[Joke, ConversationalResponse]

structured_llm = llm.with_structured_output(FinalResponse)

# 測試不同類型的輸入
print("=" * 30)
print("請求笑話:")
result1 = structured_llm.invoke("給我講個關于程序員的笑話")
print(result1)

print("=" * 30)
print("普通對話:")
result2 = structured_llm.invoke("你今天怎么樣?")
print(result2)

流式輸出支持

當輸出類型是字典時(使用TypedDict類或JSON Schema定義時),我們可以從結構化模型中進行流式輸出:

from typing_extensions import Annotated, TypedDict

class NewsSummary(TypedDict):
    """新聞摘要信息"""
    title: Annotated[str, ..., "新聞標題"]
    summary: Annotated[str, ..., "新聞摘要內容"]
    keywords: Annotated[list[str], ..., "新聞關鍵詞"]

structured_llm = llm.with_structured_output(NewsSummary)

print("流式輸出示例:")
for chunk in structured_llm.stream("總結今天的科技新聞"):
    print(chunk)

高級技巧

1. 原始輸出處理

通過設置include_raw=True,可以獲取原始輸出,便于調試和錯誤處理:

structured_llm = llm.with_structured_output(AnalysisResult, include_raw=True)

result = structured_llm.invoke("分析人工智能發展")
print("原始輸出:", result['raw'])
print("解析結果:", result['parsed'])
print("解析錯誤:", result['parsing_error'])

2. 指定輸出方法

對于支持多種結構化輸出方法的模型,可以通過method參數指定使用的方法:

# 使用JSON模式
structured_llm = llm.with_structured_output(AnalysisResult, method="json_mode")

最佳實踐

  1. 選擇合適的模式類型:
  • 需要運行時驗證 → 使用Pydantic的BaseModel
  • 僅需靜態類型檢查 → 使用TypedDict
  • 需要流式輸出 → 使用TypedDict或JSON Schema
  1. 提供清晰的字段描述:字段的名稱和描述對模型理解輸出格式非常重要
  2. 使用中文字段名:在中文應用場景中,使用中文字段名可以提高模型的理解準確性
  3. 合理設置可選字段:使用Optional類型和默認值來處理不確定的信息

總結

結構化輸出是現代AI應用開發中的重要技術。通過LangGraph的.with_structured_output()方法,我們可以輕松讓大語言模型返回格式化的數據,提高應用的可靠性和可維護性。

無論是使用Pydantic進行嚴格的數據驗證,還是使用TypedDict進行靈活的字典操作,或是直接使用JSON Schema,都能滿足不同場景下的需求。關鍵是根據具體的應用場景選擇最合適的實現方式。

在實際項目中,建議優先使用Pydantic方式,因為它提供了最好的類型安全和數據驗證功能。對于需要流式輸出的場景,則可以考慮使用TypedDict方式。

通過合理運用這些技術,我們可以構建更加健壯和高效的AI應用系統。

責任編輯:武曉燕 來源: ChallengeHub
相關推薦

2010-07-16 15:23:34

Perl格式化輸出

2010-07-16 14:37:26

Perl格式化輸出

2018-04-03 14:00:03

結構化數據非結構化數據數據庫

2023-12-26 12:12:01

模型訓練

2021-12-12 08:37:18

結構化數據非結構化數據數據

2010-07-15 11:29:25

Perl格式化輸出

2024-05-27 00:32:45

2024-01-08 22:03:22

python代碼開發

2009-10-15 13:49:23

結構化布線系統

2011-03-01 09:39:51

結構化布線

2010-07-16 15:44:57

Perl格式化輸出

2010-07-16 16:00:08

Perl格式化輸出

2024-05-10 12:52:01

2010-07-15 11:16:25

Perl格式化輸出

2020-09-02 07:19:41

printf 格式化輸出Unix

2010-07-21 14:25:24

Perl格式化輸出

2023-12-25 15:00:18

結構化布線光纖

2019-09-25 08:35:21

非結構化數據人工智能數據科學

2023-09-12 07:01:33

非結構化數據商業智能
點贊
收藏

51CTO技術棧公眾號

国产一区白浆| 日韩高清一级| 亚洲欧美偷拍另类a∨色屁股| 欧美极品少妇与黑人| 欧美熟妇精品一区二区蜜桃视频| 麻豆tv入口在线看| 亚欧美中日韩视频| 中文字幕综合一区| 欧洲熟妇的性久久久久久| 日本电影欧美片| 亚洲男人电影天堂| 91夜夜未满十八勿入爽爽影院 | 激情五月婷婷小说| 台湾佬综合网| 欧美一区二区二区| wwwxxx黄色片| 欧美高清另类hdvideosexjaⅴ| 国内精品久久久久影院一蜜桃| 一区二区三区美女xx视频| 成年人免费在线播放| 看黄网站在线| 久久久不卡网国产精品一区| 97久久天天综合色天天综合色hd| 丰满少妇高潮久久三区| 激情婷婷综合| 亚洲国产精久久久久久久| 尤物国产在线观看| 欧美大电影免费观看| 亚洲小说欧美激情另类| 精品国产_亚洲人成在线| 91精品国产乱码久久久张津瑜| 日本一区福利在线| 欧美一区二区三区四区久久| 欧美黄网在线观看| 91福利在线视频| 国产精品中文字幕一区二区三区| 乱亲女秽乱长久久久| 国产又爽又黄无码无遮挡在线观看| 日韩精品影片| 黑人巨大精品欧美一区二区| 99久久久精品视频| 手机av免费在线| 亚洲欧美另类久久久精品| 亚洲a∨一区二区三区| 欧洲亚洲精品视频| aaa国产一区| 国产一区自拍视频| 制服丝袜在线一区| 先锋资源久久| 久久久www成人免费精品| 手机看片日韩av| 国产精品免费大片| 亚洲欧美激情另类校园| 粉嫩av蜜桃av蜜臀av| 亚洲影院天堂中文av色| 亚洲精品日韩欧美| 久久久久亚洲av成人无码电影| 国产精品久久久久久久久久辛辛| 欧美日韩亚洲一区二区| 天堂av免费看| 在线免费观看a视频| 亚洲婷婷综合久久一本伊一区| 精品一区国产| 欧美在线一卡| 国产欧美一区二区精品婷婷 | 久久男人av| 亚洲第一视频网站| 五十路六十路七十路熟婆| 欧美电影在线观看完整版| 欧美男男青年gay1069videost| 五十路熟女丰满大屁股| 涩涩av在线| 亚洲愉拍自拍另类高清精品| 国产精品自拍合集| 19禁羞羞电影院在线观看| 精品久久久久久中文字幕大豆网| 黄色一级片av| 黄页网站大全在线免费观看| 国产精品国产馆在线真实露脸| 蜜桃av色综合| 91最新在线| 亚洲欧美日韩成人高清在线一区| 色吧亚洲视频| av网站在线播放| 亚洲激情在线播放| 国产又爽又黄ai换脸| 邻居大乳一区二区三区| 国产精品嫩草影院com| 欧美一级爱爱| 麻豆网站在线看| 亚洲制服欧美中文字幕中文字幕| 福利在线小视频| 黄色在线观看www| 亚洲.国产.中文慕字在线| 欧美日韩亚洲一| 欧美久久天堂| 欧美日产在线观看| 日本国产在线视频| 岛国av一区| 在线播放日韩专区| 精品国产乱码一区二区| 久久精品国产精品亚洲红杏| 国产精品日日摸夜夜添夜夜av| 国产91精品看黄网站在线观看| 亚洲视频成人| 成人福利免费观看| 青梅竹马是消防员在线| 国产亚洲1区2区3区| 日本国产中文字幕| 国产激情久久| 亚洲精品xxxx| 37p粉嫩大胆色噜噜噜| 在线视频亚洲专区| 欧美日本高清视频| 中文字幕在线观看国产| 91丝袜高跟美女视频| www.-级毛片线天内射视视| 日韩成人动漫| 亚洲福利在线播放| 极品颜值美女露脸啪啪| 麻豆精品蜜桃视频网站| 欧美日本韩国国产| 2001个疯子在线观看| 91精品国产综合久久久久久久久久| 国产高清av片| 日韩1区2区| 日本午夜精品理论片a级appf发布| av手机天堂网| 91一区二区在线| 黄色三级中文字幕| 欧美成人精品午夜一区二区| 国产一区二区精品丝袜| 丝袜美腿小色网| 美女脱光内衣内裤视频久久网站 | 粉嫩的18在线观看极品精品| 神马久久久久久| 国产天堂第一区| 久久免费看少妇高潮| 久久久久久久久久久99| 欧美国产日韩电影| 国产午夜精品视频免费不卡69堂| 成人免费黄色小视频| 久久精品国产99久久6| 国产不卡一区二区在线观看| dj大片免费在线观看| 欧美日韩国产综合一区二区| 国产精品国产三级国产专业不| 亚洲国产一区二区在线观看 | 人妻少妇精品一区二区三区| 手机福利在线| 亚洲色图在线播放| 亚洲综合av在线播放| 欧美亚洲激情| 国产精品自在线| 国产www免费观看| 亚洲美女区一区| 特种兵之深入敌后| 欧美天天视频| 久久久神马电影| 欧美电影免费观看网站| 亚洲天堂av电影| 中文在线字幕av| 中文字幕亚洲视频| 善良的小姨在线| 欧美黄色精品| 国产一区二区无遮挡 | 日韩精品中文字幕视频在线| 特一级黄色大片| 久久精品视频网| 国产成人一区二区三区别| 国偷自产av一区二区三区| 97视频网站入口| 黄色片视频在线观看| 欧美日韩aaa| 国产在线视频二区| 91美女视频网站| 爱爱爱爱免费视频| 欧美激情四色| 玖玖玖精品中文字幕| 国产私拍福利精品视频二区| 久久精视频免费在线久久完整在线看| 无码一区二区三区在线观看| 欧美激情在线一区二区三区| 日本一二三区在线| 国产毛片久久| 亚洲一区三区电影在线观看| 亚洲网址在线观看| 国产国语videosex另类| 青青国产在线| 精品少妇av| 欧美午夜精品一区二区三区| 日本黄区免费视频观看| 福利一区福利二区| 在线电影看在线一区二区三区| 亚洲精品国产嫩草在线观看| 久久久国产精彩视频美女艺术照福利| 中文字幕 日韩有码| 日本一区二区三区在线不卡 | 欧美aaa在线| 久久国产精品一区二区三区四区| 日本三级在线观看网站| 亚洲免费av片| 国产日韩欧美一区二区东京热| 亚洲欧美中日韩| 女人高潮一级片| 夜夜嗨一区二区| 艳母动漫在线免费观看| 中文字幕中文字幕精品| 91精品国产综合久久久久久丝袜| 18+视频在线观看| 日韩亚洲电影在线| 久久久久亚洲AV| 国产女人水真多18毛片18精品视频| 777米奇影视第四色| 午夜电影亚洲| 亚洲精品视频一二三| 国内不卡的一区二区三区中文字幕 | 日本高清久久久| 奶水喷射视频一区| 成人免费视频91| 亚洲五月综合| 亚洲精品白虎| 国产欧美日韩精品一区二区三区| 国产精品无av码在线观看| 国产精选在线| 久久久久久久久爱| 成人无遮挡免费网站视频在线观看| 精品国精品国产尤物美女| 91在线公开视频| 欧美性生交片4| 亚洲 日本 欧美 中文幕| 婷婷久久综合九色综合伊人色| 一级片视频免费看| 久草这里只有精品视频| 97中文字幕在线| 女人av一区| 91免费看片网站| 四虎国产精品免费久久| 国产精品一二三在线| 动漫一区二区| 欧美激情xxxx性bbbb| 国产成人在线视频免费观看| yw.139尤物在线精品视频| 午夜视频在线观看网站| 精品乱人伦一区二区三区| av在线亚洲天堂| 欧美一级黄色片| 精品人妻一区二区三区麻豆91| 精品国产乱码久久久久久虫虫漫画| 91狠狠综合久久久久久| 欧美激情一区三区| 亚洲精品自拍视频在线观看| 国产精品情趣视频| 男人在线观看视频| 亚洲激情第一区| 国产精品6666| 一本色道久久加勒比精品 | 美女一区2区| 国产一区二区视频在线免费观看 | 国产精品果冻传媒潘| 综合激情五月婷婷| 精品婷婷色一区二区三区蜜桃| 伊人久久大香线蕉综合影院首页| 欧美一级大胆视频| 户外露出一区二区三区| 国产裸体写真av一区二区 | ㊣最新国产の精品bt伙计久久| 人妻丰满熟妇aⅴ无码| 久久婷婷成人综合色| 在线播放av网址| 国产一区二三区| 黄色三级视频片| 国产日韩视频| 91视频免费版污| 99精品国产一区二区青青牛奶| 日本久久高清视频| 亚洲黄色在线| 午夜免费一区二区| 亚洲影视在线| 99sesese| 成人av网站免费观看| 天天躁日日躁aaaa视频| 成人免费在线观看入口| 亚洲国产综合久久| 欧美亚洲动漫精品| 不卡的日韩av| 亚洲人线精品午夜| 亚洲丝袜精品| 国产精品第10页| 日本精品在线播放| 92看片淫黄大片欧美看国产片| 激情中国色综合| 国产综合色一区二区三区| 欧美丝袜激情| 精品无码国产一区二区三区av| 激情久久久久| 免费看黄色一级大片| 成人午夜视频网站| 四虎国产成人精品免费一女五男| 中文字幕av在线一区二区三区| 西西444www无码大胆| 亚洲一区二区三区小说| 中文字幕+乱码+中文乱码91| 欧美日韩精品一区二区天天拍小说 | 亚洲午夜久久久久久久久| 国产免费成人在线视频| 久久精品色妇熟妇丰满人妻| 五月天婷婷综合| 99精品视频在线播放免费| 亚洲天堂第二页| 成人高潮aa毛片免费| 成人一区二区电影| 欧美日韩高清| 看av免费毛片手机播放| 成人小视频免费在线观看| 杨钰莹一级淫片aaaaaa播放| 欧美午夜不卡在线观看免费| 天堂网av2014| 欧美高清视频在线| 欧美电影院免费观看| 一区二区三区四区在线视频| 久久国产福利| 女同毛片一区二区三区| 亚洲国产成人porn| 国产人妖在线播放| 久久久电影免费观看完整版| 欧美激情三区| 天天人人精品| 天堂成人国产精品一区| 992kp免费看片| 17c精品麻豆一区二区免费| 一区二区三区亚洲视频| 精品国产乱子伦一区| yellow91字幕网在线| 98精品在线视频| 第四色中文综合网| 亚洲精品一区国产精品| 老司机午夜免费精品视频| av网站免费在线播放| 亚洲欧洲在线观看av| 日本在线视频免费观看| 欧美天堂一区二区三区| 高h视频在线| 国产精品久久在线观看| 青青一区二区三区| 激情黄色小视频| 亚洲欧美一区二区三区极速播放| 一级成人黄色片| 亚洲热线99精品视频| 日本精品600av| 99爱精品视频| 好看的亚洲午夜视频在线| 欧美激情一区二区三区p站| 中文字幕av资源一区| 日韩 欧美 亚洲| 亚洲精品久久7777777| 美女的胸无遮挡在线观看| 久久精品国产综合精品| 久久国产一二区| 中文字幕第24页| 欧美日韩成人在线一区| a在线免费观看| 国产日韩久久| 视频在线观看一区二区三区| 日韩av片在线免费观看| 欧美性高跟鞋xxxxhd| 国产乱理伦片a级在线观看| 国产免费久久av| 欧美日本国产| 亚洲天堂成人av| 欧美网站一区二区| 国产综合在线观看| 国产日韩精品在线观看| 自拍视频亚洲| 天堂久久久久久| 在线成人高清不卡| gogo高清午夜人体在线| 日本成人三级电影网站| 亚洲伊人观看| 黑人狂躁日本娇小| 精品99一区二区| yy6080久久伦理一区二区| 国产成人免费高清视频| 亚洲免费专区| 亚洲欧美另类自拍| 日韩电影毛片| 在线免费观看一区二区三区| 成人一区二区三区| 一级久久久久久| 欧美极品欧美精品欧美视频| 91麻豆精品国产综合久久久| 日韩亚洲欧美视频| 国产精品久久久久永久免费观看| 在线观看亚洲一区二区| 欧美国产日本在线| 国产一区国产二区国产三区| 性色av浪潮av| 欧美在线看片a免费观看| 日本性爱视频在线观看| 亚洲欧洲一区二区福利|