首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >golang源码分析:langchaingo(4)

golang源码分析:langchaingo(4)

作者头像
golangLeetcode
发布2026-03-18 17:55:40
发布2026-03-18 17:55:40
1020
举报

前面介绍了GenerateFromSinglePrompt和Call最终都调用了

GenerateContent,其实也可以直接调用它,看看下面的例子

代码语言:javascript
复制
代码语言:javascript
复制
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的定义如下:

代码语言:javascript
复制
代码语言:javascript
复制
type MessageContent struct {
    Role  ChatMessageType
    Parts []ContentPart
}
代码语言:javascript
复制
type ChatMessageType string
代码语言:javascript
复制
type ContentPart interface {
    isPart()
}
代码语言:javascript
复制
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定义如下

代码语言:javascript
复制
func TextPart(s string) TextContent {
    return TextContent{Text: s}
}
代码语言:javascript
复制
type TextContent struct {
    Text string
}
func (tc TextContent) String() string {
    return tc.Text
}
func (TextContent) isPart() {}

前面介绍GenerateFromSinglePrompt和Call都是把提示词作为角色为用户,类型为文本的参数传递下来的。

指定返回值类型为json就更简单了,直接修改可选项参数即可,它最后作用于我们创建请求参数的地方,指定返回值类型为json

代码语言:javascript
复制
func WithJSONMode() CallOption {
    return func(o *CallOptions) {
        o.JSONMode = true
    }
}
代码语言:javascript
复制
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
    }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档