AI基础聊天机器人开发
本文介绍了基于MoonShot/OpenAI平台的聊天机器人开发方案。技术选型采用Python+Flask+PostgreSQL组合,详细说明了平台注册、密钥获取流程(MoonShot注册赠送15元额度)。核心代码展示了使用Flask蓝图的路由注册、AI接口控制器实现,包括聊天请求处理、应用管理等功能。其中AI接口通过OpenAI SDK调用MoonShot的"kimi-k2-0711-
·
有完整代码
一. 开发平台选型
可用 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个字符"),
])
五.项目结构图
测试:
更多推荐
所有评论(0)