create_agent_logic.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package agent
  2. import (
  3. "context"
  4. "errors"
  5. "github.com/zeromicro/go-zero/core/errorx"
  6. "wechat-api/hook/fastgpt"
  7. "wechat-api/internal/svc"
  8. "wechat-api/internal/types"
  9. "wechat-api/internal/utils/dberrorhandler"
  10. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  11. "github.com/zeromicro/go-zero/core/logx"
  12. )
  13. type CreateAgentLogic struct {
  14. ctx context.Context
  15. svcCtx *svc.ServiceContext
  16. logx.Logger
  17. }
  18. func NewCreateAgentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateAgentLogic {
  19. return &CreateAgentLogic{
  20. ctx: ctx,
  21. svcCtx: svcCtx,
  22. Logger: logx.WithContext(ctx),
  23. }
  24. }
  25. func (l *CreateAgentLogic) CreateAgent(req *types.AgentInfo) (*types.BaseMsgResp, error) {
  26. organizationId := l.ctx.Value("organizationId").(uint64)
  27. agent, err := l.svcCtx.DB.Agent.Create().
  28. SetNotNilName(req.Name).
  29. SetNotNilRole(req.Role).
  30. //SetNotNilStatus(req.Status).
  31. SetOrganizationID(organizationId).
  32. SetNotNilBackground(req.Background).
  33. SetNotNilExamples(req.Examples).
  34. SetNotNilModel(req.Model).
  35. SetNotNilAPIKey(req.ApiKey).
  36. SetNotNilAPIBase(req.ApiBase).
  37. SetNotNilType(req.Type).
  38. Save(l.ctx)
  39. if err != nil {
  40. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  41. }
  42. /**
  43. 1. 创建知识库
  44. 2. 创建默认集合
  45. 3. 保存到Agent信息里
  46. */
  47. var datasetReq fastgpt.DatasetReq
  48. datasetReq.Name = *req.Name
  49. datasetReq.Intro = *req.Name
  50. datasetReq.AgentModel = "gpt-3.5-turbo"
  51. datasetReq.VectorModel = "text-embedding-ada-002"
  52. datasetResp, err := fastgpt.CreateDataset(&datasetReq)
  53. if err != nil {
  54. return nil, errorx.NewInvalidArgumentError("fastgpt create dataset failed " + err.Error())
  55. }
  56. if datasetResp.Code != 200 {
  57. return nil, errors.New(datasetResp.Message)
  58. }
  59. var collectionReq fastgpt.CreateCollectionReq
  60. collectionReq.DatasetId = datasetResp.Data
  61. collectionReq.Name = "手动录入"
  62. collectionReq.Type = "virtual" // 暂时改动
  63. collectionResp, err := fastgpt.CreateEmptyCollection(&collectionReq)
  64. if err != nil {
  65. return nil, errors.New("create dataset failed")
  66. }
  67. if collectionResp.Code != 200 {
  68. return nil, errorx.NewInvalidArgumentError("fastgpt create collection failed " + err.Error())
  69. }
  70. _, err = l.svcCtx.DB.Agent.UpdateOneID(agent.ID).
  71. SetNotNilDatasetID(&datasetResp.Data).
  72. SetNotNilCollectionID(&collectionResp.Data).
  73. Save(l.ctx)
  74. if err != nil {
  75. return nil, errors.New("update dataset and collection failed")
  76. }
  77. return &types.BaseMsgResp{Msg: errormsg.CreateSuccess}, nil
  78. }