Spaces:
Sleeping
Sleeping
#!/usr/bin/env python | |
# -*- encoding: utf-8 -*- | |
''' | |
@File : spark_api.py | |
@Time : 2024/8/8 10:45:00 | |
@Author : coco | |
@Version : 1.0 | |
@Contact : 3431851784@qq.com | |
@License : (C)Copyright 2017-2018, Liugroup-NLPR-CASIA | |
@Desc : 启动服务为本地 API | |
''' | |
from fastapi import FastAPI | |
from pydantic import BaseModel | |
import os | |
import sys | |
# 导入功能模块目录 | |
sys.path.append("../") | |
from qa_chain.QA_chain_self import QA_chain_self | |
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890" | |
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890" | |
app = FastAPI() # 创建 api 对象 | |
template = """使用以下上下文来回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答 | |
案。最多使用三句话。尽量使答案简明扼要。总是在回答的最后说“谢谢你的提问!”。 | |
{context} | |
问题: {question} | |
有用的回答:""" | |
# 定义一个数据模型,用于接收POST请求中的数据 | |
class Item(BaseModel): | |
prompt : str # 用户 prompt | |
model : str = "gpt-3.5-turbo"# 使用的模型 | |
temperature : float = 0.1# 温度系数 | |
if_history : bool = False # 是否使用历史对话功能 | |
# API_Key | |
api_key: str = None | |
# Secret_Key | |
secret_key : str = None | |
# access_token | |
access_token: str = None | |
# APPID | |
appid : str = None | |
# APISecret | |
Spark_api_secret : str = None | |
# Secret_key | |
Wenxin_secret_key : str = None | |
# 数据库路径 | |
db_path : str = "/Users/lta/Desktop/llm-universe/data_base/vector_db/chroma" | |
# 源文件路径 | |
file_path : str = "/Users/lta/Desktop/llm-universe/data_base/knowledge_db" | |
# prompt template | |
prompt_template : str = template | |
# Template 变量 | |
input_variables : list = ["context","question"] | |
# Embdding | |
embedding : str = "m3e" | |
# Top K | |
top_k : int = 5 | |
# embedding_key | |
embedding_key : str = None | |
async def get_response(item: Item): | |
# 首先确定需要调用的链 | |
if not item.if_history: | |
# 调用 Chat 链 | |
# return item.embedding_key | |
if item.embedding_key == None: | |
item.embedding_key = item.api_key | |
chain = QA_chain_self(model=item.model, temperature=item.temperature, top_k=item.top_k, file_path=item.file_path, persist_path=item.db_path, | |
appid=item.appid, api_key=item.api_key, embedding=item.embedding, template=template, Spark_api_secret=item.Spark_api_secret, Wenxin_secret_key=item.Wenxin_secret_key, embedding_key=item.embedding_key) | |
response = chain.answer(question = item.prompt) | |
return response | |
# 由于 API 存在即时性问题,不能支持历史链 | |
else: | |
return "API 不支持历史链" |