要使用golang对接textgen webui本地大语言模型并实现api化,需按照以下步骤操作:1. 确保已安装golang环境并部署好textgen webui;2. 启动textgen webui的api模式(使用--api参数);3. 在go代码中构建包含prompt和生成参数的json请求体;4. 使用net/http或第三方库发送post请求至api端点;5. 解析返回的json响应并提取生成文本。此外,可通过连接池、并发控制、流式响应等手段优化性能,并通过检查http状态码、设置超时、记录日志等方式增强错误处理能力。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

Golang对接TextGen WebUI本地大语言模型API化,简单来说,就是用Go语言写代码,让你的程序能调用本地部署的大语言模型,就像使用一个在线API一样方便。

环境准备:

--api参数), 例如:
python server.py --api。
安装必要的Go包:
我们需要使用
net/http包来发送HTTP请求,以及
encoding/json包来处理JSON数据。 通常情况下这两个包是Go自带的,不需要额外安装。 如果需要更强大的HTTP客户端,可以考虑
github.com/go-resty/resty/v2。
构建请求体:
TextGen WebUI的API通常接受JSON格式的请求。你需要构建一个包含你的提示语(prompt)和其他参数的JSON对象。例如:
{
"prompt": "请用三句话介绍Golang。",
"max_new_tokens": 200,
"do_sample": true,
"temperature": 0.7,
"top_p": 0.9
}这些参数控制了生成文本的行为。
max_new_tokens限制了生成文本的最大长度,
temperature和
top_p影响生成文本的随机性。
发送HTTP请求:
使用
net/http包创建一个HTTP客户端,并发送POST请求到TextGen WebUI的API端点(通常是
http://127.0.0.1:5000/api/v1/generate)。设置
Content-Type为
application/json,并将构建好的JSON数据作为请求体发送。
处理响应:
接收到API的响应后,你需要解析JSON数据,提取生成的文本。通常,API会返回一个包含
results字段的JSON对象,其中
results是一个包含生成文本的数组。
Openflow
一键极速绘图,赋能行业工作流
88
查看详情
{
"results": [
{
"text": "Golang 是一种由 Google 开发的开源编程语言。它以其简洁的语法、高效的性能和强大的并发支持而闻名。Golang 非常适合构建网络服务、云计算和分布式系统。"
}
]
}完整代码示例:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"log"
)
type RequestBody struct {
Prompt string `json:"prompt"`
MaxNewTokens int `json:"max_new_tokens"`
DoSample bool `json:"do_sample"`
Temperature float64 `json:"temperature"`
TopP float64 `json:"top_p"`
}
type ResponseBody struct {
Results []struct {
Text string `json:"text"`
} `json:"results"`
}
func main() {
// 构建请求体
requestBody := RequestBody{
Prompt: "请用三句话介绍Golang。",
MaxNewTokens: 200,
DoSample: true,
Temperature: 0.7,
TopP: 0.9,
}
requestBodyJson, err := json.Marshal(requestBody)
if err != nil {
log.Fatalf("JSON 序列化错误: %v", err)
}
// 发送HTTP请求
resp, err := http.Post("http://127.0.0.1:5000/api/v1/generate", "application/json", bytes.NewBuffer(requestBodyJson))
if err != nil {
log.Fatalf("HTTP 请求错误: %v", err)
}
defer resp.Body.Close()
// 读取响应
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("读取响应错误: %v", err)
}
// 解析JSON响应
var responseBody ResponseBody
err = json.Unmarshal(body, &responseBody)
if err != nil {
log.Fatalf("JSON 反序列化错误: %v", err)
}
// 提取生成的文本
if len(responseBody.Results) > 0 {
fmt.Println(responseBody.Results[0].Text)
} else {
fmt.Println("未生成任何文本。")
}
}这个例子展示了如何用Go语言向TextGen WebUI发送请求并获取生成的文本。请注意,你需要根据你的TextGen WebUI的配置调整API端点和请求参数。 同时,错误处理部分可以更加完善,例如加入重试机制。
连接池:
net/http包默认会为每个请求创建一个新的TCP连接。 在高并发场景下,频繁创建和关闭连接会降低性能。 可以使用
http.Client的
Transport字段配置连接池,例如:
client := &http.Client{
Transport: &http.Transport{
MaxIdleConns: 100,
MaxIdleConnsPerHost: 100,
IdleConnTimeout: 90 * time.Second,
},
}这样可以复用已经建立的TCP连接,减少连接建立和关闭的开销。
并发请求: 如果需要同时处理多个请求,可以使用goroutine和channel来实现并发。 例如,可以创建一个worker pool,将请求分发给worker goroutine处理。
流式响应: TextGen WebUI支持流式响应,可以一边生成文本一边返回,而不是等待所有文本生成完毕才返回。 这可以显著降低延迟。 需要在请求头中设置
"Accept": "text/event-stream",并使用
bufio.NewReader逐行读取响应。 注意处理SSE (Server-Sent Events) 格式。
Gzip压缩: 启用Gzip压缩可以减少网络传输的数据量,提高传输速度。 可以在请求头中设置
"Accept-Encoding": "gzip",并在服务器端启用Gzip压缩。
缓存: 对于相同的prompt,可以缓存生成的文本,避免重复计算。 可以使用内存缓存或Redis等外部缓存。
GPU优化: 确保TextGen WebUI充分利用GPU资源。 检查CUDA Toolkit 和 cuDNN 是否正确安装和配置。 适当调整 TextGen WebUI 的启动参数,例如
--threads和
--n_batch。
prompt(string, required): 要生成文本的提示语。
max_new_tokens(int, optional, default: 250): 生成文本的最大token数。
temperature(float, optional, default: 1.0): 控制生成文本的随机性。 值越高,文本越随机。
top_p(float, optional, default: 1.0): 控制生成文本的多样性。 值越高,文本越多样。
top_k(int, optional, default: 0): 从概率最高的k个token中选择。 如果设置为0,则禁用。
typical_p(float, optional, default: 1.0): Typical sampling参数。
repetition_penalty(float, optional, default: 1.18): 重复惩罚参数。 用于防止模型重复生成相同的文本。
repetition_penalty_range(int, optional, default: 0): 重复惩罚的范围。
encoder_repetition_penalty(float, optional, default: 1.0): En
coder重复惩罚参数。no_repeat_ngram_size(int, optional, default: 0): 禁止重复的ngram的大小。 如果设置为0,则禁用。
min_length(int, optional, default: 0): 生成文本的最小长度。
do_sample(bool, optional, default: true): 是否进行采样。 如果设置为false,则使用greedy decoding。
seed(int, optional, default: -1): 随机种子。 用于控制生成文本的随机性。 如果设置为-1,则使用随机种子。
stop(list of strings, optional, default: []): 停止生成的字符串列表。 当生成文本包含列表中的任何一个字符串时,生成过程停止。
stream(bool, optional, default: false): 是否启用流式响应。
format(string, optional, default: "text"): 返回格式。 可以是 "text" 或 "json"。
model(string, optional): 指定要使用的模型。 如果未指定,则使用默认模型。
具体参数和默认值可能会因为TextGen WebUI的版本和使用的模型而有所不同。 最好参考TextGen WebUI的官方文档或API文档。
http.Client的
Timeout字段设置超时时间。
github.com/sony/gobreaker来实现熔断机制。
一个更健壮的错误处理示例:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
"log"
)
// ... (RequestBody 和 ResponseBody 定义)
func callAPI(requestBody RequestBody) (string, error) {
requestBodyJson, err := json.Marshal(requestBody)
if err != nil {
return "", fmt.Errorf("JSON 序列化错误: %w", err)
}
client := &http.Client{
Timeout: 10 * time.Second, // 设置超时时间
}
resp, err := client.Post("http://127.0.0.1:5000/api/v1/generate", "application/json", bytes.NewBuffer(requestBodyJson))
if err != nil {
return "", fmt.Errorf("HTTP 请求错误: %w", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", fmt.Errorf("读取响应错误: %w", err)
}
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("API 返回错误状态码: %d, 响应体: %s", resp.StatusCode, string(body))
}
var responseBody ResponseBody
err = json.Unmarshal(body, &responseBody)
if err != nil {
return "", fmt.Errorf("JSON 反序列化错误: %w, 响应体: %s", err, string(body))
}
if len(responseBody.Results) > 0 {
return responseBody.Results[0].Text, nil
} else {
return "", fmt.Errorf("未生成任何文本")
}
}
func main() {
requestBody := RequestBody{
Prompt: "请用三句话介绍Golang。",
MaxNewTokens: 200,
DoSample: true,
Temperature: 0.7,
TopP: 0.9,
}
result, err := callAPI(requestBody)
if err != nil {
log.Printf("API 调用失败: %v", err)
return
}
fmt.Println(result)
}以上就是Golang对接TextGen WebUI 本地大语言模型API化教程的详细内容,更多请关注其它相关文章!
# golang
# 加强党政建设网站
# 请用
# 创建一个
# 序列化
# 重试
# 客户端
# 推广网站搭建方案模板图片
# 青海济阳网站建设
# 流式
# 南京网站推广哪家便宜
# 短视频关键词排名怎么做
# 页面seo推广效果
# 营销型网站推广平台排名
# 南昌论坛营销推广渠道
# 景区营销软文推广案例
# 万词seo引流平台
# 错误信息
# 设置为
# 可以使用
# 地大
# 本地部
# red
# 并发请求
# api调用
# ai
# cad
# go语言
# git
# redis
# python
# 大语言模型
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
微软AR/VR专利提出使用时间复用谐振驱动产生双极性电源
【澎湃原动力】人工智能产业协同创新中心:全产业链资源在这里汇聚
中兴通讯无人机高空基站助力北京门头沟受灾乡镇保障应急通信
人工智能即将进入Windows:企业准备好安全策略设置了吗?
华为将于 7 月发布面向 AI 大模型的新款存储产品
马斯克“揭秘”人工智能真面目
大疆 Air 3 无人机售价和实物照片曝光
华为发布大模型时代AI存储新品
AI大举入侵内容行业,哪些上市*及动漫公司进行了布局?
技术如何使人变得懒惰?
商业智能决策技术助力降本增效,世界人工智能大会举办商业AI高峰论坛
不到2S创作AI图像!Snap发布图像生成器SnapFusion
「电子果蝇」惊动马斯克!背后是13万神经元全脑图谱,可在电脑上运行
特斯拉门店可能启动机器人卖车?也许不是你想的那样
「模仿学习」只会套话?解释微调+130亿参数Orca:推理能力打平ChatGPT
人工智能创作的“婴儿版超级英雄”,你觉得哪个最可爱
如何用AI开创智慧能源新时代?固德威正让能源“通人性”!
杭州举办第19届亚运会,主题为「亚运元宇宙」的发布仪式举行
视觉中国推出AI灵感绘图功能
磐镭发布全新 GeForce RTX 4080 ARMOUR 显卡,售价为 9499 元
五项人工智能尚未能够实现的任务
盘古大模型3.0正式发布 AI开发正走向新“工业化开发模式”
英伟达的AI领域垄断地位:一直无法撼动吗?
海南省公安机关警用无人机培训班结业并举行警航比武演练
马斯克称未来机器人数量将多于人类,特斯拉愿共享自动驾驶技术
云鲸发布全新的扫拖机器人J4系列
类GPT模型训练提速26.5%,清华朱军等人用INT4算法加速神经网络训练
AMD称下半年AI显卡供应充足,不需要像NVIDIA那样加价抢购
微软bing聊天推出AI购物工具 可进行比价并查看历史最低价
音乐制作元工具AudioCraft发布开源AI工具
先进技术在防止全球数据丢失方面的作用
机器人加速!稀土永磁也被带火,持续性如何?
QQ音乐业内率先推出「AI一起听」功能,领取你的AI听歌助手
朱民:普通人炒股炒不过机器人是很正常的 AI已经能理解市场情绪
腾讯TRS之元学习与跨域推荐的工业实战
Win11 AI 助手 Windows Copilot 被吐槽:套皮的 Edge 浏览器
微软大牛加入ZOOM,AI人才大战打响
国宝级文物“铜兽驮跪坐人顶尊铜像”完成模拟拼接,腾讯AI立功
人工智能领域,突破难题:国产大模型“无源之水”问题得到解决。
B站内测 AI 搜索功能,输入“?”即可体验
掌阅科技入选北京市通用人工智能产业创新伙伴计划第二批成员名单
华为即将推出HarmonyOS 4,再度领先行业的AI技术
为什么很多人对纽约《人工智能招聘法》感到生气?
机器人 展才能
即时 AI再次升级 30秒生成自带动效的网页 生成速度提升100%
数字文明尼山对话 | 在东方圣城与AI潮流梦幻联动,看“智慧大脑”让数字山东更美好
AI进军债券交易,BondGPT来了!
华为小艺AI助手将实现强大的大模型能力
AI拉动PCB发展|行业发现
人工智能进入绿植界,智能庭院市场初具规模
2025-08-04
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。