文心一言深度试用

文心一言是国产里现阶段比较热门的国产ai产品,今天多次使用,测试其基本的写作功能、作图功能、代码解读能力。

写作测试

我想让文心一言帮忙写一篇年度总结。

从文心一言输出的内容来看,其年终总结内容肯定是比较空白。现在我在这篇年终总结的基础上继续丰富内容。

显然,文心一言的输出没法理解我的意图

作图测试

先写一个简单的画图需求,看看文心一言能生成一个什么样的图。

对文心一言刚才输出的图提出更多的要求,看看它是否按照要求的方向改变输出的图。

这输出跟我的要求有点不一致。重新全局提问试试看。

还是很难按照我的要求输出正常的图片。

代码解读

我找了一段代码,看看文心一言能不能解释一下这段代码的含义,并把它优化一下。

from scipy.optimize import linprog
c =[-1,4]#目标函数,min取其最小值
a=[[-3,1],[1,2]]#约束函数左边系数
b=[6,4]#约束函数右边参数,约束函数统一整理成小于等于
x0=(None,None)
x1=(-3,None)
res=linprog(c,A_ub=a,b_ub=b,bounds=(x0,x1),options={"disp":True})

这段简单的代码还是能详细解释的。找一段稍复杂的代码试试看。

import numpy as np
import matplotlib.pyplot as plt
class PSO(object):
    def __init__(self, population_size, max_steps):
        self.w = 0.6  # 惯性权重
        self.c1 = self.c2 = 2
        self.population_size = population_size  # 粒子群数量
        self.dim = 2  # 搜索空间的维度
        self.max_steps = max_steps  # 迭代次数
        self.x_bound = [-10, 10]  # 解空间范围
        self.x = np.random.uniform(self.x_bound[0], self.x_bound[1],
                                   (self.population_size, self.dim))  # 初始化粒子群位置
        self.v = np.random.rand(self.population_size, self.dim)  # 初始化粒子群速度
        fitness = self.calculate_fitness(self.x)
        self.p = self.x  # 个体的最佳位置
        self.pg = self.x[np.argmin(fitness)]  # 全局最佳位置
        self.individual_best_fitness = fitness  # 个体的最优适应度
        self.global_best_fitness = np.min(fitness)  # 全局最佳适应度
 
    def calculate_fitness(self, x):
        return np.sum(np.square(x), axis=1)
 
    def evolve(self):
        fig = plt.figure()
        for step in range(self.max_steps):
            r1 = np.random.rand(self.population_size, self.dim)
            r2 = np.random.rand(self.population_size, self.dim)
            # 更新速度和权重
            self.v = self.w*self.v+self.c1*r1*(self.p-self.x)+self.c2*r2*(self.pg-self.x)
            self.x = self.v + self.x
            plt.clf()
            plt.scatter(self.x[:, 0], self.x[:, 1], s=30, color='k')
            plt.xlim(self.x_bound[0], self.x_bound[1])
            plt.ylim(self.x_bound[0], self.x_bound[1])
            plt.pause(0.01)
            fitness = self.calculate_fitness(self.x)
            # 需要更新的个体
            update_id = np.greater(self.individual_best_fitness, fitness)
            self.p[update_id] = self.x[update_id]
            self.individual_best_fitness[update_id] = fitness[update_id]
            # 新一代出现了更小的fitness,所以更新全局最优fitness和位置
            if np.min(fitness) < self.global_best_fitness:
                self.pg = self.x[np.argmin(fitness)]
                self.global_best_fitness = np.min(fitness)
            print('best fitness: %.5f, mean fitness: %.5f' % (self.global_best_fitness, np.mean(fitness)))
pso = PSO(100, 100)
pso.evolve()
plt.show()

文心一言暂时无法输出粒子算法的含义。只是仿写了一堆循环代码。

整体来看,文心一言离bing,chatgpt都有一定的差距,还有很长的路要走,期待文心一言下次更新升级。

请使用浏览器的分享功能分享到微信等