ChatGPT 桌面版 gpt-3.5-turbo 模型中的参数问题

By hi_aardio at 23 天前 • 0人收藏 • 350人看过

Jacen He 有个关于“编写 ChatGPT 桌面版,改进支持上下文对话”的公众号代码分享,如下:

import win.ui;
/*DSG{{*/
var winform = win.form(text="ChatGPT 桌面智能助理";right=661;bottom=721)
/*}}*/

import web.view;
var wb = web.view(winform);

import web.rest.jsonClient;
var http = web.rest.jsonClient(); 

//参数请改成您的 API key(或者获取 API key 的网址也可以)。
http.setAuthToken("API key");
var ai = http.api("https://api.openai.com/v1/");
    
var conversation = {};
var chatGptName = "桌面智能助理";
var chatGptInfo = "是一个快乐的程序员,精通多种编程语言";

wb.external = {
    ask = function(q){
        table.push(conversation,"用户:"+q);
        
        var prompt;
        do{
            prompt =  "提示:你叫"
            + chatGptName + ","
            + chatGptInfo + "。<|endoftext|>"  
            + "当前时间:" + tostring(time()) + "。<|endoftext|>"  
            + string.join(conversation,"<|endoftext|>") 
            + "<|endoftext|>"
            + chatGptName + ":";
            
            if(#prompt < 2000) break; 
            
            table.shift(conversation);
        }while(true);   
        
        var ret,err = ai.completions({
            "prompt": prompt,//发送提示
            "model": "text-davinci-003",//GPT 3.5 模型
            "temperature": 0.8,//热度,0~1 之间。
            "max_tokens": 2048,//最大允许的字符数量 
            "stop": {"<|endoftext|>"}  
        })
        
        if(ret){
            var a = ret.choices[1].text; 
            table.push(conversation,chatGptName+":"+a);
            return a;
        }
        else {
            if(err[1]=='{'#){
                var errObject = web.json.tryParse(err)[["error"]];
                if(errObject[["code"]]="invalid_api_key"){
                    return "您的 API key 已经失效了!"; 
                } 
                
                if(errObject[["message"]]) return errObject[["message"]];
            }
            
            return err;
        }
    };  
} 

wb.html = /**
<!DOCTYPE html><html>
<head>
    <meta charset="utf-8" />
    <title>ChatGPT 桌面智能助理</title> 
    <script src="https://lib.baomitu.com/react/18.2.0/umd/react.production.min.js"></script>
    <script src="https://lib.baomitu.com/react-dom/18.2.0/umd/react-dom.production.min.js"></script> 
    <script src="https://lib.baomitu.com/chatui-core/2.4.2/index.min.js"></script> 
    <link rel="stylesheet" href="https://lib.baomitu.com/chatui-core/2.4.2/index.min.css"> 
    <script src="https://lib.baomitu.com/babel-standalone/7.20.14/babel.min.js"></script> 
    <style type="text/css">html,body,#app{height:100%}</style>
</head>
<body>  

<script type="text/babel"> 
    const { useState,useEffect,useCallback,useRef } =  React;  
    const { default: Chat, Bubble, useMessages } = ChatUI;  
    
    const App = () => {
        const { messages, appendMsg, setTyping } = useMessages([{
            type: 'text',
            content: { text: '主人好,我是桌面智能助理,您的贴心小助手~' },
            user: { avatar: 'https://gw.alicdn.com/tfs/TB1DYHLwMHqK1RjSZFEXXcGMXXa-56-62.svg' },
        }]);
    
        function handleSend(type, val) {
            if (type === 'text' && val.trim()) {
                appendMsg({
                    type: 'text',
                    content: { text: val },
                    position: 'right',
                });
        
                setTyping(true);
                
                aardio.ask(val).then( text=>{
                    appendMsg({
                        type: 'text',
                        content: { text: text },
                    }); 
                }) 
            }
        }
    
        function renderMessageContent(msg) {
            const { content } = msg;
            return <Bubble content={content.text} />;
        }
    
        return (
            <Chat
                navbar={{ title: '' }}
                messages={messages}
                renderMessageContent={renderMessageContent}
                onSend={handleSend}
            />
        );
    };
    
    const root = ReactDOM.createRoot(document.getElementById('app'));
    root.render(<App />);
    
</script>
<div id="app"></div>
**/

winform.show();
win.loopMessage();

这里用的模型是

text-davinci-003

而最新open ai出的更便宜好用的3.5模型是gpt-3.5-turbo and gpt-3.5-turbo-0301

新模型对应的介绍如下:

API Reference - OpenAI API

与原来模型相比,主要是post时参数上有所变化。(原来都是json方式,一对一,这次的新模型多了【】,需要提供多个参数值)

新模型参数:

{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "Hello!"}]
}

这里涉及到messages后面参数 


[{"role": "user", "content": "Hello!"}]

想请教各位,在aardio中,如何来写这一部分内容?

谢谢

7 个回复 | 最后更新于 22 天前
23 天前   #1

新模型 API介绍 

https://platform.openai.com/docs/api-reference/chat/create

老模型API介绍

https://platform.openai.com/docs/api-reference/models/list
23 天前   #2

回复#1 @hi_aardio :

最终post出去的都是json格式的string,[...]在aardio里其实对应的就是数组{...}

