如何使用 FastApi
上一篇写了如何使用 langchain
https://www.cnblogs.com/hailexuexi/p/18087721
这样 langchain 与 大模型 之间 就可以调用了,但项目实践中需求接口来完成调用
那 FastApi 正好能解决这个问题
下面讲一下如何使用 FastApi
安装 fastapi
fastapi
是一个用于构建高性能 Web 应用的 Python 框架,它提供了简洁、高效的 API 开发体验。
pip install fastapi
安装 uvicorn
uvicorn
是一个用于运行 FastAPI
应用的服务器,它可以将你的 FastAPI
代码部署到生产环境中。
pip install uvicorn
安装这两个后
创建一个目录 fastapi ,在这个目录下创建两个文件
main.py
这段python代码,用到了openAI,需要openAI及FQ。这里只做为示例
from langchain_community.embeddings import OpenAIEmbeddings #from langchain.vectorstores import Chroma from langchain_community.vectorstores import Chroma from langchain.chains import RetrievalQA #from langchain.chat_models import ChatOpenAI from langchain_community.chat_models import ChatOpenAI #from langchain.document_loaders import TextLoader from langchain_community.document_loaders import TextLoader from langchain_community.llms import Tongyi import os import openai import warnings warnings.filterwarnings('ignore', category=FutureWarning) os.environ['OPENAI_API_KEY'] = 'sk-***********************' os.environ['OPENAI_API_BASE'] = 'https://api.openai.com/v1' os.environ["DASHSCOPE_API_KEY"] = "sk-*********************" # 定义一个FastAPI实例 app = FastAPI() # 定义一个请求体模型 class QuestionRequest(BaseModel): question: str # 加载和准备数据 loader = TextLoader('qa.txt') data = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=0) all_splits = text_splitter.split_documents(data) vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings()) # 定义路径操作 @app.post("/answer") async def get_answer(request: QuestionRequest): question = request.question if question == "end": raise HTTPException(status_code=400, detail="Invalid question") # 使用Tongyi模型和检索到的信息来生成答案 llm = Tongyi() qa_chain = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever()) ret = qa_chain({"query": question}) return {"answer": ret['result']} if __name__ == '__main__': import uvicorn uvicorn.run(app='main:app', host="127.0.0.1", port=8080, reload=True) # 启动服务器的命令(在命令行中运行) # uvicorn your_module_name:app --reload
qa.txt
这个文件 用于存放 问答对
问题:弦丝画制作的活动时长是多少? 答案:弦丝画制作活动时长是2—3小时。 问题:用弦丝画制作福字是多少元一位? 答案:用弦丝画制作福字、旺字等单字款价格120元/人。 问题:用弦丝画制作旺字是多少元一位? 答案:用弦丝画制作福字、旺字等单字款价格120元/人。 问题:用弦丝画制作喜字是多少元一位? 答案:用弦丝画制作福字、旺字等单字款价格120元/人,其他图案款请咨询详谈。 问题:端午节香囊的制作价格是多少元一位? 答案:端午节香囊价格100元/人。 问题:中秋节月饼的制作价格是多少元一位? 答案:中秋节月饼价格120元/人。
进入 fastapi目录后,执行 main.py
看到这个界面说明启动成功
接口地址是 http://127.0.0.1:8080
用postmain调用
需要设定的 json 形式
这样就能正确地得到返回值