从零开始构建基于ChatGPT的嵌入式(Embedding)本地医疗客服问答机器人模型,手把手教学!看完就会,看到最后有惊喜)

部署一个私人定制化GPT聊天机器人(纯干货手把手教学) 个人微信接入GPT机器人、实现自动回复。支持插件等等功能 阅读详情

前端完全也能搭建, 前端完全也能搭建, 前端完全也能搭建, 本文中我使用的是后端语言golang,来调用的所有外部接口,但它们均是restful api,所以如果你使用的是其他语言,那么是完全可以替换的,包括nodejs或者直接使用前端请求都是可以实现我的功能的。后面有机会会使用vue3来添加一个页面,现在主要通过postman或者apifox来调试接口,主要为了验证逻辑想法。

接下来首先来看看embeddings到底是什么吧

1.1、 官网的介绍是这样的

image.png

可以被应用于以下几种情况

-   搜索(根据查询字符串的相关性对结果进行排名)
-   聚类(根据相似性对文本字符串进行分组)
-   推荐(具有相关文本字符串的项目被推荐)
-   异常检测(识别关联度小的异常值)
-   多样性测量(对相似性分布进行分析)
-   分类(文本串按其最相似的标签进行分类)

本文将主要学习第一种情况:搜索,根据相关性进行排名。也可以理解成搜索完一定会有结果,但是相关性有可能很低,有可能需要用户加以甄别。出来的信息可能不是用户需要的答案。

1.2、 而chatgpt是这样跟我说的

image.png

1.3、最后我的一句话理解便是:它可以将文本转换为固定长度的连续向量。

比如我下面使用的 text-embedding-ada-002模型输出的向量维度便是1536,这个在官网是有描述的,大家可以认真看看), 同时它是可以将任意的文本转换为向量。

那么接下来我会根据我的思路把我整个的搭建流程和调试思路都展现出来,方便自己后面进行复习查阅,也方便可能需要的你。

2、架构流程图介绍

embedding (1).png

从上图可以比较清晰明了的知道大致要干什么了

  • 准备测试数据:测试数据可能很多一个很大的数组,慢慢通过调用ChatGPT接口进行转换数据,然后将转换后的向量数据存储到qdrant云数据库中,相当于本地数据了。
  • 根据查询返回结果:首先还是将要查询的字符串调用ChatGPT接口转换为向量数据,然后再将向量数据与向量数据库中的进行匹配相似度,匹配结束可以再通过GPT-3.5或者GPT-4的模型接口进行进一步的优化数据处理。

接下来就根据如下步骤一步步进行搭建

  • Qdrant云数据库的搭建
  • 准备测试数据并写入云数据库
  • 进行查询并返回结果

3、Qdrant云数据库的搭建

3.1、初识Qdrant

image.png

说白一点就是为了存储我自己的测试数据,不过它的重点是存储向量数据。

来到github上看了一下:github.com/qdrant/qdra… , 有点牛逼 而且是Rust写的。那就来试试玩玩呗。

3.2、创建云数据库

通过github可以直接到云官网: Vector Search Database | Qdrant Cloud

image.png

可以看到能免费创建一个免费套餐,拿来做个测试还是非常方便的。

针对图示的配置,可以永久免费使用,所以基本的测试是没问题了,可以好好的愉快玩耍。

找到左侧菜单Clusters然后右侧点击 Create,输入一个cluster名称(是不是可以翻译为集群名称??)。创建后等待一会儿在进行初始化。

image.png

点击上面的api-key 或者左侧 Access 都可以创建访问云数据库的链接和api-key。

image.png 记得复制好哟,这个跟ChatGPT生成的API-Key一样,只能看到一次,所以要保存好。

3.3、通过curl 接口访问

Swagger UI (qdrant.tech) 这个就是官方提供给我们的Swagger。可视化 RESTful Web Api

image.png

我是通过这个主要看接口以及接口参数,主要还是通过postman或者apifox等工具来测试接口,swagger这里好像没有配置api-key的地方?

image.png

ok可以看到我之前创建的 collect 还在,其实这个时候本来是要创建一个collect集合(在关系型数据库中可以叫做table表)。

4、写入测试数据

4.1、准备测试数据

image.png

image.png

注意:以上数据来源于ChatGPT,仅供参考和测试使用