23 天前   #3

回复#2 @jerryxjr1220 :

在修改完对应post的url后,

message这部分,我尝试直接加入示例,对话一直处于无反馈状态,也没有报什么错

"messages":{{"role": "user", "content": "hello"}},

当message以字符串内容加入时会报不是array的错

23 天前   #4

我从console里获取到了返回的内容,因为返回内容的json也有变化,所以窗口界面才没有显示返回内容

23 天前   #5

主要改2个地方

prompt =  {{"role": "user", "content":"提示:你叫"
            + chatGptName + ","
            + chatGptInfo + "。<|endoftext|>"  
            + "当前时间:" + tostring(time()) + "。<|endoftext|>"  
            + string.join(conversation,"<|endoftext|>") 
            + "<|endoftext|>"
            + chatGptName + ":"}};

还有就是返回的内容

var a = ret.choices[1].message.content;

这样就可以正常使用了

23 天前   #6

回复#5 @hi_aardio :

import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
mainForm = win.form(text="chatsonic";right=1152;bottom=594;bgcolor=16777215;border="none")
mainForm.add(
plsAsk={cls="plus";left=34;top=508;right=1046;bottom=578;align="left";bgcolor=16777215;border={color=-16777216;width=1};color=16711680;db=1;dl=1;dr=1;editable=1;font=LOGFONT(h=-16;name='微软雅黑');link=1;multiline=1;wrap=1;z=2};
plsLang={cls="plus";text="中文";left=861;top=9;right=1041;bottom=35;color=16711680;dr=1;dt=1;font=LOGFONT(h=-20;name='FontAwesome');iconStyle={align="left";font=LOGFONT(h=-20;name='FontAwesome');padding={left=40}};iconText='\uF096  ';z=5};
plsLog={cls="plus";left=34;top=41;right=1121;bottom=496;align="left";bgcolor=16777215;border={color=-16777216;width=1};color=8388608;db=1;dl=1;dr=1;dt=1;editable=1;font=LOGFONT(h=-16;name='微软雅黑');link=1;multiline=1;wrap=1;z=1};
plsSend={cls="plus";text="Send";left=1059;top=508;right=1121;bottom=578;bgcolor=15793151;color=8388608;db=1;dr=1;font=LOGFONT(h=-16;name='微软雅黑';weight=700);notify=1;z=3};
plus={cls="plus";text="ChatSonic智能助手";left=32;top=10;right=275;bottom=38;align="right";color=8388608;dl=1;dt=1;font=LOGFONT(h=-20;name='FontAwesome';weight=700);iconColor=32768;iconStyle={align="left";font=LOGFONT(h=-29;name='FontAwesome');padding={left=10}};iconText='\uF1D7';z=4}
)
/*}}*/

import inet.http;
import web.json;
import time;

import win.ui.simpleWindow;
win.ui.simpleWindow(mainForm);

var;
var head = {
    "accept": "application/json",
    "content-type": "application/json",
    "X-API-KEY": "替换你自己的token key"
}
var url = "https://api.writesonic.com/v2/business/content/chatsonic?engine=premium&language="

var history = {{"is_sent": true, "message": ""}, }

mainForm.plsLang.skin({
color = {
hover = 0xF0FF0000; 
};
checked = {
     iconText = '\uF046';
    } 
})

mainForm.plsSend.skin(
background = { 
hover = 0xFFFF771C; 
}
)
mainForm.plsSend.oncommand = function(id,event){
mainForm.plsSend.disabled = true;
if mainForm.plsLang.checked {
lang = "zh";
} else {
lang = "en";
}
var payload = {
     "enable_google_results": true,
     "enable_memory": true,
     "input_text": mainForm.plsAsk.text,
     "history_data": history,
}
var http = inet.http();
http.addHeaders = head;
var respstr = http.post(url+lang, web.json.stringify(payload, true));
if respstr {
var resp = web.json.parse(respstr, true);
tm = time.now()
tm.format="%Y年%m月%d日 %H时%M分%S秒";
string.save("/res/dialog.txt", tostring(tm)+'\r\n', true);
string.save("/res/dialog.txt", "You >>> "+mainForm.plsAsk.text+'\r\n', true);
string.save("/res/dialog.txt", "GPT >>> "+resp.message+'\r\n', true);
table.push(history, 
{
"is_sent": true, 
"message": mainForm.plsAsk.text
},
{
"is_sent": false, 
"message": resp.message
},
)
mainForm.plsLog.editBox.print("You >>> "+mainForm.plsAsk.text);
mainForm.plsLog.editBox.print("GPT >>> "+resp.message);
mainForm.plsAsk.text = null;

}
mainForm.plsSend.disabled = false;
}

mainForm.plsLang.checked = true;

mainForm.show();
return win.loopMessage();


虽然我不是调用的openai的api,不过原理是一样的。

22 天前   #7

回复#6 @jerryxjr1220 :

早。。

多谢

不过早上看官方的api 被X了

登录后方可回帖

登 录
信息栏
 非官方,私人站

      公 告:

  域名更换为

    Aardio

   .Com .Cn

  请相互转告!



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方     |     Aardio官方更新日志
Sciter在线学习文档
才仁机械
Stm32cube中文网
Loading...