通过python 调用OpenAI api_key提交问题解答
- ✨可以通过网页版的
jupyter notebook
调用,也可以通过spyder窗口等IDE窗口.
- 如果没有API_KEY,可以使用国内网页版在线调用:
https://chat.forchange.cn/
通过python 调用OpenAI api_key接口,可以避免国内网页不能访问的问题。前提是需要自己已经注册了OpenAI
帐号,并且在帐号内申请了api_key
才行。
jupyter notebook
调用
- engine=“
text-davinci-003
”:调用的模型GPT-3
- temperature=
0.8
: 设定温度,系数越高,结果唯一性越强。
import openai
openai.api_key = "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"
def completion(prompt):
completions = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.8,
)
message = completions.choices[0].text
return message
print(completion("基于Keil生成一个8051单片机串口通讯的代码"))
需要实现的功能
1) 串口中断,当收到第一个字节的时候,接收,直到收到数据完成的标志,保存在数组中。
2) 开启接收中断,接收一个字节,当收到第一个字节的时候,接收,直到收到数据完成的标志,保存在数组中。
#### 代码实现
#include
#define FOSC 11059200L
#define BAUD 9600
#define T1MS (65536-FOSC/12/BAUD)
#define N1 0x40
#define N2 0x00
#define BUFFER_SIZE 16
sbit LED = P1^1;
sbit rs = P3^6;
sbit rw = P3^7;
sbit en = P3^5;
sbit buzzer = P2^2;
unsigned char code table[]={
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46
};
void delay(int i)
{
while(i--);
}
void write_com(unsigned char com)
{
P0 = com;
rs = 0;
rw = 0;
en = 1;
delay(5);
en = 0;
}
void write_dat(unsigned char dat)
{
P0 = dat;
rs = 1;
rw = 0;
en = 1;
delay(5);
en = 0;
}
void init()
{
write_com(0x38);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
write_com(0x0f);
}
void write_str(unsigned char y, unsigned char x, unsigned char *s)
{
unsigned char addr;
if(y == 1)
addr = 0x80 + x - 1;
else if(y == 2)
addr = 0xc0 + x - 1;
write_com(addr);
while(*s)
{
write_dat(*s);
s++;
}
}
void write_cmd(unsigned char y, unsigned char x)
{
unsigned char addr;
if(y == 1)
addr = 0x80 + x - 1;
else if(y == 2)
addr = 0xc0 + x - 1;
write_com(addr);
}
void lcd_pulse()
{
en=1;
delay(5);
en=0;
}
void write_com1(unsigned char command)
{
rs=0;
rw=0;
P0=command;
lcd_pulse();
}
void write_dat1(unsigned char dat)
{
rs=1;
rw=0;
P0=dat;
lcd_pulse();
}
void lcd_init()
{
write_com1(0x38);
write_com1(0x06);
write_com1(0x0c);
write_com1(0x01);
write_com1(0x80);
}
void write_char(unsigned char c)
{
write_dat1(c);
}
void write_string(unsigned char *s)
{
while(*s)
{
write_char(*s);
s++;
}
}
void timer0_init(void)
{
TMOD = 0x01;
TH0=T1MS;TL0=T1MS;
ET0=1;
EA=1;
TR0=1;
}
unsigned char hours;
unsigned char minutes;
unsigned char seconds;
unsigned char t;
unsigned char time_update;
unsigned char count;
unsigned char data[BUFFER_SIZE];
unsigned char *p;
void timer0_interrupt() interrupt 1
{
TH0=T1MS;TL0=T1MS;
write_cmd(1,1);
write_char(table[hours/10]);
write_char(table[hours%10]);
write_char(':');
write_char(table[minutes/10]);
write_char(table[minutes%10]);
write_char(':');
write_char(table[seconds/10]);
write_char(table[seconds%10]);
seconds++;
time_update=1;
}
void timer1_init()
{
TH1=N1;TL1=N2;
ET1=1;
EA=1;
TR1=1;
}
void timer1_interrupt() interrupt 3
{
TH1=N1;TL1=N2;
if(seconds==60)
{
seconds=0;
minutes++;
}
if(minutes==60)
{
minutes=0;
hours++;
}
if(hours==24)
hours=0;
}
void init_serial()
{
TMOD=0x20;
SCON=0x50;
TL1=N1;TH1=N2;
ES=1;
EA=1;
TR1=1;
count=0;
p=data;
}
void serial_interrupt(void) interrupt 4
{
if(TI==1)
{
TI=0;
count=0;
p=data;
}
else
{
SBUF=0x41+count;
count++;
if(count==BUFFER_SIZE)
{
count=0;
p=data;
}
else
p++;
RI=0;
}
}
void main()
{
write_cmd(1,1);
write_str(2,1," TEMPERATURE ");
timer1_init();
timer0_init();
lcd_init();
init_serial();
while(1)
{
if(count==BUFFER_SIZE)
{
write_cmd(1,1);
write_str(2,1," TEMPERATURE ");
write_str(1,9,p);
write_str(2,9,p+8);
}
}
}
spyder窗口调用
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import openai
openai.api_key = "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"
def completion(prompt):
completions = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.8,
)
message = completions.choices[0].text
return message
print(completion("stm32f103vct6串口1初始化代码"))
- openai调用,提问
stm32f103vct6串口1初始化代码
返回数据:
波特率为115200
void uart1_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_USART1, DISABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
}
void USART1_IRQHandler(void)
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
#if EN_USART1_RX
Res =USART_ReceiveData(USART1);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000)
{
if(Res!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x8000;
}
else
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
}
}
}
if(USART_RX_STA&0x8000)
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=0;
memcpy(USART_TX_BUF,USART_RX_BUF,USART_REC_LEN);
USART_RX_STA=0;
}
#endif
}
else if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
{
#if EN_USART1_TX
USART1->DR = Tx1Buffer[Tx1Counter++];
if(Tx1Counter == Tx1Count){
USART1->CR1 &= ~USART_CR1_TXEIE;
}
#endif
}
print(completion("stm32f103vct6串口1初始化代码"))
,总线资源申请好后,调用这个函数初始化
return 0;
}
static void __exit uart_exit(void)
{
unregister_chrdev(dev_no,DEV_NAME);
cdev_del(&uart_cdev);
device_destroy(uart_class,MKDEV(dev_no,0));
class_destroy(uart_class);
iounmap(va);
release_region(0x40011000,0x400);
}
module_init(uart_init);
module_exit(uart_exit);
MODULE_LICENSE("GPL");
以上不管那种方式调用,都需要提前安装好openai
模块
openai模块安装
- openai模块安装命令:
pip install openai
jupyter notebook安装
- 安装指令:
pip install jupyter
- 安装完成后,启动命令:
jupyter notebook
spyder安装
- spyder安装命令:
pip install spyder
- 安装完成后,启动命令:
spyder