看效果图
在org中嵌入php可参考我的 另一贴子 ,php&elisp之外的语言我也还不知道如何实现这种用法。
上面的key被我隐去了,请求的地址不是openai的,是国内代理,据说一些AI工具的api和openai api是兼容的,把请求地址和key改下应该也能用。
所有参数、代码都是写在一个org文件里的,上面的截图可以看到elisp的,我用了不是异步的url-insert-file-contents
, 点击提交按钮会卡住emacs,如果网络不好,要卡半天,另外连续对话也没有实现,只能作为openapi的交互式学习笔记。
内容较多,上面截图中的php代码折叠了,单独发出
$arr=org_to_arr(ob_get_clean());
if(!isset($_GET["con"]) || $_GET["con"]==""){
echo "内容为空";
}else{
#die(print_r($arr)); #!
$json=json_decode(http_post_json(
$arr[":地址:"],
"Authorization: Bearer ".$arr[":密钥:"],
array(
"model"=>$arr[":模型:"],"messages"=>array(
array("role"=>"user","content"=>$_GET["con"])
))
),true);
echo $json["choices"][0]["message"]["content"];
$json["choices"][0]["message"]["content"]="clean";
echo "\n回答以外的其它信息:". json_encode($json);
}
function http_post_json(string $url,string $header,array $data,$time=99){
$postdata = json_encode($data,JSON_UNESCAPED_UNICODE);
$option=array(
"http" => array(
"method"=>"POST",
"header"=>"Content-type:application/json\n".$header,
"content"=>$postdata,
"timeout"=>$time
));
return file_get_contents($url,0,stream_context_create($option));
}
function org_to_arr(string $str){
foreach(explode("\n",$str) as $v){
if(substr($v,0,1)=="*"){ break; }#出现*直接退出
$v=trim($v);
$n=substr($v,0,1);
if($v!=="" && $n!=="#"){
$n=explode(" ",$v,2);
if(isset($arr[$n[0]])){
#die("chong he :".$v." ".$n[0]);
}elseif(isset($n[1])){
$arr[$n[0]]=trim(explode(";;",$n[1],2)[0]);
}
}
}
return $arr;
}
不知道有没有也折腾过在org-mode里用chatGPT的坛友