LangChain的Hello World項(xiàng)目
共 6226字,需瀏覽 13分鐘
·
2024-06-05 23:38
點(diǎn)擊下方“JavaEdge”,選擇“設(shè)為星標(biāo)”
免責(zé)聲明~
任何文章不要過(guò)度深思!
萬(wàn)事萬(wàn)物都經(jīng)不起審視,因?yàn)槭郎蠜](méi)有同樣的成長(zhǎng)環(huán)境,也沒(méi)有同樣的認(rèn)知水平,更「沒(méi)有適用于所有人的解決方案」;
不要急著評(píng)判文章列出的觀點(diǎn),只需代入其中,適度審視一番自己即可,能「跳脫出來(lái)從外人的角度看看現(xiàn)在的自己處在什么樣的階段」才不為俗人。
怎么想、怎么做,全在乎自己「不斷實(shí)踐中尋找適合自己的大道」
pip install --upgrade langchain==0.0.279 -i https://pypi.org/simple
1 創(chuàng)建一個(gè)LLM
-
自有算力平臺(tái)+開(kāi)源大模型(需要有龐大的GPU資源)企業(yè)自己訓(xùn)練數(shù)據(jù) -
第三方大模型API(openai/百度文心/阿里通義千問(wèn)...)數(shù)據(jù)無(wú)所謂
讓LLM給孩子起具有中國(guó)特色的名字。
在LangChain中最基本的功能就是根據(jù)文本提示來(lái)生成新的文本
使用方法:predict
生成結(jié)果根據(jù)你調(diào)用的模型不同而會(huì)產(chǎn)生非常不同的結(jié)果差距,并且你的模型的tempurature參數(shù)也會(huì)直接影響最終結(jié)果(即LLM的靈敏度)。
2 自定義提示詞模版
-
將提問(wèn)的上下文模版化 -
支持參數(shù)傳入
讓LLM給孩子起具有美國(guó)特色的名字。
將提示詞模版化后會(huì)產(chǎn)生很多靈活多變的應(yīng)用,尤其當(dāng)它支持參數(shù)定義時(shí)。
使用方法
langchain.prompts
3 輸出解釋器
-
將LLM輸出的結(jié)果各種格式化 -
支持類(lèi)似json等結(jié)構(gòu)化數(shù)據(jù)輸出
讓LLM給孩子起4個(gè)有中國(guó)特色的名字,并以數(shù)組格式輸出而不是文本。
與chatGPT只能輸出文本不同,langchain允許用戶(hù)自定義輸出解釋器,將生成文本轉(zhuǎn)化為序列數(shù)據(jù)使用方法:
langchain.schema
第一個(gè)實(shí)例
讓LLM以人機(jī)對(duì)話(huà)的形式輸出4個(gè)名字
名字和性別可以根據(jù)用戶(hù)輸出來(lái)相應(yīng)輸出
輸出格式定義為數(shù)組
4 開(kāi)始運(yùn)行
pip install openai==v0.28.1 -i https://pypi.org/simple
引入openai key
import os
os.environ["OPENAI_KEY"] = "sk-ss"
# 為了科學(xué)上網(wǎng),所以需要添加
os.environ["OPENAI_API_BASE"] = "https://ai-yyds.com/v1"
從環(huán)境變量中讀?。?/p>
import os
openai_api_key = os.getenv("OPENAI_KEY")
openai_api_base = os.getenv("OPENAI_API_BASE")
print("OPENAI_API_KEY:", openai_api_key)
print("OPENAI_PROXY:", openai_api_base)
運(yùn)行前查看下安裝情況
! pip show langchain
! pip show openai
openai 官方SDK
#使用openai的官方sdk
import openai
import os
openai.api_base = os.getenv("OPENAI_API_BASE")
openai.api_key = os.getenv("OPENAI_KEY")
messages = [
{"role": "user", "content": "介紹下你自己"}
]
res = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
stream=False,
)
print(res['choices'][0]['message']['content'])
使用langchain調(diào)用
#hello world
from langchain.llms import OpenAI
import os
api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(
model="gpt-3.5-turbo-instruct",
temperature=0,
openai_api_key=api_key,
openai_api_base=api_base
)
llm.predict("介紹下你自己")
起名大師
#起名大師
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import os
api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(
model="gpt-3.5-turbo-instruct",
temperature=0,
openai_api_key=api_key,
openai_api_base=api_base
)
prompt = PromptTemplate.from_template("你是一個(gè)起名大師,請(qǐng)模仿示例起3個(gè){county}名字,比如男孩經(jīng)常被叫做{boy},女孩經(jīng)常被叫做{girl}")
message = prompt.format(county="中國(guó)特色的",boy="狗蛋",girl="翠花")
print(message)
llm.predict(message)
輸出:
'\n\n男孩: 龍飛、鐵柱、小虎\n女孩: 玉蘭、梅香、小紅梅'
格式化輸出
from langchain.schema import BaseOutputParser
#自定義class,繼承了BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
"""Parse the output of an LLM call to a comma-separated list."""
def parse(self, text: str):
"""Parse the output of an LLM call."""
return text.strip().split(", ")
CommaSeparatedListOutputParser().parse("hi, bye")
['hi', 'bye']
完整案例
#起名大師,輸出格式為一個(gè)數(shù)組
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import os
from langchain.schema import BaseOutputParser
#自定義類(lèi)
class CommaSeparatedListOutputParser(BaseOutputParser):
"""Parse the output of an LLM call to a comma-separated list."""
def parse(self, text: str):
"""Parse the output of an LLM call."""
print(text)
return text.strip().split(",")
api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(
model="gpt-3.5-turbo-instruct",
temperature=0,
openai_api_key=api_key,
openai_api_base=api_base
)
prompt = PromptTemplate.from_template("你是一個(gè)起名大師,請(qǐng)模仿示例起3個(gè)具有{county}特色的名字,示例:男孩常用名{boy},女孩常用名{girl}。請(qǐng)返回以逗號(hào)分隔的列表形式。僅返回逗號(hào)分隔的列表,不要返回其他內(nèi)容。")
message = prompt.format(county="美國(guó)男孩",boy="sam",girl="lucy")
print(message)
strs = llm.predict(message)
CommaSeparatedListOutputParser().parse(strs)
['jack', ' michael', ' jason'
寫(xiě)在最后
公眾號(hào):JavaEdge專(zhuān)注分享軟件開(kāi)發(fā)全生態(tài)相關(guān)技術(shù)文章、視頻教程資源、熱點(diǎn)資訊等,如果喜歡我的分享,給 ???? 點(diǎn)一個(gè)贊?? 或者 ?關(guān)注都是對(duì)我最大的支持。
歡迎長(zhǎng)按圖片加好友,我會(huì)第一時(shí)間和你分享軟件行業(yè)趨勢(shì),面試資源,學(xué)習(xí)途徑等等。
添加好友備注【技術(shù)群交流】拉你進(jìn)技術(shù)交流群
關(guān)注公眾號(hào)后,在后臺(tái)私信:
-
回復(fù)【架構(gòu)師】,獲取架構(gòu)師學(xué)習(xí)資源教程 -
回復(fù)【面試】,獲取最新最全的互聯(lián)網(wǎng)大廠面試資料 -
回復(fù)【簡(jiǎn)歷】,獲取各種樣式精美、內(nèi)容豐富的簡(jiǎn)歷模板 -
回復(fù) 【路線(xiàn)圖】,獲取直升Java P7技術(shù)管理的全網(wǎng)最全學(xué)習(xí)路線(xiàn)圖 -
回復(fù) 【大數(shù)據(jù)】,獲取Java轉(zhuǎn)型大數(shù)據(jù)研發(fā)的全網(wǎng)最全思維導(dǎo)圖 -
更多教程資源應(yīng)有盡有,歡迎 關(guān)注并加技術(shù)交流群,慢慢獲取