然而我想要的数据结构是json数组的,那么继续使用ChatGPT进行装逼

image.png

可以发现准备这一组测试数据,有一点不费吹灰之力的感觉,真是太爽了。

这里就是准备的json数组,总共13条简单的记录而已,主要是为了看一下效果

[    {        "title": "感冒",        "text": "感冒是一种由病毒引起的呼吸道感染。典型症状包括喉咙痛、流鼻涕、咳嗽、打喷嚏、头痛和发热。"    },    {        "title": "流感",        "text": "流感(Influenza)是一种由流感病毒引起的呼吸道感染。症状与感冒相似,但通常更严重,包括高热、寒战、喉咙痛、咳嗽、鼻塞、肌肉痛和乏力。"    },    {        "title": "肠胃炎",        "text": "肠胃炎是胃和肠道的炎症,通常由病毒、细菌或寄生虫感染引起。症状包括腹泻、呕吐、腹痛、恶心、发热和脱水。"    },    {        "title": "常见皮肤病",        "text": "如湿疹、皮炎、脓疱疮、疱疹等。症状可能包括红肿、瘙痒、干燥、脱皮和疼痛。"    },    {        "title": "头痛",        "text": "头痛有许多原因,如压力、紧张、缺水、缺乏睡眠等。头痛可能表现为钝痛、搏动痛、集中在头的某个部位等。"    },    {        "title": "过敏",        "text": "过敏是免疫系统对外来物质(过敏原)的异常反应。症状包括打喷嚏、流鼻涕、鼻塞、喉咙痛、眼睛痒、红肿和喘息。"    },    {        "title": "高血压",        "text": "高血压是血压持续升高的病状。许多高血压患者没有明显症状,但可能会引发头痛、眩晕、心悸和呼吸困难。"    },    {        "title": "糖尿病",        "text": "糖尿病是一种由于胰岛素分泌不足或细胞对胰岛素反应不良导致的血糖水平过高的疾病。症状包括频繁的小便、口渴、饥饿、疲劳、视力模糊、感染和伤口愈合缓慢。"    },    {        "title": "哮喘",        "text": "哮喘是一种慢性呼吸道炎症疾病,表现为气道对刺激物的过度反应。症状包括喘息、呼吸困难、胸闷和咳嗽。"    },    {        "title": "背痛",        "text": "背痛可能是由于肌肉拉伤、韧带损伤、关节炎、椎间盘问题等原因引起的。症状包括持续或间歇性的背部疼痛、僵硬和肌肉痉挛。"    },    {        "title": "关节炎",        "text": "关节炎是关节炎症的一个通用术语,可能是由于多种原因引起的,如磨损性关节炎、类风湿性关节炎等。症状包括关节疼痛、肿胀、僵硬和活动受限。"    },    {        "title": "痔疮",        "text": "痔疮是肛门或直肠血管的炎症或肿胀。症状包括肛门疼痛、瘙痒、肿胀、出血和可能的肛门突出物。"    },    {        "title": "眼疾",        "text": "如干眼症、结膜炎和近视等。症状可能包括眼睛干燥、瘙痒、红肿、分泌物和视力模糊。"    }]


4.2、go代码将测试数据转换为向量数据

这里暂时就要用到ChatGPT的接口了

image.png

看官网接口请求主要就两个参数,一个就是model 选择模型,我这里使用的是text-embedding-ada-002,另外一个input 就是我们要转换的数据字符串了,好了直接上代码看看

func GetEmbeddings(ctx *gin.Context) dto.ResponseResult {
    // 配置日志
    data, _ := ctx.GetRawData()
    var parameters map[string]interface{}
    // 包装成json 数据
    _ = json.Unmarshal(data, &parameters)

    input := parameters["input"].(string)
    // n := m["n"].(int)
    // size := m["size"].(string)
    var response = GetEmbeddingApi(input)
    var obj map[string]interface{}
    if err := json.Unmarshal(response, &obj); err != nil {
            panic(err)
    }
    fmt.Println("Body:", obj)
    return dto.SetResponseData(obj)
}

