久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

LangChain學(xué)習(xí)筆記

 jacklopy 2024-12-31 發(fā)布于河北

前言

什么是LangChain

LangChain 是一個開發(fā)由語言模型驅(qū)動的應(yīng)用程序的框架,。

LanChain基于為LangChain Model Application提供一下能力而設(shè)計:

  • 上下文感知能力:將語言模型連接到上下文源(prompt instructions, few shot examples, content to ground its response in, etc.
  • 推理能力:依靠語言模型進(jìn)行推理(關(guān)于如何根據(jù)提供的上下文進(jìn)行回答、采取什么操作等)

Model I/O

對于任何 Language Model Application 來說,,Model都是最核心的部分,。

LangChain 提供了與任何 Model 進(jìn)行交互的的構(gòu)建模塊,。以下是 LangChain 為 Model I/O 這一流程抽象的三個重要組件:

Language Models

LangChain 中的 Language Model 模塊是真正與 Language Model 進(jìn)行交互的 Building Block

當(dāng)前 LangChain 主要為下面兩種類型的 Language Model 提供接口和集成:

  • LLMs: 將文本字符串作為輸入并返回文本字符串的模型( text in ? text out
  • Chat models: 由語言模型支持但將聊天消息列表作為輸入并返回聊天消息的模型 ( chat message in ? chat message out ,, chat message 一般有 text + role 組成, role 通常包括 s**ystem , human, ai)**

LLMs

Large Language Model(LLM)是LangChain的核心組件, 通過text in ? text out模式來使用的Language Model,。

LangChain提供一個標(biāo)準(zhǔn)接口來與許多不同的LLM進(jìn)行交互, 在 中可以看到當(dāng)前收錄的各種LLMs。 所有 LLM 都實(shí)現(xiàn)了Runnable 接口,,該接口附帶 invoke ,ainvokebatchabatchstreamastreamdeng 方法的默認(rèn)實(shí)現(xiàn)..

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
from langchain.llms.openai import OpenAI

llm = OpenAI()
response = llm.invoke("四大名著指的是什么?")
print(response)

輸出:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
(LLM) ?  language_model python3 00_language_model.py
四大名著指的是《西游記》,、《水滸傳》、《紅樓夢》和《三國演義》,。
(LLM) ?  language_model

Chat Models

Chat Model 是 LLM 的變體,。Chat Model 底層仍然使用的是 LLM,但是它提供的 Interface 有了比較大的差異,。

Chat Model 抽象了Chat這一場景下的使用模式,,由text in ? text out模式變成了chat message in ? chat message out

LangChain目前支持的chat message類型有 AIMessageHumanMessage,、 SystemMessage,、 FunctionMessageChatMessage. 其中 ChatMessage可以接受任意角色參數(shù)。

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
from langchain.chat_models import ChatOpenAI
from langchain.schema.messages import HumanMessage, SystemMessage

messages = [
    SystemMessage(content="你一名唐詩鑒賞專家"),
    HumanMessage(content="《蜀道難》"),
]

chat = ChatOpenAI()
print(chat.invoke(messages))

輸出:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
(LLM) ?  language_model python3 00_chat_modes.py
content='《蜀道難》是唐代文學(xué)家李白創(chuàng)作的一首抒發(fā)壯志豪情的長詩。這首詩以描寫艱難險阻的蜀道為背景,,表達(dá)了李白對生活困難的挑戰(zhàn)精神和不屈的意志,。\n\n詩中首先描繪了蜀道的險峻和艱難,,以山峰陡峭,、道路崎嶇為景,展現(xiàn)了蜀道的險阻和危險,,同時也反映了人生道路的曲折困難,。詩中用“青泥何盤盤,百步九折縈巖巒”來形容蜀道的險峻,,這種描寫手法生動地表現(xiàn)了蜀道的險阻之處,。\n\n接著,詩人轉(zhuǎn)而描繪了自己在蜀道上的行進(jìn),,以及在艱難險阻中的堅持和奮斗,。詩人用“路盡燈火落,石墮天壇空”來描述路途的終點(diǎn)和自己的迷茫,,以及用“崖峽千尋翠”來形容自己與險峰相對的壯麗景色,。這種對比描寫,既表現(xiàn)了詩人在困難中的堅持,,也表達(dá)了對自然景色的贊美,。\n\n最后,詩人表達(dá)了自己的豪情壯志和不屈的決心,。他用“昨夜四無鄰,,今宵五陵六扇”來表達(dá)自己的孤獨(dú)和辛苦,以及用“想當(dāng)年,,金戈鐵馬,,氣吞萬里如虎”來表達(dá)自己的豪情壯志。這種豪情壯志的表達(dá),,體現(xiàn)了李白追求自由,、奔放的個性和對人生的樂觀態(tài)度。\n\n《蜀道難》以其雄渾豪情和獨(dú)特的描寫手法,,展現(xiàn)了李白的文學(xué)才華和個人精神,。它通過對自然景色和個人經(jīng)歷的描繪,表達(dá)了對困難的挑戰(zhàn)和對生活的熱愛,,具有濃厚的時代氣息和藝術(shù)魅力,。'
(LLM) ?  language_model

Prompts

Prompts 即提示詞,在 Language Model 中,,Prompts是指用戶的一些列指令和輸入,。

Prompts 用于指導(dǎo)Model的響應(yīng),幫助 Language Model 理解上下文,并生成相關(guān)和連貫的輸出(如回答問題,、拓寫句子和總結(jié)問題),。 Prompts 是決定 Language Model 輸出內(nèi)容的唯一輸入。

語言模型的提示是用戶提供的一組指令或輸入,,用于指導(dǎo)模型的響應(yīng),,幫助它理解上下文并生成相關(guān)且連貫的基于語言的輸出,例如回答問題,、完成句子或進(jìn)行對話. LangChain provides several classes and functions to help construct and work with prompts.

Langchain 提供了許多類和函數(shù)用于幫助構(gòu)建和補(bǔ)充Prompt,。 Prompt templatesExample selectors 是其中最重要的構(gòu)建模塊。

Prompt Templates

Prompt Template 是預(yù)定義的一系列指令和輸入?yún)?shù)的prompt模版,,支持output instruction(輸出格式指令), partial input(提前指定部分輸入?yún)?shù)), examples(輸入輸出示例)等。

