簡介
langchain專門用於構建LLM大語言模型,其中提供了大量的prompt模板,和組件,通過chain(鏈)的方式將流程連接起來,操作簡單,開發便捷。
環境配置
安裝langchain框架
pip install langchain langchain-community
其中langchain可以提供了各種大模型語言庫選擇,(這裏只列舉幾個)例如:
#chatgpt
pip install langchain-openai
#hugging face
pip install langchain-huggingface
#千問
pip install langchain-qwq
1. 讓模型跑起來
如何讓你llm跑起來,這裏用的是千問,來演示
案例
import os
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
#這裏是你的千問apikey
os.environ["DASHSCOPE_API_KEY"] = "apikey"
model = ChatTongyi(model="qwen-plus")
prompt = ChatPromptTemplate.from_messages([
("system", "你是一個精通{topic}的資深技術專家。"),
("user", "請用三句話解釋一下什麼是{concept}。")
])
output_parser = StrOutputParser()
chain = prompt | model | output_parser
#文本輸出
response = chain.invoke({"topic": "Python", "concept": "列表"})
print(response)
#分割
print("="*30)
#流式輸出
for chunk in chain.stream({"topic": "人工智能", "concept": "神經網絡"}):
print(chunk, end="", flush=True)
代碼解釋
整個代碼的流程如下:
創建模型->構建提示詞->構建chain鏈->使用大模型
創建模型
這一步用不同的模型可能會不同
這裏利用langchain的千問庫創建模型,可能會不同
model = ChatTongyi(model="qwen-plus")
#例如用chatgpt
llm = init_chat_model("gpt-4o", model_provider="openai")
構建提示詞
這一步構建利用了langchain庫提供提示詞模板:
其中用{}闊起來的在調用時可以動態用字典替換
prompt = ChatPromptTemplate.from_messages([
("system", "你是一個精通{topic}的資深技術專家。"),
("user", "請用三句話解釋一下什麼是{concept}。")
])
各個角色功能如下:
| 角色名稱 (Role) | 對應的類 | 作用説明 |
|---|---|---|
| system | SystemMessage |
系統提示詞。用於設定 AI 的“人格”、專業背景、行為準則或約束條件。它通常優先級最高,決定了後續對話的基調。 |
| user | HumanMessage |
用户消息。代表人類發送的內容。這是模型需要直接回答或處理的問題。 |
| ai | AIMessage |
AI 消息。代表模型之前的回覆。在構建多輪對話(帶記憶)時,需要把模型之前的回覆傳回去。 |
構建chain鏈
這個是langchain的靈魂,這裏簡單説明,後面會發更詳細的教學文章
chain鏈的運行流程如下:
將輸入填充prompt->將完整prompt餵給LLM->直接解析返回文本
StrOutputParser()這個是langchain提供的文本解析器,用於將上面的結果解析為文本
output_parser = StrOutputParser()
chain = prompt | model | output_parser
使用大模型
這裏有兩種方式:
- 直接輸出完整的文本
response = chain.invoke({"topic": "Python", "concept": "列表"})
print(response)
- 流文本輸出(打字機)
for chunk in chain.stream({"topic": "人工智能", "concept": "神經網絡"}):
print(chunk, end="", flush=True)
如果❤喜歡❤本系列教程,就點個關注吧,後續不定期更新~