172 lines
4.8 KiB
Go
172 lines
4.8 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"gitlab.guxuan.icu/jinshan_community/internal/mods/ai/biz"
|
|
"gitlab.guxuan.icu/jinshan_community/internal/mods/ai/schema"
|
|
"gitlab.guxuan.icu/jinshan_community/pkg/ai"
|
|
"gitlab.guxuan.icu/jinshan_community/pkg/util"
|
|
"time"
|
|
)
|
|
|
|
// Defining the `AiRequest` api.
|
|
type AiRequest struct {
|
|
AiRequestBIZ *biz.AiRequest
|
|
}
|
|
|
|
// @Tags AiRequestAPI
|
|
// @Security ApiKeyAuth
|
|
// @Summary Query ai request list
|
|
// @Param current query int true "pagination index" default(1)
|
|
// @Param pageSize query int true "pagination size" default(10)
|
|
// @Success 200 {object} util.ResponseResult{data=[]schema.AiRequest}
|
|
// @Failure 401 {object} util.ResponseResult
|
|
// @Failure 500 {object} util.ResponseResult
|
|
// @Router /api/v1/ai-requests [get]
|
|
func (a *AiRequest) Query(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
var params schema.AiRequestQueryParam
|
|
if err := util.ParseQuery(c, ¶ms); err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
|
|
result, err := a.AiRequestBIZ.Query(ctx, params)
|
|
if err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
util.ResPage(c, result.Data, result.PageResult)
|
|
}
|
|
|
|
// @Tags AiRequestAPI
|
|
// @Security ApiKeyAuth
|
|
// @Summary Get ai request record by ID
|
|
// @Param id path string true "unique id"
|
|
// @Success 200 {object} util.ResponseResult{data=schema.AiRequest}
|
|
// @Failure 401 {object} util.ResponseResult
|
|
// @Failure 500 {object} util.ResponseResult
|
|
// @Router /api/v1/ai-requests/{id} [get]
|
|
func (a *AiRequest) Get(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
item, err := a.AiRequestBIZ.Get(ctx, c.Param("id"))
|
|
if err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
util.ResSuccess(c, item)
|
|
}
|
|
|
|
// @Tags AiRequestAPI
|
|
// @Security ApiKeyAuth
|
|
// @Summary Create ai request record
|
|
// @Param body body schema.AiRequestForm true "Request body"
|
|
// @Success 200 {object} util.ResponseResult{data=schema.AiRequest}
|
|
// @Failure 400 {object} util.ResponseResult
|
|
// @Failure 401 {object} util.ResponseResult
|
|
// @Failure 500 {object} util.ResponseResult
|
|
// @Router /api/v1/ai-requests [post]
|
|
func (a *AiRequest) Create(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
item := new(schema.AiRequestForm)
|
|
if err := util.ParseJSON(c, item); err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
} else if err := item.Validate(); err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
apiKey := "sk-f96d78738d3143d3859c63a5715490ac"
|
|
client := ai.NewBaichuanClient(apiKey)
|
|
example, err := singleCallExample(ctx, client, item.Msg)
|
|
if err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
util.ResSuccess(c, example)
|
|
}
|
|
func singleCallExample(ctx context.Context, client *ai.BaichuanClient, msg string) (string, error) {
|
|
// 准备消息
|
|
messages := []ai.ChatMessage{
|
|
{Role: "system", Content: "你是一个专业的科技助手"},
|
|
{Role: "user", Content: msg},
|
|
}
|
|
|
|
// 设置参数
|
|
params := ai.ChatCompletionParams{
|
|
Model: "qwen-plus",
|
|
Messages: messages,
|
|
MaxToken: 200,
|
|
}
|
|
|
|
// 调用API
|
|
ctx2, cancel := context.WithTimeout(ctx, 30*time.Second)
|
|
defer cancel()
|
|
|
|
response, err := client.ChatCompletion(ctx2, params)
|
|
if err != nil {
|
|
fmt.Printf("调用失败: %v\n", err)
|
|
return "", err
|
|
}
|
|
|
|
// 输出结果
|
|
fmt.Println("=== 单次调用结果 ===")
|
|
fmt.Printf("请求ID: %s\n", response.ID)
|
|
fmt.Printf("模型: %s\n", response.Model)
|
|
fmt.Printf("回复: %s\n", response.Content)
|
|
fmt.Printf("Token使用: 提示 %d, 完成 %d, 总计 %d\n\n",
|
|
response.Usage.PromptTokens,
|
|
response.Usage.CompletionTokens,
|
|
response.Usage.TotalTokens)
|
|
return response.Content, nil
|
|
}
|
|
|
|
// @Tags AiRequestAPI
|
|
// @Security ApiKeyAuth
|
|
// @Summary Update ai request record by ID
|
|
// @Param id path string true "unique id"
|
|
// @Param body body schema.AiRequestForm true "Request body"
|
|
// @Success 200 {object} util.ResponseResult
|
|
// @Failure 400 {object} util.ResponseResult
|
|
// @Failure 401 {object} util.ResponseResult
|
|
// @Failure 500 {object} util.ResponseResult
|
|
// @Router /api/v1/ai-requests/{id} [put]
|
|
func (a *AiRequest) Update(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
item := new(schema.AiRequestForm)
|
|
if err := util.ParseJSON(c, item); err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
} else if err := item.Validate(); err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
|
|
err := a.AiRequestBIZ.Update(ctx, c.Param("id"), item)
|
|
if err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
util.ResOK(c)
|
|
}
|
|
|
|
// @Tags AiRequestAPI
|
|
// @Security ApiKeyAuth
|
|
// @Summary Delete ai request record by ID
|
|
// @Param id path string true "unique id"
|
|
// @Success 200 {object} util.ResponseResult
|
|
// @Failure 401 {object} util.ResponseResult
|
|
// @Failure 500 {object} util.ResponseResult
|
|
// @Router /api/v1/ai-requests/{id} [delete]
|
|
func (a *AiRequest) Delete(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
err := a.AiRequestBIZ.Delete(ctx, c.Param("id"))
|
|
if err != nil {
|
|
util.ResError(c, err)
|
|
return
|
|
}
|
|
util.ResOK(c)
|
|
}
|