有完整代码

一. 开发平台选型

可用 OpenAI 或 MoonShot,OpenAI国内需要需要访问工具,但两着开发流程一致,接口协议也是,可复用。

Moonshot AI欢迎探索月之暗面,寻求将能源转化为智能的最优解https://www.moonshot.cn/

https://openai.com/zh-Hans-CN/api/https://openai.com/zh-Hans-CN/api/

二.技术平台选型

语言:Python

框架:Flask

数据库:PostgreSQL

三.平台注册及密钥获取

1. 以MoonShot为例,需要注册并实名,官方会赠送15元使用金额,用完就需要充值了。

2. 生成key

项目结构

四.核心代码

(完整的在最底下)

注册器

from dataclasses import dataclass

from flask import Flask, Blueprint
from injector import inject

from internal.handler import AppHandler


@inject
@dataclass
class Router:
    """路由"""
    app_handler: AppHandler

    def register_router(self, app: Flask):
        """注册路由"""
        # 1.创建一个蓝图
        bp = Blueprint("llmops", __name__, url_prefix="")

        # 2.将url与对应的控制器方法做绑定
        bp.add_url_rule("/ping", view_func=self.app_handler.ping)
        bp.add_url_rule("/app/completion", methods=["POST"], view_func=self.app_handler.completion)
        bp.add_url_rule("/app", methods=["POST"], view_func=self.app_handler.create_app)
        bp.add_url_rule("/app/<uuid:id>", view_func=self.app_handler.get_app)
        bp.add_url_rule("/app/<uuid:id>", methods=["POST"], view_func=self.app_handler.update_app)
        bp.add_url_rule("/app/<uuid:id>/delete", methods=["POST"], view_func=self.app_handler.delete_app)

        # 3.在应用上去注册蓝图
        app.register_blueprint(bp)

AI接口访问控制器

import os
import uuid
from dataclasses import dataclass

from injector import inject
from openai import OpenAI
from internal.exception import FailException
from internal.schema.app_schema import CompletionReq
from internal.service import AppService
from pkg.response import success_json, validate_error_json, success_message

@inject
@dataclass
class AppHandler:
    """应用控制器"""
    app_service: AppService

    def create_app(self):
        """调用服务创建新的APP记录"""
        app = self.app_service.create_app()
        return success_message(f"应用已经成功创建,id为{app.id}")

    def get_app(self, id: uuid.UUID):
        app = self.app_service.get_app(id)
        return success_message(f"应用已经成功获取,名字是{app.name}")

    def update_app(self, id: uuid.UUID):
        app = self.app_service.update_app(id)
        return success_message(f"应用已经成功修改,修改的名字是:{app.name}")

    def delete_app(self, id: uuid.UUID):
        app = self.app_service.delete_app(id)
        return success_message(f"应用已经成功删除,id为:{app.id}")

    def completion(self):
        """聊天接口"""
        # 1.提取从接口中获取的输入,POST
        req = CompletionReq()
        if not req.validate():
            return validate_error_json(req.errors)

        # 2.构建OpenAI客户端,并发起请求
        client = OpenAI(base_url=os.getenv("OPENAI_API_BASE"))

        # 3.得到请求响应,然后将OpenAI的响应传递给前端
        completion = client.chat.completions.create(
            model="kimi-k2-0711-preview",
            messages=[
                {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
                {"role": "user", "content": req.query.data},
            ],
            temperature = 0.6,
        )

        content = completion.choices[0].message.content

        return success_json({"content": content})

    def ping(self):
        raise FailException("数据未找到")
        # return {"ping": "pong"}

校验

from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired, Length


class CompletionReq(FlaskForm):
    """基础聊天接口请求验证"""
    # 必填、长度最大为2000
    query = StringField("query", validators= [
        DataRequired(message="用户提问时必须的"),
        Length(max=2000, message="用户提问不能超过2000个字符"),
    ])

五.项目结构图

​​​​

测试:

完整聊天机器人代码点此到https://gitee.com/im-daddy/llmops-api

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