OpenAI互換APIサーバーたてて、LangChainで遊ぶ|はまち |
您所在的位置:网站首页 › 会计的专业资格 › OpenAI互換APIサーバーたてて、LangChainで遊ぶ|はまち |
FastChatがバージョンアップして、LangChainとOpenAI互換のローカルAPIサーバーとの統合方法が詳しめで紹介されていました。 モデルのダウンロードFastChat 初回起動時に自動でモデルがダウンロードされるので、特に何もしなくても大丈夫です。 以前のVicuna-13b-v1.1では、LLaMAから手動でデルタを適用する必要がありましたが、現行のFastChat のバージョンでは、モデル起動時に自動でデルタ適用済みのモデルがダウンロードしてくれるようになりました。 RESTful APIサーバーの起動各サーバーを起動します。 まずは controllerを起動します。 $ python3 -m fastchat.serve.controllerLangChainから呼び出す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 |