把langchain跑起來的3個方法

2023-07-04 18:00:37

使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那麼如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來的方法,如有錯誤歡迎糾正。

Langchain官方檔案地址:
https://python.langchain.com/

基礎功能

LLM 呼叫

  • 支援多種模型介面,比如 OpenAI、HuggingFace、AzureOpenAI …
  • Fake LLM,用於測試
  • 快取的支援,比如 in-mem(記憶體)、SQLite、Redis、SQL
  • 用量記錄
  • 支援流模式(就是一個字一個字的返回,類似打字效果)

Prompt管理,支援各種自定義模板

擁有大量的檔案載入器,比如 Email、Markdown、PDF、Youtube …

對索引的支援

  • 檔案分割器
  • 向量化
  • 對接向量儲存與搜尋,比如 Chroma、Pinecone、Qdrand

Chains

  • LLMChain
  • 各種工具Chain
  • LangChainHub

詳細地址可參考:
https://www.langchain.cn/t/topic/35

測試Langchain工程的3個方法:

1 使用Langchian提供的FakeListLLM

為了節約時間,直接上程式碼

import os
from decouple import config
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.agents import load_tools

這裡mock下ChatGPT,使用mockLLm

#from langchain.llms import OpenAI
from langchain.llms.fake import FakeListLLM
os.environ["OPENAI_API_KEY"] = config('OPENAI_API_KEY')

REPL 是 「Read–Eval–Print Loop」(讀取-求值-列印-迴圈)的縮寫,它是一種簡單的、互動式的程式設計環境。

在 REPL 環境中,使用者可以輸入一條或多條程式設計語句,系統會立即執行這些語句並輸出結果。這種方式非常適合進行快速的程式碼試驗和偵錯。

tools = load_tools(["python_repl"])
responses=[
    "Action: Python REPL\nAction Input: chatGpt原理",
    "Final Answer: mock答案"
]
llm = FakeListLLM(responses=responses)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("chatGpt原理2")

2 使用Langchian提供的HumanInputLLM,存取維基百科查詢

from langchain.llms.human import HumanInputLLM
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from wikipedia import set_lang

使用維基百科工具

tools = load_tools(["wikipedia"])

這裡必須要設定為中文url字首,不然存取不了

set_lang("zh")

初始化LLM

llm = HumanInputLLM(prompt_func=lambda prompt: print(f"\n===PROMPT====\n{prompt}\n=====END OF PROMPT======"))

初始化agent

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("喜羊羊")

使用huggingface

https://huggingface.co/docs

1.註冊賬號

2.建立Access Tokens

Demo: 使用模型對檔案進行摘要

from langchain.document_loaders import UnstructuredFileLoader
from langchain.chains.summarize import load_summarize_chain
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain import HuggingFaceHub
import os
from decouple import config

from langchain.agents import load_tools

這裡mock下ChatGPT,使用HUGGINGFACEHUB

os.environ["HUGGINGFACEHUB_API_TOKEN"] = config('HUGGINGFACEHUB_API_TOKEN')

匯入文字

loader = UnstructuredFileLoader("docment_store\helloLangChain.txt")

將文字轉成 Document 物件

document = loader.load()
print(f'documents:{len(document)}')

初始化文字分割器

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 500,
    chunk_overlap = 0
)

切分文字

split_documents = text_splitter.split_documents(document)
print(f'documents:{len(split_documents)}')

載入 LLM 模型

overal_temperature = 0.1
flan_t5xxl = HuggingFaceHub(repo_id="google/flan-t5-xxl", 
                         model_kwargs={"temperature":overal_temperature, 
                                       "max_new_tokens":200}
                         ) 

llm = flan_t5xxl
tools = load_tools(["llm-math"], llm=llm)

建立總結鏈

chain = load_summarize_chain(llm, chain_type="refine", verbose=True)

執行總結鏈

chain.run(split_documents)

作者:京東科技 楊建

來源:京東雲開發者社群