func GetEmbeddingApi(input string) []byte {
    // 定义请求参数
    embeddingModel := EmbeddingModel{
            Model: "text-embedding-ada-002",
            Input: input,
    }
    // 定义请求地址
    url := utils.OpenAIUrl + `/v1/embeddings`
    // 将请求参数转换为json格式
    bytes, err := json.Marshal(embeddingModel)
    if err != nil {
            fmt.Println("Error:", err)
            // return dto.SetResponseFailure("调用openai发生错误")
    }
    // 定义请求
    req := fasthttp.AcquireRequest()
    defer fasthttp.ReleaseRequest(req)

    req.SetRequestURI(url)
    req.Header.SetMethod("POST")
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer "+utils.OpenAIAuthToken)
    req.SetBody(bytes)
    // 定义响应
    resp := fasthttp.AcquireResponse()
    defer fasthttp.ReleaseResponse(resp)

    if err := fasthttp.Do(req, resp); err != nil {
            fmt.Println("Error:", err)
            // return dto.SetResponseFailure("调用openai发生错误")
    }

    fmt.Println("Status:", resp.StatusCode())

    return resp.Body()
}


我在代码里添加了详细的注释,对照代码看一下应该还是比较好理解的。

这里其实就是通过go语言调用restful 接口 https://api.openai.com/v1/embeddings 请求,因为下面查询的时候还需要将查询字符串转换为向量数据,所以我单独进行了封装可以在两个地方调用

4.3、循环上述方法将预准备的json测试数据全部转换为向量数据
// 解析请求参数
var jsonData []map[string]string
if err := c.Bind(&jsonData); err != nil {
        return dto.SetResponseFailure("error")
}
if len(jsonData) == 0 {
        return dto.SetResponseFailure("json is empty")
}
// 数据向量化
points := make([]Point, 0)
for _, v := range jsonData {
        // 获取文本内容
        input := v["text"]
        // 获取文本内容的向量
        response := GetEmbeddingApi(input)
        fmt.Println(response, "response----response")
        var embeddingResponse EmbeddingResponse
        json.Unmarshal(response, &embeddingResponse)
        points = append(points, Point{
                ID:      uuid.New().String(),
                Payload: v,
                Vector:  embeddingResponse.Data[0].Embedding,
        })
}

4.4、将上面准备好的向量数据数组全部写入向量数据库

现在向量数据通过ChatGPT接口转换好了,现在就需要将向量数据写入到Qdrant云数据库中。 下面主要是调用了CreatePoints方法,同样可以看看

pr := PointRequest{
        Points: points,
}

//存储
err := CreatePoints(utils.QdrantCollectName, pr)
if err != nil {
        // common.Logger.Error(err.Error())
        // c.JSON(http.StatusOK, common.Error(err.Error()))
        // return
        return dto.SetResponseFailure("数据上传发生错误")
}
// c.JSON(http.StatusOK, common.Success(nil))
return dto.SetResponseSuccess("数据上传成功")

其实相对来说我前面也写过的,就是来调用Restful api写入到云数据库。

func CreatePoints(collectionName string, pointRequest PointRequest) (err error) {
    response := &CommonResponse{}
    var reqBytes []byte
    reqBytes, err = json.Marshal(pointRequest)
    if err != nil {
            return
    }

    body, err := middleware.Send(http.MethodPut, collectionApi+"/"+collectionName+pointsApi+"?wait=true", reqBytes)
    if err != nil {
            return
    }
    err = json.Unmarshal(body, &response)
    if err != nil {
            return
    }
    if response.Result == nil {
            return errors.New(response.Status.(map[string]interface{})["error"].(string))
    }
    return
}

这里其实就是通过go语言调用restful 接口 https://ui.qdrant.tech/#/points/upsert_points (点击查看具体的接口详情) 请求

现在测试数据有了,向量数据库也有了,上一小节将测试数据转换为了向量数据,这里上面刚刚又写好了向量数据写入云数据库的接口。那么写入数据的基本完成了。

通过运行接口来调试一下吧

image.png

5、开始查询数据

准备好查询数据,先通过##3.2将字符串转换为向量数据(也就是为什么进行封装上面的方法的原因),然后通过向量数据去查询云数据库,去查询相似度了

5.1、将查询字符串转换为向量数据

那么这里就先准备一下查询云数据库的接口

var message ChatMeMessage
if err := c.Bind(&message); err != nil {
        // c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        // return
}
response := GetEmbeddingApi(message.Text)

