如何使用 FastApi

3 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了如何使用FastAPI和uvicorn在Python中创建高性能Web应用,包括安装步骤、依赖库、创建FastAPI实例、定义请求体模型以及运行服务器。示例代码展示了如何使用OpenAI和Chroma进行文本处理和问答功能的实现。
摘要由CSDN通过智能技术生成

安装 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 形式

 这样就能正确地得到返回值

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI是一个由Python编写的现代高性能Web框架,特别适合构建RESTful API和Web应用。它基于星lette和Uvicorn,提供了简单易用的API定义、自动文档生成以及类型安全等特性。以下是一些基本步骤来使用FastAPI搭建Web服务器: 1. 安装FastAPI: 首先确保你已经安装了Python和pip,然后在命令行中运行 `pip install fastapi uvicorn` 来安装FastAPI和其依赖的Uvicorn。 2. 创建项目文件结构: 创建一个新的目录,例如`my_api`,并在其中创建`main.py`和`app.py`(如果需要分模块管理)。 3. 编写`main.py` (或app.py): 这里通常导入并启动FastAPI应用程序。例如,一个简单的示例是: ```python from fastapi import FastAPI # 在这里导入你的API路由和配置 from app import app as api if __name__ == "__main__": import uvicorn uvicorn.run(api, host="0.0.0.0", port=8000) ``` 4. 定义路由和处理函数: 在`app.py`中,你需要定义`API Router`,即定义HTTP方法(GET、POST、PUT等)和URL路径,以及对应的处理函数。例如: ```python from fastapi import APIRouter, Depends, HTTPException, status router = APIRouter() @router.get("/items/") async def read_items(): # 这里是返回数据的逻辑,比如查询数据库 return [{"item_id": 1, "item_name": "Example item"}] ``` 5. 文档生成: FastAPI内置了`docs`功能,可以通过`app.include_router(router, tags=["Items"])`来添加文档,并访问`http://localhost:8000/docs`查看API文档。 6. 启动服务: 运行`main.py`(或指定的`app.py`),在指定的主机和端口上(如8000)启动Web服务器。 相关问题-- 1. FastAPI与星lette和Uvicorn的关系是什么? 2. 如何在FastAPI中处理POST请求并解析请求体数据? 3. 如何在FastAPI中设置全局响应头信息? 4. FastAPI中的Depends函数是用来做什么的?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值