Categories
日常应用

小试自定义GPT

最近不是在折腾LLM嘛,于是就试了两条路子:用openai的api,以及直接在openai的界面里面创建GPT。

前者没啥特别的,chatgpt的api做的很成熟了,from openai import OpenAI 之后直接在python里面调用几个现成的函数就好了。可选的参数其实也不多,主要就是prompt写的好一点就行。我的要求也不高,试了试基本满足。此外我还用到了微软 azure api,也很方便,两者一结合基本一个app就搓出来了,只是暂时还只能在命令行运行,没写前端ui罢了。

后者就麻烦了。我想着自己写前端ui还挺麻烦的,就想偷个懒直接在GPT里面弄弄看看行不。结果呢,现在这个版本实在是太挫了,只支持最最基本的action,虽然可以调用其他api,但还没研究出来怎么实现用户上传的文件扔到action api call里面。搜了搜他们的论坛也没啥结果,然后心累就到此为止了。

最后贴一下如何在openai 的GPT里面调用azure api。主要是api key那里实在是反用户直觉,我找了好久……一定要选 custom 然后把自定义的名字设为 Ocp-Apim-Subscription-Key 才可以。贴个图。

自定义 action -> authentication -> custom header name

当然azure api的文档做的也很差就是了,经常搜出来的是过时的文档,试一试都是404错误。哎,时间都花在这些琐碎的调试bug上了。

最后的结论是,在现在这个阶段,openai GPT的多模态做的还是太封闭,只适用于比较基础的交互需求,得等到后面允许自定义编程更丰富一些才可以。想做的稍稍复杂一点,写ui是逃不掉的了。web版还可以写个python+js凑和一下(flask这么轻量级的web开发框架真的是效率提升利器),app版xcode看了半天发现也是一等一的复杂……说好的ai改变程序开发呢?叹口气……

Categories
读书有感

R vs Python: data frame和高速数据整理

由于种种的原因,我的feedly里面很多东西很久没看了...今儿抽时间看来一下,貌似是十一月份的热点是dplyr, data.table或者说,data.frame高速操作的各种办法。

http://www.r-bloggers.com/dplyr-and-a-very-basic-benchmark/

这里有有个蛮有意思的比较,抄过来:

base dplyr-df dplyr-dt dplyr-dt-k dt dt-k
Filter筛选 2 1 1 1 1 1
Sort排序 30-60 20-30 1.5-3 [1] 1.5-3 [1]
New column加列 1 1 (6) 4 (6) 4 (4) 1 (4) 1
Aggregation加总 8-100 4-30 4-6 1.5 1.5-5 1
Join合并 >100 4-15 4-6 1.5-2.5 - 1

从base的最基本函数,到dplyr+data.frame, 到dplyr+data.table,到dplyr+data.table+key,挺神奇的...我一直比较依赖的数据整理的包有两个:plyr和data.table,现在终于看到一丝更加有效率的曙光了。顺便作者还和pandas比了一下...这是为了杜绝我多用python的决心么?我一直试图努力的多用一点python,看来越来越不可能了...

pandas data.table
Aggregate 1.5 1
Aggregate (keys/pre-sorted) 0.4 0.2
Join 5.9 -
Join (keys/pre-sorted) 2.1 0.5
Creating keys (sort) 3.7 0.7

话说,谁来进一步搞一下稀疏矩阵啊?我现在对这货比较依赖...

Categories
日常应用

从R到python散记(结束更新)

算是留条后路吧...anyway学门新语言总比学门新的课程简单一些。

1. 循环
Python 君貌似不是很喜欢操纵下标(不是C),循环比较直接:

for i in forset:

而不是for index in range(len(forset)): i=forset(index)

While和R的用法基本一直。也可以直接break跳出。

Categories
读书有感

读大学读什么?

最近一直在想这个问题:花费了那么多时间读书,究竟读了一些什么?

知识这东西,但凡肯花时间,大部分都是能学会的。应付考试什么的就更不是特别难的事情了。

可是成绩单上满满的,都是知识、知识。让人看起来都觉得疲倦。

除了知识,上学的时候还学会了什么?更多是培养性情?养成一颗好奇心,养成探索事物的兴趣,广泛的接纳各个领域的思维冲击。说起来工作了之后,太多东西都是可以现用现学的,没有什么那么困难的。

