OpenAI互換APIサーバーたてて、LangChainで遊ぶ|はまち

您所在的位置:网站首页 会计的专业资格 OpenAI互換APIサーバーたてて、LangChainで遊ぶ|はまち

OpenAI互換APIサーバーたてて、LangChainで遊ぶ|はまち

2023-07-08 11:39| 来源: 网络整理| 查看: 265

FastChatがバージョンアップして、LangChainとOpenAI互換のローカルAPIサーバーとの統合方法が詳しめで紹介されていました。

モデルのダウンロード

FastChat 初回起動時に自動でモデルがダウンロードされるので、特に何もしなくても大丈夫です。

以前のVicuna-13b-v1.1では、LLaMAから手動でデルタを適用する必要がありましたが、現行のFastChat のバージョンでは、モデル起動時に自動でデルタ適用済みのモデルがダウンロードしてくれるようになりました。

RESTful APIサーバーの起動

 各サーバーを起動します。

まずは controllerを起動します。

$ python3 -m fastchat.serve.controller

LangChainから呼び出すOpenAI APIのモデル名に見せかけるために、worker 起動時に、OpenAI公式のchat completionモデル、completionモデル、および embeddingモデルの名前を拝借します。

私の環境では13bモデルだとGPUのメモリ不足になるので、8bit量子化オプションを指定します。

$ python3 -m fastchat.serve.model_worker --model-names "gpt-3.5-turbo,text-davinci-003,text-embedding-ada-002" \  --model-path lmsys/vicuna-13b-v1.3 --load-8bit

最後はopenai_api_serverを起動。

$ python3 -m fastchat.serve.openai_api_server --host localhost --port 8000動作確認

EmbeddingとChat completionモデルの動作確認をしてみます。ネタは例によって、青空文庫の走れメロスです。

from langchain.chat_models import ChatOpenAI from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.chains import RetrievalQA # 環境変数の準備 import os os.environ["OPENAI_API_KEY"] = "EMPTY" os.environ["OPENAI_API_BASE"] = "http://localhost:8000/v1" embeddings = OpenAIEmbeddings() llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, max_tokens=400) # テキストの読み込みと、dbの準備 loader = TextLoader('hashire_merosu.txt') documents = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=400, chunk_overlap=0) texts = text_splitter.split_documents(documents) db = Chroma.from_documents(texts, embeddings) retriever = db.as_retriever() qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever) # 質問タイム questions = [    "メロスの職業は?",    "メロスの友人の名前は?",    "王が人を殺す理由" ] for query in questions:    print("Query:", query)    print("Answer:", qa.run(query))

Query: メロスの職業は? Answer: メロスは村の牧人であるとされています。 Query: メロスの友人の名前は? Answer: メロスの友人の名前は「セリヌンティウス」です。 Query: 王が人を殺す理由 Answer: 王が人を殺す理由は、彼が信じる正義のためだということです。彼は、彼が信頼されている者を守るために、彼の国を支配するために必要な殺害を行っています。彼は、彼が信じる正義のために、彼の国を守るために、必要な行動をとることを説明しています。

最後の答えは若干微妙な気もしますが、Vicuna-13b にしては上出来だと思います👍。ローカル環境だけでも、けっこう遊べる感じになりましたね。

ただ、もはや純正OpenAI APIのFunction callingが手放せない体になってしまっているので😅、オープンソース系LLMでも、Function calling対応が待ち遠しいです。

最後までお読みいただき、ありがとうございました。おしまい



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3