和上面调用 Token 的逻辑类似,不过这里我们需要使用 POST 来发送请求,并携带合适的请求参数 。
关于图片风格的定义,这里简单实现了一个随机选取风格,更好的实现是根据用户的内容,自动选择合适的模型风格,如果你感兴趣,可以在项目中提交你的代码实现,让更多的人受惠于此 。
好了,上面的代码就是核心实现 。但是,为了让实现生效,我们还需要完成一些边边角角的调整 。
我们需要先在流式响应组件中/-/.go,添加一段调用,让服务端在响应请求的时候,能够将用户提交的交给我们刚刚封装好的程序 。
package StreamResponser...func StreamBuilder(parentMessageID string, conversationID string, modelSlug string, broker *eb.Broker, input string, mode StreamMessageMode) bool {...switch modelSlug {...case datatypes.MODEL_FLAGSTUDIO.Slug:if define.ENABLE_FLAGSTUDIO {sequences = MakeStreamingMessage(FlagStudio.GenerateImageByText(input), modelSlug, conversationID, messageID, mode)quickMode = true}...}...}
接着,是在程序功能开关中添加一些定义 。如果你不需要按需启用,可以不进行实现:
var (ENABLE_FLAGSTUDIO= GetBool("ENABLE_FLAGSTUDIO", false)// Enable FlagstudioENABLE_FLAGSTUDIO_ONLY = GetBool("ENABLE_FLAGSTUDIO_ONLY", false)// Enable Flagstudio onlyFLAGSTUDIO_API_KEY= GetSecret("FLAGSTUDIO_API_KEY", "YOUR_FLAGSTUDIO_SECRET") // Flagstudio API Token)
为了实现多种模型、数据源的切换,我们还需要为每一种数据源进行一些数据预定义 。在模型列表目录中创建一个新程序文件//.go,在其中添加我们自定义的新数据源:
var MODEL_FLAGSTUDIO = ModelListItem{Slug:"flag-studio",MaxTokens:1000,Title:"FlagStudio",Description: "FlagStudio is a text-to-image platform developed by BAAI's z-lab and FlagAI team.\n\nIt supports 18-language text-to-image generation including Chinese and English, and aims to provide advanced AI art creation experience.",Tags:[]string{},QualitativeProperties: ModelListQualitativeProperties{Reasoning:[]int{4, 5},Speed:[]int{4, 5},Conciseness: []int{3, 5},},}
为了让模型能够被正常调用,我们还需要实现模型获取 API 中的一些实现,依旧是创建一个新的程序 /api//.go,定义一个获取我们定义好的模型类型的功能:
package modelsimport ("github.com/soulteary/sparrow/internal/datatypes""github.com/soulteary/sparrow/internal/define")func GetFlagStudioModel() (result []datatypes.ModelListItem) {model := datatypes.MODEL_FLAGSTUDIOif define.ENABLE_I18N {model.Description = "FlagStudio 是由 BAAI 旗下的创新应用实验室和 FlagAI 团队开发的文图生成工具 。\n\n支持中英等18语的文图生成,旨在为大家提供先进的AI艺术创作体验 。"}result = append(result, model)return result}
最后,实现完调用函数,我们将调用函数添加到/api//.go 中,当调用模型列表的时候,就能够访问到我们的新增的模型或者数据源了 。
package modelsimport ("net/http""github.com/gin-gonic/gin""github.com/soulteary/sparrow/internal/datatypes""github.com/soulteary/sparrow/internal/define")func GetModels(c *gin.Context) {...if define.ENABLE_FLAGSTUDIO {model := GetFlagStudioModel()if define.ENABLE_FLAGSTUDIO_ONLY {c.JSON(http.StatusOK, datatypes.Models{Models: model})}modelList = append(modelList, model...)}...}
目前添加新数据源的体验还不是很好,后续我考虑进行一些优化调整,让添加数据源能够更简单明了一些 。当然,后端服务是开源实现,如果你有好的想法,也可以进行开源共建 。
- 5 分钟,看完没有人比你更懂“语音识别”!
- 不止噶腰子!这10部恐怖电影会让你重新考虑你的出国旅行计划 世界十大恐怖歌曲
- “让读者在作品中听到中国在歌唱” 歌曲中国之最原唱版
- TES“让二追三”创造历史,这支“全华班”强的不仅是实力还有心理 es历史之最
- 全球公认最强的十大军力,日本勉强上榜,中美的排名让人意外 历史上十大战争之最是什么
- 西瓜和山楂哪个含糖量更高
- ipad和电脑哪个更适合大学生
- 揭秘比金字塔更为壮观的阿房宫未解谜团
- 野史:让皇帝腾出床来偷情的风流皇后何婧英
- chatgpt赋能python:Python自动代码生成:让编程更高效!