create_agent_logic.go 2.2 KB

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