暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

golang源码分析:langchaingo(4)

    前面介绍了GenerateFromSinglePrompt和Call最终都调用了
GenerateContent,其实也可以直接调用它,看看下面的例子


      messages := []llms.MessageContent{
              llms.TextParts(llms.ChatMessageTypeSystem, "你是一个英文翻译员,需要将<>括起来的英文翻译为中文,用JSON格式输出:原始文本、翻译文本"),
              llms.TextParts(llms.ChatMessageTypeHuman, "<hello world>"),
          }
          content, err := llm.GenerateContent(ctx, messages, llms.WithJSONMode())
              它先定义了MessageContent数组,里面传入了系统提示词和用户提示词。调用的时候制定了返回值类型为json格式。github.com/tmc/langchaingo@v0.1.13/llms/generatecontent.go可以看到Message的定义如下:


          type MessageContent struct {
              Role  ChatMessageType
              Parts []ContentPart
          }
            type ChatMessageType string
              type ContentPart interface {
                  isPart()
              }
                func TextParts(role ChatMessageType, parts ...string) MessageContent {
                    result := MessageContent{
                        Role:  role,
                        Parts: []ContentPart{},
                    }
                    for _, part := range parts {
                        result.Parts = append(result.Parts, TextPart(part))
                    }
                    return result
                }
                其中TextPart定义如下
                  func TextPart(s string) TextContent {
                      return TextContent{Text: s}
                  }
                    type TextContent struct {
                        Text string
                    }
                    func (tc TextContent) String() string {
                        return tc.Text
                    }
                    func (TextContent) isPart() {}
                            前面介绍GenerateFromSinglePrompt和Call都是把提示词作为角色为用户,类型为文本的参数传递下来的。
                            指定返回值类型为json就更简单了,直接修改可选项参数即可,它最后作用于我们创建请求参数的地方,指定返回值类型为json
                      func WithJSONMode() CallOption {
                          return func(o *CallOptions) {
                              o.JSONMode = true
                          }
                      }
                        req := &openaiclient.ChatRequest{
                                Model:            opts.Model,
                                StopWords:        opts.StopWords,
                                Messages:         chatMsgs,
                                StreamingFunc:    opts.StreamingFunc,
                                Temperature:      opts.Temperature,
                                N:                opts.N,
                                FrequencyPenalty: opts.FrequencyPenalty,
                                PresencePenalty:  opts.PresencePenalty,
                                MaxCompletionTokens: opts.MaxTokens,
                                ToolChoice:           opts.ToolChoice,
                                FunctionCallBehavior: openaiclient.FunctionCallBehavior(opts.FunctionCallBehavior),
                                Seed:                 opts.Seed,
                                Metadata:             opts.Metadata,
                            }
                            if opts.JSONMode {
                                req.ResponseFormat = ResponseFormatJSON
                            }

                        文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论