偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java 程序員從零開(kāi)始學(xué) LangChain —模型組件

人工智能
LangChain? 的模型組件有三種類(lèi)型,分別是 LLM? 大語(yǔ)言模型,Chat Model? 聊天模型和文本嵌入模型 Text Embedding Models。

前面的文章了不起給大家介紹了 LangChain 的一些基本知識(shí),沒(méi)看過(guò)的小伙伴可以點(diǎn)擊這里去看下,今天了不起給大家介紹一下 LangChain 的第一個(gè)很重要的組件模型 Model。

注意這里說(shuō)的模型是指 LangChain 的模型組件,而不是指類(lèi)似于 OpenAI 的語(yǔ)言模型,之所以 LangChain 會(huì)出現(xiàn)模型組件就是因?yàn)闃I(yè)內(nèi)的語(yǔ)言模型太多了,除了 OpenAI 這家公司的語(yǔ)言模型之外,還很有很多其他家的。

LangChain 的模型組件有三種類(lèi)型,分別是 LLM 大語(yǔ)言模型,Chat Model 聊天模型和文本嵌入模型 Text Embedding Models。

LLM 大語(yǔ)言模型

LLM 作為最基本的一種模型組件,輸入和輸出都只支持字符串,在大部分的場(chǎng)景下就可以滿足我們的需求了。我們可以在 Colab([https://colab.research.google.com) 上面直接寫(xiě) Python 代碼

舉個(gè)栗子

下面是一個(gè) case,先安裝依賴,再執(zhí)行下面的代碼。

pip install openai
pip install langchain
import os
# 配置OpenAI 的 API KEY
os.environ["OPENAI_API_KEY"] ="sk-xxx"
# 從 LangChain 中導(dǎo)入 OpenAI 的模型
from langchain.llms import OpenAI
# 三個(gè)參數(shù)分別代表OpenAI 的模型名稱(chēng),執(zhí)行的次數(shù)和隨機(jī)性,數(shù)值越大越發(fā)散
llm = OpenAI(model_name="text-davinci-003", n=2, temperature=0.3)
llm.generate(["給我講一個(gè)故事", "給我講一個(gè)笑話"])

運(yùn)行的結(jié)果如下

圖片

Chat Model 聊天模型

Chat Model 是基于 LLM 模型的,只不過(guò) Chat Model 相對(duì)于 LLM 模型組件間輸入和輸出更加結(jié)構(gòu)化,輸入和輸出的參數(shù)的類(lèi)型都是 Chat Model,而不是簡(jiǎn)單的字符串。常用的 Chat Model 類(lèi)型有如下幾種

  1. AIMessage:用來(lái)保存 LLM 的響應(yīng),以便在下次請(qǐng)求時(shí)把這些信息傳回給 LLM。
  2. HumanMessage:發(fā)送給 LLMs 的提示信息,比如“實(shí)現(xiàn)一個(gè)快速排序方法”
  3. SystemMessage:設(shè)置 LLM 模型的行為方式和目標(biāo)。你可以在這里給出具體的指示,比如“作為一個(gè)代碼專(zhuān)家”,或者“返回 json 格式”。
  4. ChatMessage:ChatMessage 可以接收任意形式的值,但是在大多數(shù)時(shí)間,我們應(yīng)該使用上面的三種類(lèi)型。

舉個(gè)栗子

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
chat = ChatOpenAI(temperature=0)

messages = [
        SystemMessage(cnotallow="返回的數(shù)據(jù)markdown 語(yǔ)法進(jìn)行展示,代碼使用代碼塊包裹"),
        HumanMessage(cnotallow="用 Java 實(shí)現(xiàn)一個(gè)二分查找算法")
]

print(chat(messages))

生成的內(nèi)容字符串形式如下

cnotallow='二分查找算法,也稱(chēng)折半查找算法,是一種在有序數(shù)組中查找特定元素的搜索算法。該算法的時(shí)間復(fù)雜度為 O(log n)。\n\n以下是 Java 實(shí)現(xiàn)二分查找算法的代碼:\n\njava\npublic class BinarySearch {\n public static int binarySearch(int[] arr, int target) {\n int left = 0;\n int right = arr.length - 1;\n while (left <= right) {\n int mid = (left + right) / 2;\n if (arr[mid] == target) {\n return mid;\n } else if (arr[mid] < target) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n return -1;\n }\n\n public static void main(String[] args) {\n int[] arr = {1, 3, 5, 7, 9};\n int target = 5;\n int index = binarySearch(arr, target);\n if (index != -1) {\n System.out.println("目標(biāo)元素 " + target + " 在數(shù)組中的下標(biāo)為 " + index);\n } else {\n System.out.println("目標(biāo)元素 " + target + " 不在數(shù)組中");\n }\n }\n}\n\n\n在上述代碼中,binarySearch 方法接收一個(gè)有序數(shù)組和一個(gè)目標(biāo)元素,返回目標(biāo)元素在數(shù)組中的下標(biāo),如果目標(biāo)元素不在數(shù)組中,則返回 -1。\n\n在 binarySearch 方法中,使用兩個(gè)指針 left 和 right 分別指向數(shù)組的左右兩端,然后在一個(gè) while 循環(huán)中不斷縮小查找范圍,直到找到目標(biāo)元素或者查找范圍為空。在每次循環(huán)中,計(jì)算中間位置 mid,然后將目標(biāo)元素與中間位置的元素進(jìn)行比較,如果相等,則返回中間位置的下標(biāo);如果目標(biāo)元素比中間位置的元素大,則將左指針移到中間位置的右邊;如果目標(biāo)元素比中間位置的元素小,則將右指針移到中間位置的左邊。' additional_kwargs={} example=False

將 content 里面的內(nèi)容提取出來(lái),用 markdown 語(yǔ)法展示出來(lái)是這樣的

圖片

使用這個(gè)模型組件,可以進(jìn)行一些角色的預(yù)設(shè),然后來(lái)定制個(gè)性化的問(wèn)答。

Prompts template

from langchain.chat_models import ChatOpenAI
from langchain.prompts import (
    ChatPromptTemplate,
    PromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
system_template="你是一個(gè)把{input_language}翻譯成{output_language}的助手"
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
human_template="{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
messages = chat_prompt.format_prompt(input_language="英語(yǔ)", output_language="漢語(yǔ)", text="I love programming.")

print(messages)

chat = ChatOpenAI(temperature=0)

print(chat(messages.to_messages()))

output

messages=[SystemMessage(cnotallow='你是一個(gè)把英語(yǔ)翻譯成漢語(yǔ)的助手', additional_kwargs={}), HumanMessage(cnotallow='I love programming.', additional_kwargs={}, example=False)] cnotallow='我喜歡編程。' additional_kwargs={} example=False

文本嵌入模型 Text Embedding Models

文本嵌入模型組件相對(duì)比較難理解,這個(gè)組件接收的是一個(gè)字符串,返回的是一個(gè)浮點(diǎn)數(shù)的列表。在 NLP 領(lǐng)域中 Embedding 是一個(gè)很常用的技術(shù),Embedding 是將高維特征壓縮成低維特征的一種方法,常用于自然語(yǔ)言處理任務(wù)中,如文本分類(lèi)、機(jī)器翻譯、推薦系統(tǒng)等。它將單詞、短語(yǔ)、句子等文本中的離散數(shù)據(jù)映射到實(shí)數(shù)域上的向量,這些向量可以被神經(jīng)網(wǎng)絡(luò)更好地處理和學(xué)習(xí)。通過(guò) Embedding,文本數(shù)據(jù)可以被更好地表示和理解,提高了模型的表現(xiàn)力和泛化能力。

舉個(gè)栗子

from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
text = "hello world"

query_result = embeddings.embed_query(text)
doc_result = embeddings.embed_documents([text])

print(query_result)
print(doc_result)

output

[-0.01491016335785389, 0.0013780705630779266, -0.018519161269068718, -0.031111136078834534, -0.02430146001279354, 0.007488010451197624,0.011340680532157421, 此處省略 .......

圖片

總結(jié)

今天給大家介紹了一下 LangChain 的模型組件,有了模型組件我們就可以更加方便的跟各種 LLMs 進(jìn)行交互了。

參考資料

官方文檔:https://python.langchain.com/en/latest/modules/models.html

責(zé)任編輯:武曉燕 來(lái)源: Java極客技術(shù)
相關(guān)推薦

2023-06-09 07:34:16

Java提示詞組件

2022-02-16 22:57:57

Mitmproxy抓包工具

2024-08-01 11:21:52

2015-08-24 14:59:06

Java線程

2011-04-06 15:55:50

開(kāi)發(fā)webOS程序webOS

2024-07-31 08:14:17

2024-12-09 09:44:34

機(jī)器學(xué)習(xí)模型分類(lèi)器

2015-08-26 10:01:20

iOS開(kāi)發(fā)

2024-07-30 09:22:44

PostgreSQL數(shù)據(jù)庫(kù)工具

2023-02-20 09:55:00

微服務(wù)框架單體架構(gòu)

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2015-03-06 17:24:56

Android應(yīng)用安全安卓應(yīng)用安全

2010-05-26 17:35:08

配置Xcode SVN

2018-09-14 17:16:22

云計(jì)算軟件計(jì)算機(jī)網(wǎng)絡(luò)

2024-05-15 14:29:45

2011-04-29 10:46:32

iPhone開(kāi)發(fā)入門(mén)iPhoneiOS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)