LangChain 的 Prompt Templates 提供了創(chuàng)建和使用prompt模板的工具,。

下面是一個Prompt 模板的簡單示例(使用了 PromptTemplate 包)

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI() 

#### PromptTemplate ####
prompt_template = PromptTemplate.from_template(
    "Tell me a {adjective} joke about {content}"
    )
prompt = prompt_template.format(adjective="funny", content="chickens")
print(prompt)
print(llm.invoke(prompt))

輸出:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
(LLM) ?  prompt_template python3 00.py
Tell me a funny joke about chickens
content='Why did the chicken go to the seance?\n\nTo talk to the other side!'
(LLM) ?  prompt_template

Prompts Templates 也提供了 ChatPromptTemplate 的支持

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI()
#### ChatPromptTemplate ####
chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful ai bot, your name is {name}"),
        ("human", "Hello, how are you doing?"),
        ("ai", "I am doing well, thanks!"),
        ("human", "{content}"),
    ]
)
messages = chat_template.format_messages(name="windeal", content="What is your name")
print(messages)
print(llm(messages))

輸出:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
(LLM) ?  prompt_template python3 00.py
[SystemMessage(content='You are a helpful ai bot, your name is windeal'), HumanMessage(content='Hello, how are you doing?'), AIMessage(content='I am doing well, thanks!'), HumanMessage(content='What is your name')]
content='My name is Windeal. How can I assist you today?'
(LLM) ?  prompt_template

Example Selects

Prompts Templates 提供了靈活的,,將部分內(nèi)容參數(shù)化的構(gòu)建Prompts的方式,但還不夠,。在一些場景中我們可能需要讓 LLM完成更高質(zhì)量的推理回答,。這時簡單的 instruction + inputprompt

已經(jīng)不足以滿足需求。 如果能為prompt補(bǔ)充一些針對具體問題的示例,,通常能夠獲得更好的輸出,。

LangChain 提供了 Example Selects 這一組件,用于在有大量示例時,,從中選擇需要包含在 Prompt 中的示例,。

Example Selects 的基類接口如下:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
class BaseExampleSelector(ABC):
    """Interface for selecting examples to include in prompts."""

    @abstractmethod
    def select_examples(self, input_variables: Dict[str, str]) -> List[dict]:
        """Select which examples to use based on the inputs."""

它需要定義的唯一方法是 select_examples 方法。該方法接受輸入變量,,然后返回示例列表,。如何選擇這些示例取決于每個具體的實(shí)現(xiàn)。

Output Parsers

Output Parsers 即輸出解析器,。

LLM 的輸出通常是text,, 但很多時候,我們希望它能以固定的格式輸出,,以便解析成結(jié)構(gòu)化的數(shù)據(jù),。 LangChain 將這一能力抽象成組件 Output Parsers

LangChain 中的 Output Parsers 是幫助構(gòu)建輸出的類,這些類需要實(shí)現(xiàn)以下兩個方法methods:

  • get_format_instructions: 該方法以字符串的方式返回有關(guān)如何格式化語言模型輸出的說明
  • parse : 一種接收字符串(假設(shè)是語言模型的響應(yīng))并將其解析為某種結(jié)構(gòu)的方法,。

LangChain提供了一些列預(yù)定義的類,,以下是一些常用的預(yù)定義的 Output Parsers

  • CommaSeparatedListOutputParser : 以List(逗號分隔的列表)形式輸出應(yīng)答。
  • DatetimeOutputParser : 將 LLM 輸出解析為日期時間格式
  • PydanticOutputParser : 指定任意 JSON 模式并查詢 LLM 以獲得符合該模式的 JSON 輸出,。
  • StructuredOutputParser :返回有多個文本字段的數(shù)據(jù)結(jié)構(gòu)
  • OutputFixingParser : 包裝一個額外的輸出解析器,,如果第一個解析器失敗,,它會調(diào)用另一個 LLM 來修復(fù)任何錯誤。
  • RetryOutputParser : 在遇到異常時再次嘗試以獲得更好的響應(yīng),。

使用示例:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from typing import List
from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from langchain.llms.openai import OpenAI
from langchain.pydantic_v1 import BaseModel, Field, validator

class Book(BaseModel):
    name: str = Field(description="書名")
    author: str = Field(description="作者")

# Here's another example, but with a compound typed field.
class Actor(BaseModel):
    book_list: List[Book] = Field(description="書籍列表")

parser = PydanticOutputParser(pydantic_object=Actor)

prompt = PromptTemplate(
    template="請介紹{subject}相關(guān)內(nèi)容. \n{format_instructions}\n",
    input_variables=["subject"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

llm = OpenAI()

_input = prompt.format_prompt(subject="中國四大名著")

output = llm(_input.to_string())

print(parser.parse(output))

輸出:

代碼語言:python
代碼運(yùn)行次數(shù):0
復(fù)制
(LLM) ?  output_parsers python3 json_parsers.py
book_list=[Book(name='《紅樓夢》', author='曹雪芹'), Book(name='《西游記》', author='吳承恩'), Book(name='《三國演義》', author='羅貫中'), Book(name='《水滸傳》', author='施耐庵')]
(LLM) ?  output_parsers

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多