json.Unmarshal(response, &response)
fmt.Println(response, "response----response")
var embeddingResponse EmbeddingResponse
json.Unmarshal(response, &embeddingResponse)

这里其实就是通过go语言调用restful 接口 https://api.openai.com/v1/embeddings 请求

这里注意一下,我理解的正常的话只要云数据库有数据,就会返回数据的,无非相似度低一些而已。

5.2、根据向量来查询匹配相关性高的前三条记录

准备查询参数数据,然后到Qdrant云数据库进行查询

params := make(map[string]interface{})
params["exact"] = false
params["hnsw_ef"] = 128

sr := PointSearchRequest{
        Params:      params,
        Vector:      embeddingResponse.Data[0].Embedding,
        Limit:       3,
        WithPayload: true,
}

//查询相似的
res, err := SearchPoints(utils.QdrantCollectName, sr)
if err != nil {
        // common.Logger.Error(err.Error())
        // c.JSON(http.StatusOK, common.Error(err.Error()))
        // return
}

这里其实就是通过go语言调用restful接口 https://ui.qdrant.tech/#/points/search_points(点击查看具体的接口详情) 请求

5.3、通过chatGPT对查询的相关性数据进行优化

其实上面查询出来数据列出来就完事了,但是我上面也说了相关性的问题,那么这里我们可以通过ChatGPT对于查询返回的数据加工一下。

//组装本地数据
localData := ""
for i, v := range res {
        re := v.Payload.(map[string]interface{})
        localData += "\n"
        localData += strconv.Itoa(i + 1)
        localData += "."
        localData += re["title"].(string)
        localData += ":"
        localData += re["text"].(string)
}
messages := make([]ChatCompletionMessage, 0)
q := "使用以下段落来回答问题,如果段落内容与\"" + message.Text + "\"不相关就通过查询返回信息。"
q += localData

system := ChatCompletionMessage{
        Role:    "system",
        Content: "你是一个医院问诊客服机器人",
}

user := ChatCompletionMessage{
        Role:    "user",
        Content: q,
}

messages = append(messages, system)
messages = append(messages, user)
var chatResponse = GetChatCompletionsApi(messages)
var obj map[string]interface{}
if err := json.Unmarshal(chatResponse, &obj); err != nil {
        panic(err)
}
fmt.Println("Body:", obj)

// 最后我通过一个方法进行统一返回参数处理
return dto.SetResponseData(obj)


5.4、调试效果

image.png

这是我通过GPT-3.5模型的接口调试其返回结果并不是非常理想。但是如果通过GPT-4.0就完全可以达到我想要的结果了

image.png

当然了我这里演示的数据较少,仅用作演示效果,但是这种简单的问答模式加上最后GPT来润色优化有点好用了。而且还可以进行优化,比如问的问题是本地没有的,通过GPT回答后,可以进行操作,将当前问答回写到本地云数据库,这样下次再有类似的问答,就可以直接使用本地的数据了,这里仅仅提供一点点的我思考的逻辑,不一定是对的。

6、总结

这个对于我来说,理解起来还是蛮费劲的,主要是一开始没有抓到重点,其实现在把思路捋顺了,从应用的层面来看也就那么回事,当然了目前我的理解还是比较浅显的,有待机会进一步深入摸索,大数据训练模型。是不是可以考虑训练一个自己的AI虚拟人。当然还有另外一个Fine-Tunes 跟Embedding有没有关系,我得继续研究研究了,感觉上还是非常好玩的。

再次声明本文所有代码都已上传github github.com/aehyok/go-o…

本文主要参考:github.com/coderabbit2…, 也感谢大佬的及时回复解答我的疑惑。

我的个人博客:vue.tuokecat.com/blog

我的个人github:github.com/aehyok

我的前端项目:pnpm + monorepo + qiankun + vue3 + vite3 + 工具库、组件库 + 工程化 + 自动化
不断完善中,整体框架都有了
在线预览:vue.tuokecat.com
github源码:github.com/aehyok/vue-…

7、惊喜多多

当然有可能很多巨佬比我知道的还早

惊喜便是: Cursor | Build Fast一个目前免费使用GPT-4模型的生成代码,学习代码,修改代码,发现bug,处理bug的工具,可直接打开项目文件进行实操

惊喜便是:www.steamship.com如果你想调用GPT-4的接口,但苦于申请还在等待列表,那么你可以尝试一下这个,注意目前也是免费哟

