ai调用demo

from flask import Flask, request, jsonify
from flask_docs import ApiDoc
from openai import AzureOpenAI
import os
from flask_docs import ApiDoc
from flask_siwadoc import SiwaDoc
from flasgger import Swagger

app = Flask(__name__)

siwa = SiwaDoc(app)
ApiDoc(
    app,
    title="Sample App",
    version="1.0.0",
    description="A simple app API",
)

Swagger(app)

# 初始化Azure OpenAI客户端
version = "2023-05-15"
endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
api_key = os.getenv("AZURE_OPENAI_API_KEY")
client = AzureOpenAI(azure_endpoint=endpoint, api_key=api_key, api_version=version)

# 角色预设
roles = {
    'Admin': [],
    'PythonDevops':[],
    'JavaDevops':[],
}

@app.route('/set_role', methods=['POST'])
@siwa.doc()
def set_role():
    """
    设置当前角色
    """
    global current_role
    role_name = request.json.get('role')
    if role_name in roles:
        current_role = role_name
        return jsonify({"code":100,"message": f"Role set to {current_role}"})
    else:
        return jsonify({"code":999,"message": f"错误 role"})


@app.route('/add_context', methods=['POST'])
@siwa.doc()
def add_context():
    """
    向当前角色添加上下文
    """
    global current_role
    if current_role:
        context = request.json.get('context')
        if context:
            roles[current_role].append(context)
            return jsonify({"code":100,"message": f"Context '{context}' added to {current_role}"})
        else:
            return jsonify({"code":999,"error": f"Context is required"})
    else:
        return jsonify({"code":998,"error": f"role 未设置"})

@app.route('/clear_context', methods=['POST'])
@siwa.doc()
def clear_context():
    """
    清除当前角色的上下文
    """
    global current_role
    if current_role:
        roles[current_role].clear()
        return jsonify({"code":100,"message": f"{current_role}'s context cleared"})
    else:
        return jsonify({"code":998,"error": "role 未设置"})

@app.route('/ask', methods=['POST'])
@siwa.doc()
def ask():
    """
    向AI模型提问,基于当前角色和上下文
    """
    global current_role, client
    if current_role:
        question = request.json.get('question')
        if question:
            messages = [{"role": "system", "content": f"You are now {current_role}."}]
            messages.extend([{"role": "user", "content": ctx} for ctx in roles[current_role]])
            messages.append({"role": "user", "content": question})
            
            try:
                response = client.chat.completions.create(
                    model="gpt-35-turbo-16k",
                    messages=messages
                )
                answer = response.choices[0].message.content
                roles[current_role].append(question)
                roles[current_role].append(answer)
                return jsonify({"code":100,"message": answer})
            except Exception as e:
                return jsonify({"code":888,"error": str(e)})
        else:
            return jsonify({"code":997,"error": "没有输入问题"})
    else:
        return jsonify({"code":998,"error": "role 未设置"})
@app.route('/view_context', methods=['GET'])
def aview_context():
    """查看上下文"""
    global current_role
    if current_role:
        return jsonify({"code":100,"message": f"{roles[current_role]}","more":f"{roles}"})
    else:
        return jsonify({"code":998,"error": f"role 未设置"})
if __name__ == '__main__':
    app.run(debug=True)

posted @ 2024-05-20 18:03  沉岩  阅读(3)  评论(0编辑  收藏  举报