create_agent_logic.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. Save(l.ctx)
  35. if err != nil {
  36. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  37. }
  38. /**
  39. 1. 创建知识库
  40. 2. 创建默认集合
  41. 3. 保存到Agent信息里
  42. */
  43. var datasetReq fastgpt.DatasetReq
  44. datasetReq.Name = *req.Name
  45. datasetReq.Intro = *req.Name
  46. datasetReq.AgentModel = "gpt-3.5-turbo"
  47. datasetReq.VectorModel = "text-embedding-ada-002"
  48. datasetResp, err := fastgpt.CreateDataset(&datasetReq)
  49. if err != nil {
  50. return nil, errorx.NewInvalidArgumentError("fastgpt create dataset failed " + err.Error())
  51. }
  52. if datasetResp.Code != 200 {
  53. return nil, errors.New(datasetResp.Message)
  54. }
  55. var collectionReq fastgpt.CreateCollectionReq
  56. collectionReq.DatasetId = datasetResp.Data
  57. collectionReq.Name = "手动录入"
  58. collectionReq.Type = "virtual" // 暂时改动
  59. collectionResp, err := fastgpt.CreateEmptyCollection(&collectionReq)
  60. if err != nil {
  61. return nil, errors.New("create dataset failed")
  62. }
  63. if collectionResp.Code != 200 {
  64. return nil, errorx.NewInvalidArgumentError("fastgpt create collection failed " + err.Error())
  65. }
  66. _, err = l.svcCtx.DB.Agent.UpdateOneID(agent.ID).
  67. SetNotNilDatasetID(&datasetResp.Data).
  68. SetNotNilCollectionID(&collectionResp.Data).
  69. Save(l.ctx)
  70. if err != nil {
  71. return nil, errors.New("update dataset and collection failed")
  72. }
  73. return &types.BaseMsgResp{Msg: errormsg.CreateSuccess}, nil
  74. }