惊喜便是:如果你想调用官方openai.com的接口,那么可以考虑一下这个第三方平台 api2d.com/r/186083,目前…

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
从零开始构建基于ChatGPT的嵌入式(Embedding)本地医疗客服问答机器人模型(看完就会,看到最后有惊喜) 代码全部开源,GitHub地址为:前端完全也能搭建, 前端完全也能搭建, 前端完全也能搭建, 本文中我使用的是后端语言golang,来调用的所有外部接口,但它们均是restful api,所以如果你使用的是其他语言,那么是完全可以替换的,包括nodejs或者直接使用前端请求都是可以实现我的功能的。后面有机会会使用vue3来添加一个页面,现在主要通过postman或者apifox来调试接口,主要为了验证逻辑想法。接下来首先来看看embeddings到底是什么吧可以被应用于以下几种情况。 阅读详情

相关推荐

用LangChain+RAG构建生产级文档问答系统

文档智能问答是企业知识管理的核心场景,其本质是将非结构化文档转化为可检索、可推理、可溯源的语义向量空间。技术原理基于检索增强生成(RAG)范式,通过文档加载、清洗、语义分块、向量嵌入与精准检索四步闭环,规避大模型幻觉与上下文过载风险。其核心价值在于降低用户信息获取成本、提升客服响应效率、实现知识资产复用,已在智能硬件、医疗设备、SaaS服务等多行业落地验证。典型应用场景包括产品手册即时答疑、API文档自助查询、内部员工知识支持等。本文聚焦LangChain框架下的工程化实践,覆盖从PDF/HTML文档预处理

weixin_30940783的博客 387

自己实现 OpenAI 的 /v1/embeddings 接口

自己实现 OpenAI 的 /v1/embeddings 接口

engchina的专栏 3039

大语言模型与ChatGPT:从原理到实战的完整指南

大语言模型是基于Transformer架构的深度学习模型,通过海量数据训练,学习语言的统计规律和模式。其核心原理是自注意力机制,能够动态捕捉文本中的长距离依赖关系。随着模型参数规模的扩大,涌现出代码生成、逻辑推理、多轮对话等复杂能力,为自然语言处理带来了革命性突破。在工程实践中,大语言模型通过API集成或本地部署,广泛应用于内容创作、编程辅助、数据分析等场景。本文聚焦于ChatGPT这一现象级应用,深入剖析其产品化策略、使用技巧与局限性,并探讨开源与闭源模型的选型考量。对于开发者而言,理解提示词工程和检索增

anqiu4023的博客 362

四步搭建自己的专属 ChatGPT(附开源代码)

在未来,ChatGPT将成为人工智能应用领域的支柱,推动人机交互、智能客服和在线教育等领域的发展。如果你对ChatGPT和人工智能有浓厚的兴趣,推荐你阅读一些相关的资料和课程,以便更好地了解和应用ChatGPT。第一步,获取ChatGPT小程序的源代码。我们为每个人提供了免费开放的源代码,你可以根据自己的需求进行二次修改和创作。希望你能加入我们的开发者交流群,一起探索人工智能和小程序的结合。将请求的服务器地址修改为你自己的地址,这样你就可以完全掌控ChatGPT的运行。

向来缘浅,奈何情深 7460

从零搭建基于大语言模型的智能问答系统:架构设计与实战指南

检索增强生成(RAG)技术通过结合信息检索与文本生成,有效解决了大语言模型在处理私有或最新数据时的局限性。其核心原理是将文档转换为向量存储于向量数据库,检索相关片段后与大语言模型协同生成精准答案。这项技术显著提升了问答系统的专业性和准确性,在智能客服、知识库助手等场景中价值突出。本文聚焦于如何基于RAG架构,从零构建一个完整的智能问答系统,涵盖核心模块设计、技术栈选型及分步实现路线,并针对提示词优化、检索效果提升等常见问题提供解决方案。

weixin_33851604的博客 417

边缘智能体实战:从本地文档问答看AI如何走向边缘计算

