目前的GenAI的主要元件是大型語言模型(Large Language Model, LLM),呼叫LLM有兩種方式,第一種是透過呼叫雲端的LLM,通常就是需要付費並取得API Key,第二種是呼叫本地端的LLM,通常我們可以透過Ollma下載並啟動、管理下載下來的LLM。
我們就以本地端的使用為範例,首先,先下載並安裝Ollama,步驟請參考:
接下來,如何透過LangChain來呼叫Ollma的LLM呢? 先參考LangChain官方文件:
先安裝Langchain的Ollama套件:
pip install -qU langchain_ollama
接下來,我們來呼叫LLM,並請LLM回答問題,並印出取得的答案:
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="gemma2:9b")
ans = llm.invoke("誰是美國現任總統?")
print(ans)
如果我們問兩個問題,LLM其實是把兩個問題獨立處理,所以,不會知道「他」是指誰:
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="gemma2:9b")
ans = llm.invoke("誰是美國現任總統?")
print(ans)
ans = llm.invoke("他的太太是誰?")
print(ans)
接下來,根據文件範例,修改一下我們的程式,首先先安裝所需要的套件:
pip install langchain
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_ollama import OllamaLLM
prompt = ChatPromptTemplate.from_messages(
[
SystemMessage(
content="請以繁體中文回答問題"
),
MessagesPlaceholder(variable_name="messages"),
]
)
model = OllamaLLM(model="gemma2:9b")
chain = prompt | model
q1 = "誰是美國現任總統?"
q2 = "誰是他的老婆?"
ai_msg = chain.invoke(
{
"messages": [
HumanMessage(
content=q1
),
# HumanMessage(content="What did you just say?")
],
}
)
print(ai_msg)
ai_msg = chain.invoke(
{
"messages": [
**HumanMessage(content=q1),
AIMessage(content=ai_msg),**
HumanMessage(
content="誰是他的老婆?"
),
# HumanMessage(content="What did you just say?"),
],
}
)
print(ai_msg)