0%

文字扩展是将较短的文本片段,例如一组指令或主题列表,交给大型语言模型生成更长的文本,例如基于已有的内容生成一封电子邮件或一篇关于某个主题的文章的任务。又或者你列出大纲,标题,让大模型填充对应的内容。

另外,还有一些很好的用途,例如将大型语言模型用作头脑风暴的伙伴。

但这里必须要提醒的是,ChatGPT生成的内容不一定准确,所以使用的时候要认真甄别。比如著名的stack overflow网站就曾被chatgpt的回答霸占,导致网站上充斥着不准确的回答。官方随即封禁了ChatGPT。

阅读全文 »

在本篇文章中,我们将探讨如何使用大语言模型进行文本转换任务,例如语言翻译、拼写和语法检查、语气调整和格式转换。

翻译

ChatGPT接受多种语言的训练,使得模型具备翻译能力。以下是如何使用这种能力的一些示例。

1
2
3
4
5
6
prompt = f"""
Translate the following English text to chinese: \
​```Hi, I would like to order a blender```
"""
response = get_completion(prompt)
print(response)

回答:

1
你好,我想订购一个搅拌机。
阅读全文 »

下面是调用openai的completion接口的函数。但在本文中并不是重点。了解一下就好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import openai
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

openai.api_key = os.getenv('OPENAI_API_KEY')

def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0, # this is the degree of randomness of the model's output
)
return response.choices[0].message["content"]

下面我们来说说,书写提示词的基本原则。

阅读全文 »

当我们在调试程序时,通常很难一次就把程序正常跑起来。这是普遍现象。但我们会借助一些工具和手段,有步骤有流程地去调整程序,最终让程序按照我们想要的样子正常执行。

对于提示词来说也是一样的。当我们向ChatGPT提问时,一开始它给我们的答案可能并不理想。但是当我们逐步去调整提示词,慢慢地,它的回答就会接近我们想要的答案。

所以这里最重要的是我们如何去迭代提示词?

阅读全文 »

这里使用C++语言来作为示例,但对其他语言的函数书写也有借鉴意义。

函数书写的原则

写函数的第一规则是要短小。第二条规则是还要更短小。

下面是两段功能一致的代码,分别展示了不同的实现方式:

第一段代码将所有的实现都写在了一个函数里,实现了一个简单的计算平均值的功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
include <iostream>
#include <vector>

using namespace std;

double average(vector<double> v) {
double sum = 0;
for (int i = 0; i < v.size(); i++) {
sum += v[i];
}
return sum / v.size();
}

int main() {
vector<double> v{1, 2, 3, 4, 5};
double avg = average(v);
cout << "The average is: " << avg << endl;
return 0;
}

第二段代码对第一段代码进行了抽象,将复用的代码抽取成了一个共用的函数sum,然后在average函数中调用sum函数,实现了相同的功能。这样做的好处是可以减少代码量,提高代码的可读性和可维护性。

阅读全文 »

算法实现

purepursuit的核心其实是一个曲率半径的几何计算。

(x, y)是转换到机器人坐标系上的路径点。Llookahead distancer是形成的圆弧半径。Drx之间的差值。

根据上面的图形,可以发现有下面的几何关系:

同时通过
$$
y^2 + D^2 = r^2
$$
可以推算出下面的等式关系:

阅读全文 »

优化问题描述

假设一个机器人初始起点在0处,然后机器人向前移动,通过编码器测得它向前移动了1m,到达第二个地点x1。接着,又向后返回,编码器测得它向后移动了0.8米。但是,通过闭环检测,发现它回到了原始起点。可以看出,编码器误差导致计算的位姿和观测到有差异,那机器人这几个状态中的位姿到底是怎么样的才最好的满足这些条件呢?

首先构建位姿之间的关系,即图的边:

线性方程组中变量小于方程的个数,要计算出最优的结果,使出杀手锏最小二乘法。先构建残差平方和函数:

为了使残差平方和最小,我们对上面的函数每个变量求偏导,并使得偏导数等于0.

阅读全文 »

机器人软件系统中使用的通讯框架多种多样。比如,百度Apollo使用的Cyber RT,ROS1中的TCPROS/UDPROS通信机制,ROS2中使用的DDS等等。

下面介绍一种轻量,易用的通讯框架LCM(Lightweight Communications and Marshalling)。

LCM是一套用于消息传递和数据编码的库和工具,目标是构建高带宽和低延的实时通讯系统。它提供了一个发布/订阅消息传递模型和自动编码/解码代码的生成器。

LCM为多种编程语言(C/C++,C#,Java,Lua,MATLAB,Python)的应用提供接口。

LCM具有如下特性:

  • 低延迟的进程间通信
  • 使用UDP组播的高效广播机制
  • 类型安全的消息编排
  • 用户友好的记录和回放工具
  • 没有集中的 “数据库 “或 “枢纽”–节点间直接通讯
  • 没有守护进程
  • 极少的依赖
阅读全文 »

下面的安装过程是在ubuntu20.04上进行的。

安装gnuplot需要依赖lua5.2。所以先安装lua5.2

安装lua5.2

下载安装包

1
wget http://www.tecgraf.puc-rio.br/lua/ftp/lua-5.2.0.tar.gz

编译安装lua5.2

解压后进入源码目录

1
2
make linux
sudo make install
阅读全文 »