人工智能(AI)正从云端数据中心向网络边缘迁移,这一范式转变的核心驱动力在于对低延迟、数据隐私和成本效益的刚性需求。边缘计算通过在数据产生源头就近处理信息,实现了毫秒级实时响应,并确保了敏感数据不出本地,满足了工业质检、自动驾驶等场景的严苛要求。其技术价值在于将AI能力嵌入资源受限的设备,完成自主感知、决策与执行,形成完整的智能闭环。这依赖于轻量化模型、高效推理引擎与本地化智能体框架等技术栈的协同。本文通过构建一个完全离线的文档问答边缘智能体,具体展示了如何利用量化模型、本地向量数据库与轻量推理库,在普通笔

angou6476的博客 436

从零开始构建基于ChatGPT的嵌入式(Embedding)本地医疗客服问答机器人模型

代码全部开源,GitHub地址为:前端完全也能搭建, 前端完全也能搭建, 前端完全也能搭建, 本文中我使用的是后端语言golang,来调用的所有外部接口,但它们均是restful api,所以如果你使用的是其他语言,那么是完全可以替换的,包括nodejs或者直接使用前端请求都是可以实现我的功能的。后面有机会会使用vue3来添加一个页面,现在主要通过postman或者apifox来调试接口,主要为了验证逻辑想法。接下来首先来看看embeddings到底是什么吧可以被应用于以下几种情况。

python123456_的博客 1161

本地LLM实践指南:从基础原理到RAG与自动化工作流

大语言模型(LLM)的落地部署正从云端向本地延伸,形成一种新的AI计算范式。本地推理不仅关乎模型权重与参数量、量化精度等底层技术原理,更在隐私保护、调用成本与定制自由度上带来根本性改变。通过Ollama、LM Studio等推理引擎,开发者可在个人电脑或内部服务器上运行7B至14B级别的量化模型,实现离线编程辅助、私有知识库问答(RAG)、文本结构化抽取及自动化Agent等真实场景应用。本文从核心概念出发,剖析量化与内存带宽对性能的影响,并给出基于OpenAI兼容API与MCP协议的最小可运行示例,帮助你在

weixin_30791095的博客 617

【花雕学编程】ESP32 ChatGPT之语音问答系统

涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。无论是复杂的问题、模糊的表述还是带有方言口音的语音输入,都有较高的识别和理解准确率,能够以人类自然语言的方式进行流畅对话,使交互更加自然、便捷。用户可以询问关于疾病症状、药物使用、健康生活方式等方面的问题,系统根据其知识储备给出相应的回答和建议,帮助用户进行初步的健康评估和自我保健,但需要注意不能替代专业的医疗诊断。例如,系统能够记住用户的常用问题和设置,对用户的提问风格和需求有更深入的理解,从而给出更符合用户期望的回答,提升用户体验。

雕爷学编程 916

ChatGPT基础知识系列之Embeddings模型

这一节主要介绍了ChatGPT的Embeddings模型,主要包括Embeddings 的发展历程和使用方式Embeddings 的使用场景Embedding可以作为其他机器学习模型的输入。

5万+

ChatGPT 嵌入开发

ChatGPT 嵌入开发

美丽海滨 586

JavaScript驱动的嵌入式机器人革命:Stack-chan如何重新定义机器人开发范式

在嵌入式开发领域,C/C++长期占据主导地位的时代正在被打破。当Web开发者渴望将JavaScript的灵活性与物联网设备结合时,一个技术鸿沟横亘在他们面前——直到Stack-chan的出现。这个基于M5Stack平台的超可爱机器人,不仅是一个硬件项目,更是一场JavaScript在嵌入式领域的革命性实践。 ## 技术演进:从硬件壁垒到JavaScript民主化 传统嵌入式开发需要深厚的硬件知

gitblog_00763的博客 829

双目视觉三维重构(一)————简介

优快云中关于立三维重构的介绍层出不穷,CNKI中也有各类综述对三维重构进行总结,撰写这篇博客仅作为本人对该类博客、论文的总结学习,加深自身学习的印象、作为学习的笔记。如有错误的地方,欢迎指正。   1、三维重构 1.1、三维重构到底是什么?   首先要了解立体匹配算法,首先要知道立体匹配算法主要具体应用于什么方向。 三维重构又被称为三维重建,百度百科中对它的定义为:指对三维物体建立适合...

qq_39634612的博客 1万+

解锁JavaScript机器人开发:Stack-chan开源项目全攻略

