简朴记载工具的一个模块
后端
Api调用
登录 腾讯元器 后创建智能体,按自己的需求来创建,发布后要等等审核。
等发布完成后点击调用api即可,这里可以看到user_id, assistant_id,token参数
使用github.com/chenmingyong0423/go-yuanqi这个封装好了的库来调用api,根据demo的使用(这里以非流式 API 交互为例子),要注意更改一处,原先的chat.Chat()改为chat.Session()(作者的demo中没有及时更新使用),如下:- package main
- import (
- "context"
- "fmt"
- "github.com/chenmingyong0423/go-yuanqi"
- "log"
- "time"
- )
- /**
- * @Author Lockly
- * @Description
- * @Date 2024/7/1
- **/
- func main() {
- chat := yuanqi.NewChat("assistant_id", "user_id", "token", yuanqi.WithAssistantVersion(""), yuanqi.WithTimeOut(10*time.Second))
- // 上面的参数依次填入
- session := chat.Session().WithStream(false).WithChatType("published")
- textContent := yuanqi.NewContentBuilder().Text("hi").Build()
- // 图片消息要启用插件故没有使用
- message := yuanqi.NewMessageBuilder().
- Role("user").
- Content(textContent).Build()
- resp, err := session.AddMessages(message).Request(context.Background())
- if err != nil {
- log.Fatal(err)
- }
- // 如果只想要获得ai的回答
- fmt.Println(resp.Choices[0].Message.Content)
- }
复制代码 简朴封装一下即可,传入题目获取复兴,上面的三个参数从配置中获取。简朴说一下在wails的app.go(其他注册了的一样)中界说方法,下令行wails dev启动之后会自动参加wailsjs供前端调用:
简朴界说一下:- func (a *App) ChatWithAI(content string, config *share.Config) string {
- resp, err := service.Chat(content, a.config)
- if err != nil {
- log.Logger.Error("ERR 获取AI回复失败")
- return err.Error()
- }
- return resp
- }
复制代码 前端
界面
前端要调用先引入import {ChatWithAI} from "../../../wailsjs/go/cli/App";,然后显示用的naive ui的组件, 针对于配置,可以增加一个页面(模态框,抽屉都可以的)举行修改,其他有须要的可以看着添加。
聊天的显示用的是n-log组件,用于显示日记的,将题目和复兴push进去,关键是支持高亮,- <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />
复制代码 这里界说const msg: string[] = []; const chatData = ref(showMsg('', false))此中showMsg函数只要做到将content push进msg然后加上\n换行就可以简质朴现消息显示,接着处理高亮。
高亮
naive ui中不内置highlight.js,以是在使用前要引入import hljs from 'highlight.js/lib/core'并提前设定:- <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />
复制代码 hljs里面内置了一些语言,但是我尝试了他并不会生效,好比注册markdown然后再n-log中也使用markdown,当ai复兴的代码用markdown语法```来装载代码时并不会高亮,同样用相应的语言也不见效。- import markdown from 'highlight.js/lib/languages/markdown'
- hljs.registerLanguage('markdown ', markdown )
复制代码 但是官网中提供的例子是自界说的语言来实现相应的功能,好比他们的高亮全部数字:同样的可以像他这样用正则匹配到字符去设置类目来调整样式,好比对中英文,以及我这里想标记对话的符号 »:- hljs.registerLanguage('naive-log', () => ({ contains: [ <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />{ <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> className: 'number', <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> begin: /\d+/ <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />}, <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />{ <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> className: 'chinese', <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> begin: /[\u4e00-\u9fa5]/, // 中文字符范围(Unicode 编码范围) <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> relevance: 10 <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />}, <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />{ <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> className: 'english', <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> begin: /[A-Za-z]/, <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> relevance: 0 <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />}, <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />{ <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> className: 'bot', <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> begin: /[\w\s]+»\s*/, // 匹配任何单词、空格直到遇到 » 后跟空格 <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- /> relevance: 1, <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />}, ]}))
复制代码 这里的className随便界说,好区分就行,然后对其举行界说,wails中在style.css中界说:(其他新增的在下面添加即可)- .n-code,.n-layout-content,.n-layout-header,.n-layout,.terminal .t-window { <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />font-family: "Microsoft YaHei UI", system-ui;}.n-code .hljs-attr,.n-code .hljs-variable,.n-code .hljs-template-variable,.n-code .hljs-type,.n-code .hljs-selector-class,.n-code .hljs-selector-attr,.n-code .hljs-selector-pseudo,.n-code .hljs-number { <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />color: #078585; <n-log
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>language="naive-log"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>font-size="14"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:log="chatData"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>:loading="waiting"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>line-height="1.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>rows="27.5"
- <n-config-provider :hljs="hljs">
- <my-app />
- </n-config-provider>
- />font-family: "Microsoft YaHei UI", system-ui;}.n-code .hljs-log-info {color: #25c9ab;}.n-code .hljs-log-debug {color: #13778a;}.n-code .hljs-log-error {color: #931023;}.n-code .hljs-log-warn {color: #0d705e;}.n-code .hljs-chinese {color: rgba(19, 19, 19, 0.89);}.n-code .hljs-english {color: rgba(31, 32, 33, 0.89);}.n-code .hljs-bot {color: #11c5a4;}
复制代码 末了增加一个输入框和两个按钮,输入框设置属性@keydown.enter="send"回车就触发方法send,这个方法用于调用前面的ChatWithAI,由于复兴需要时间,可以在输入框和日记显示都设置:loading属性来等候加载,同时输入框在等候期间要禁用。
末了效果如下(完备代码后续会开源):

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |