成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 程序員從零開始學 LangChain —模型組件

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

前面的文章了不起給大家介紹了 LangChain 的一些基本知識,沒看過的小伙伴可以點擊這里去看下,今天了不起給大家介紹一下 LangChain 的第一個很重要的組件模型 Model。

注意這里說的模型是指 LangChain 的模型組件,而不是指類似于 OpenAI 的語言模型,之所以 LangChain 會出現模型組件就是因為業內的語言模型太多了,除了 OpenAI 這家公司的語言模型之外,還很有很多其他家的。

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

LLM 大語言模型

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

舉個栗子

下面是一個 case,先安裝依賴,再執行下面的代碼。

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

運行的結果如下

圖片

Chat Model 聊天模型

Chat Model 是基于 LLM 模型的,只不過 Chat Model 相對于 LLM 模型組件間輸入和輸出更加結構化,輸入和輸出的參數的類型都是 Chat Model,而不是簡單的字符串。常用的 Chat Model 類型有如下幾種

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

舉個栗子

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

messages = [
        SystemMessage(cnotallow="返回的數據markdown 語法進行展示,代碼使用代碼塊包裹"),
        HumanMessage(cnotallow="用 Java 實現一個二分查找算法")
]

print(chat(messages))

生成的內容字符串形式如下

cnotallow='二分查找算法,也稱折半查找算法,是一種在有序數組中查找特定元素的搜索算法。該算法的時間復雜度為 O(log n)。\n\n以下是 Java 實現二分查找算法的代碼:\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("目標元素 " + target + " 在數組中的下標為 " + index);\n } else {\n System.out.println("目標元素 " + target + " 不在數組中");\n }\n }\n}\n\n\n在上述代碼中,binarySearch 方法接收一個有序數組和一個目標元素,返回目標元素在數組中的下標,如果目標元素不在數組中,則返回 -1。\n\n在 binarySearch 方法中,使用兩個指針 left 和 right 分別指向數組的左右兩端,然后在一個 while 循環中不斷縮小查找范圍,直到找到目標元素或者查找范圍為空。在每次循環中,計算中間位置 mid,然后將目標元素與中間位置的元素進行比較,如果相等,則返回中間位置的下標;如果目標元素比中間位置的元素大,則將左指針移到中間位置的右邊;如果目標元素比中間位置的元素小,則將右指針移到中間位置的左邊。' additional_kwargs={} example=False

將 content 里面的內容提取出來,用 markdown 語法展示出來是這樣的

圖片

使用這個模型組件,可以進行一些角色的預設,然后來定制個性化的問答。

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="你是一個把{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="英語", output_language="漢語", text="I love programming.")

print(messages)

chat = ChatOpenAI(temperature=0)

print(chat(messages.to_messages()))

output

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

文本嵌入模型 Text Embedding Models

文本嵌入模型組件相對比較難理解,這個組件接收的是一個字符串,返回的是一個浮點數的列表。在 NLP 領域中 Embedding 是一個很常用的技術,Embedding 是將高維特征壓縮成低維特征的一種方法,常用于自然語言處理任務中,如文本分類、機器翻譯、推薦系統等。它將單詞、短語、句子等文本中的離散數據映射到實數域上的向量,這些向量可以被神經網絡更好地處理和學習。通過 Embedding,文本數據可以被更好地表示和理解,提高了模型的表現力和泛化能力。

舉個栗子

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, 此處省略 .......

圖片

總結

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

參考資料

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

責任編輯:武曉燕 來源: Java極客技術
相關推薦

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

開發webOS程序webOS

2024-07-31 08:14:17

2024-12-09 09:44:34

機器學習模型分類器

2023-02-20 09:55:00

微服務框架單體架構

2015-08-26 10:01:20

iOS開發

2024-07-30 09:22:44

PostgreSQL數據庫工具

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計算PaaS公有云

2018-04-18 07:01:59

Docker容器虛擬機

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構

2015-03-06 17:24:56

Android應用安全安卓應用安全

2010-05-26 17:35:08

配置Xcode SVN

2018-09-14 17:16:22

云計算軟件計算機網絡

2024-05-15 14:29:45

2011-04-29 10:46:32

iPhone開發入門iPhoneiOS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩成人 | 精产国产伦理一二三区 | 久久精品免费 | 人人做人人澡人人爽欧美 | 日韩精品专区在线影院重磅 | 懂色av一区二区三区在线播放 | 一级毛片,一级毛片 | 成人福利网 | 国产精品成人一区二区三区夜夜夜 | 亚洲高清视频在线观看 | 中文字幕亚洲欧美日韩在线不卡 | 国产日韩一区二区三免费高清 | 成人免费视频在线观看 | 亚洲黄色国产 | 综合五月| 成人在线免费观看 | 欧美性猛交 | 久久成人人人人精品欧 | 一级毛片免费视频观看 | 成人综合一区 | xxxxx免费视频 | 国产乱码精品一区二区三区五月婷 | 亚洲香蕉 | 草逼网站 | 日韩在线电影 | 国产精品久久久久一区二区三区 | 龙珠z在线观看 | 亚洲一区二区三区四区av | 蜜桃综合在线 | 国产乱码精品一区二区三区五月婷 | 国产精品美女久久久久久免费 | 色视频免费 | 日韩欧美国产一区二区三区 | 日韩成人免费视频 | 一区二区三区国产好 | 午夜成人在线视频 | 精品免费| 国产在线精品一区二区 | 国产日韩一区二区三区 | 亚洲国产精品一区二区三区 | 国产午夜精品久久久 |