前段时间在看美国LAC(Liberal Arts College)的教育模式,培养精英的气质。因为有幸接触过一些top LAC出来的精英,确实气质上稍胜一筹。

A "liberal arts" institution can be defined as a "college or university curriculum aimed at imparting broad general knowledge and developing general intellectual capacities, in contrast to a professional, vocational, or technical curriculum."

越往后走,这种积淀的力量越能超越知识课程什么的,支撑着前行。而我的大学,确实缺少这样的时间。被无辜的填了太多鸭,被GPA逼得去竞争分数,缺少了太多太多思考的广度和深度。而那些知识,考过了试,又有多少受用至今?了了。

说回语言。学西班牙语的时候,很多人说,拉丁语系学两门以上,其他的就都很容易了。现在深以为然——计算机语言也是如此。R和Matlab用的熟了,加上C和PHP的一些基础,现在去看Python真的没什么难度。估计去学Java也不会花太多功夫。

我曾经试图说服无数周围的人,数学也是一门语言(统计学不是,它是一种思维方式,可以用多种语言表述),学了那么多公式什么的表达的其实是人们对于逻辑推理的极致追求。看似复杂高深的课程,其实大都还是可以,读书百变、其意自现的。

想到这里就说到这里。是的,我是在有些可惜那些匆匆错过的时光。

Categories
读书有感

python小试

今天非常无聊的决定去试一下python。找了一个题,大意如下:

  • 给定一个输入字符串,找出最漂亮的无重复子字符串。
  • 子字符串:从原字符串中减掉某些字符可得到的。
  • 无重复字符串:没有重复的字符
  • 甲比乙漂亮:甲的长度>乙,或者甲的字典排序在乙之后。

因为都是无重复的,所以肯定不需要甲的长度大于乙,故而是所有长度一样的无重复子字符串中,找出字典排序最大的。

这个先用R写的,为的是写出一个有效的算法来。基本的思路就是强行的逐层递归。

x = 'nlhthgrfdnnlprjtecpdrthigjoqdejsfkasoctjijaoebqlrgaiakfsbljmpibkidjsrtkgrdnqsknbarpabgokbsrfhmeklrle'

x_split = strsplit(x,split="")[[1]]
unique_x = unique(x_split) 
unique_x_order = sort(unique_x,decreasing=T) 
x_remain = character() 

# find the largest character than can be remained

#initialize
current_string = x_split
current_unique = unique_x
current_order = unique_x_order
while ( length(x_remain) < 20) 
{ 
  for(i in 1:length(current_order))
  { character = current_order[i]
    index = which(current_string == character)
    sub_string = current_string[min(index):length(current_string)]  
    if (length(setdiff(unique(current_string),unique(sub_string)))==0) #no lose of characters
    {x_remain = c(x_remain,character);
     current_string = current_string[-c(1:min(index),index)];
     current_unique = unique(current_string);
     current_order = sort(current_unique,decreasing=T);
     break;
    }
  }
}

#answer is 'tsocrpkijgdqnbafhmle'

后面用python重写了一遍。基本就是等价函数的替换...我是不是在暴殄天物的利用python?完全不理解program on the fly的感觉...

x = 'nlhthgrfdnnlprjtecpdrthigjoqdejsfkasoctjijaoebqlrgaiakfsbljmpibkidjsrtkgrdnqsknbarpabgokbsrfhmeklrle';
x_split = list(x);
unique_x = list(set(x_split));
unique_x.sort(reverse=True)
x_remain = list();
###initialize
current_string = x_split;current_unique = unique_x;current_order = unique_x;
while len(x_remain) < len(unique_x):
	for character in current_order:
		index = current_string.index(character);
		sub_string = current_string[index:len(current_string)];
		#print(character);
		if (len(set(current_string)-set(sub_string))==0): #no lose of characters
			x_remain.append(character);
			for i in range(sub_string.count(character)):
				sub_string.remove(character);
			current_string= sub_string;
			current_unique = list(set(current_string));
			current_unique.sort(reverse=True);
			current_order = current_unique;
			break;
print(x_remain);

最后好不容易写完python之后,发现网断了...没法在线提交了。等重新连上,时间已经过了,sigh。就当周末无聊历练一下了。