Stack-chan是一个基于JavaScript驱动的M5Stack嵌入式超级可爱机器人项目,它让JavaScript嵌入式开发变得简单有趣。通过M5Stack机器人编程,即使是没有硬件知识的开发者也能快速上手,打造属于自己的个性化机器人。本指南将带你全面了解Stack-chan项目,从项目概览到创新应用,一步步探索这个令人兴奋的开源项目。 ## 项目概览:认识Stack-chan 让我们先

gitblog_00897的博客 465

STM32H745xI双核芯片SMPS/LDO配置误区:从复位失败到精准排查的实战复盘

本文详细分析了STM32H745xI双核芯片在SMPS/LDO配置中的常见误区,特别是复位失败问题的排查过程。通过对比参考板与故障板的波形数据,揭示了电感选型不当导致的电源稳定性问题,并提供了硬件设计检查清单和调试技巧,帮助开发者避免类似陷阱。

weixin_42531588的博客 265

S7-1200中通过MODBUS TCP客户端在一次请求中实现从服务器读写一个或多个保持性寄存器的具体方法

S7-1200中通过MODBUS TCP客户端在一次请求中实现从服务器读写一个或多个保持性寄存器的具体方法

Robot_PLC_HMI_Automation 4225

想要转行ai赛道?看完这篇少走三年弯路!

今天就来聊聊,AI大模型有哪些方向,新人怎么转行大模型赛道,让大家少走弯路,早日在AI领域如鱼得水!

python1234567_的博客 828

fast-lio系列改进版本

2.回环检测的优化结果,更新到FAST-LIO2的当前帧位姿中,幷进行ikdtree的重构,进而更新submap。其它的效果还不清楚,实测lio部分稳定性很好。用fast-lio_slam就很稳定。融合了fast-lio2和sc-pgo,两部分分开运行,SC-PGO从FAST-LIO2节点获取里程计和激光雷达点云主题。的作者kim在FAST-LIO2的基础上,添加SC-PGO模块,通过加入ScanContext全局描述子,进行回环修正,SC-PGO模块与FAST-LIO2解耦,非常方便,很优秀的工作。

z1872385的博客 3189

模型蒸馏与小公司-ChatGPT4o作答

模型蒸馏技术为小公司提供了一个更高效、灵活、低成本的途径来应用和创新语言模型。通过将大型模型的知识迁移到更小、更高效的模型中,小公司能够利用先进的AI技术,在没有庞大计算资源的情况下,快速响应市场需求和用户期望,推动创新应用的开发。从资源优化到应用创新,模型蒸馏不仅为小公司提供了切实的竞争优势,也为它们在AI领域的持续成长打下了基础。

qq_46215223的博客 791

【Coze搞钱实战】24. 从零实现精准用户画像:Coze+企业微信打造智能导购推送系统(附完整代码)

电商运营中,“客服重复询问用户需求、无法精准推荐”是转化率低的核心痛点——日均200人次咨询,73%的问题是重复的,首单转化率仅14%。本文基于Coze平台sys_uuid用户识别功能、企业微信API与多维表格,打造“用户行为→自动打标→标签存储→智能推送”全链路方案:通过分类分层标签体系捕捉用户偏好,Coze自动识别用户并打标,飞书多维表格存储标签数据,企业微信触发个性化推送。实操后可使客服重复询问率下降62%,意向客户转化率提升81%,首单转化率提升64%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

STM32CubeMX配置FSMC驱动外部SRAM全流程详解

FSMC(灵活静态存储控制器)是STM32实现高速并行外部存储扩展的核心外设,其本质是将片外SRAM地址空间映射为CPU可直接读写的内存区域。原理上依赖于精确的时序寄存器配置(如BTRx)、GPIO复用功能启用及AHB3总线时钟同步机制,技术价值在于免DMA搬运的零拷贝访问能力与确定性低延迟。典型应用场景包括工业HMI缓存、医疗设备实时数据采集、嵌入式图形加速等对带宽和确定性要求严苛的系统。本文围绕STM32F407ZG平台,结合STM32CubeMX工程化配置、硬件信号完整性设计与HAL库底层映射逻辑,系

weixin_34718952的博客 232
上一篇: 一张图学完Agent智能体,无门槛上手!
下一篇: 如何通过Chatgpt+Embedding搭建私有数据FAQ
爱喝白开水a
博客等级 码龄3年 6793粉丝 763原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值