DeepCodeGeniusWeb-vscode/prompt_test.py

174 lines
10 KiB
Python
Raw Normal View History

import os
import subprocess
# set the OpenAI API key
os.environ['OPENAI_API_KEY'] = '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'
def call_gpt(input: str, prompt: str) -> str:
"""
This function calls GPT through the devchat chat command.
It takes a string as input and returns a string as output.
Args:
input (str): The input string to send to GPT.
prompt (str): The prompt string to send to GPT.
Returns:
str: The output string from GPT.
"""
new_prompt = input + prompt
# call devchat chat {new_prompt}
# devchat is a command line tool that calls GPT through the OpenAI API
print('==> call devchat chat')
result = subprocess.run(['/Users/admin/work/devchat-vscode/tools/devchat/bin/devchat', 'prompt', new_prompt], capture_output=True, text=True)
if result.returncode != 0:
print(result.stderr)
raise Exception(f"Error in calling GPT: {result.stderr}")
print("GPT output:")
print(result.stdout)
return result.stdout
def process_requirements(requirements: list) -> list:
"""
This function processes a list of requirements. For each requirement, it generates a function implementation
using GPT, generates a prompt text from the function implementation using GPT, and calculates the similarity
between the requirement and the prompt text using GPT. The results are returned as a list of similarity scores.
Args:
requirements (list): The list of requirements to process.
Returns:
list: The list of similarity scores.
"""
similarity_results = []
for requirement in requirements:
try:
# Step 1: Generate function implementation
function_implementation = call_gpt(requirement, "\n只生成满足需求的函数实现,不能生成除源码外的其他文本信息生成的代码中不能包含注释语句。程序可以由多个函数组成入口目标函数名称为MyFunction,")
# Step 2: Generate prompt text
prompt_text = call_gpt(function_implementation, "\n生成当前代码中MyFunction函数的意图描述只生成意图描述文本")
# Step 3: Calculate similarity
similarity = call_gpt(f"Calculate similarity between ```{requirement}``` and ```{prompt_text}```", "\n这两个文本是对两个函数功能的描述,这两个函数相似度有多高?")
similarity_results.append(similarity)
except Exception as e:
print(f"Error in processing requirement: {e}")
similarity_results.append("Error in processing requirement")
return similarity_results
def process_requirements2(requirements: list) -> list:
"""
This function processes a list of requirements. For each requirement, it generates a function implementation
using GPT, generates a prompt text from the function implementation using GPT, and calculates the similarity
between the requirement and the prompt text using GPT. The results are returned as a list of similarity scores.
Args:
requirements (list): The list of requirements to process.
Returns:
list: The list of similarity scores.
"""
similarity_results = []
for requirement in requirements:
try:
# Step 1: Generate function implementation
function_implementation = call_gpt(requirement, "\n只生成满足需求的函数实现,不能生成除源码外的其他文本信息生成的代码中不能包含注释语句。程序可以由多个函数组成入口目标函数名称为MyFunction,")
# step 1.5: get MyFunction in source code
function_implementation2 = call_gpt(function_implementation, "\n从当前代码中提取出MyFunction函数的源码不包含其他函数源码实现。")
# Step 2: Generate prompt text
prompt_text = call_gpt(function_implementation2, "\n生成当前代码中MyFunction函数的意图描述只生成意图描述文本")
# Step 3: Calculate similarity
similarity = call_gpt(f"Calculate similarity between ```{requirement}``` and ```{prompt_text}```", "\n这两个文本是对两个函数功能的描述,这两个函数相似度有多高?")
similarity_results.append(similarity)
except Exception as e:
print(f"Error in processing requirement: {e}")
similarity_results.append("Error in processing requirement")
return similarity_results
def process_requirements3(requirements: list) -> list:
"""
This function processes a list of requirements. For each requirement, it generates a function implementation
using GPT, generates a prompt text from the function implementation using GPT, and calculates the similarity
between the requirement and the prompt text using GPT. The results are returned as a list of similarity scores.
Args:
requirements (list): The list of requirements to process.
Returns:
list: The list of similarity scores.
"""
similarity_results = []
for requirement in requirements:
try:
# Step 1: Generate function implementation
function_implementation = call_gpt(requirement, "\n只生成满足需求的函数实现,不能生成除源码外的其他文本信息生成的代码中不能包含注释语句。程序可以由多个函数组成入口目标函数名称为MyFunction。")
# step 1.5: get MyFunction in source code
function_implementation2 = call_gpt(function_implementation, "\n在当前代码中保留MyFunction函数的源码其他函数中删除源码将源码转化为函数意图注释。")
# Step 2: Generate prompt text
prompt_text = call_gpt(function_implementation2, "\n生成当前代码中MyFunction函数的意图描述只生成意图描述文本")
# Step 3: Calculate similarity
similarity = call_gpt(f"Calculate similarity between ```{requirement}``` and ```{prompt_text}```", "\n这两个文本是对两个函数功能的描述,这两个函数相似度有多高?")
similarity_results.append(similarity)
except Exception as e:
print(f"Error in processing requirement: {e}")
similarity_results.append("Error in processing requirement")
return similarity_results
def main():
"""
The main function of the script. It reads a list of requirements from the user, processes the requirements,
and prints the similarity scores.
"""
# TODO: Replace this with the actual way to get the list of requirements.
requirements = [
# "对一个数字数组进行从大到小排序计算出排序前20%元素的平均值。",
# "实现一个五子棋游戏棋盘数组是否有赢家的判断函数。",
# "输入两个字符串,计算两个字符串的最长公共子序列。",
# "对一个图像二维数组进行3*3大高斯滤波计算出滤波后图像的平均值。",
# "对一个Python源码文件统计注释行数。",
# "实现俄罗斯方块游戏的下落算法函数,可以有子函数。",
# "将图像转化为字符表示的图像,可以有子函数。",
# "实现一个二维地图障碍物生成算法障碍物不能超过地图的30%,并且障碍物不能重叠,也不能处于地图范围之外。",
# "实现一个加密算法对每个字符进行加密加密算法为将字符转化为ASCII码然后加上一个密钥字符再转化为字符。密钥字符串为'abc123',密钥字符串的长度为6如果字符加上密钥字符后超过了ASCII码的最大值那么从头开始循环使用密钥字符。",
# "实现一个转化程序将JSON格式字符串转化为HTML树形表结构代码。",
# "不依赖现有库实现MD5加密算法。",
# "实现飞行控制程序,根据当前的姿态,输出四轴旋翼的转动速度,使得四轴旋翼的姿态与目标姿态一致。",
# "实现一个3元一次方程组的求解程序输入为3个方程输出为3个未知数的解。",
# "实现一个控制程序循环从串口接收命令当接收到启动命令时调用汽车启动函数cm.start),实现汽车自启动。",
# "实现一个过滤程序输入是pytest测试的输出文本输出是过滤掉不是核心重要信息后的文本保留测试结果关键错误描述信息。",
# "实现扫雷游戏下一步操作分析算法。输入是当前扫雷游戏的棋盘二维数组状态,输出是下一步应该点击查看的位置坐标。分析算法需要根据已知地图信息找出最不可能有地雷的坐标。",
# "实现坦克大战游戏的绘制函数,输入是地图二维数组,包含了障碍物信息,坦克位置信息,输出是绘制好的游戏地图。坦克和障碍物都应该是独立的类对象,坦克类对象应该有移动函数,开火函数,坦克类对象应该有绘制函数,可以绘制坦克的位置,方向,血量等信息。",
"实现一个智能家居系统接收用户的文字输入将其通过GF函数转化为智能家居操作命令并通过该命令驱动完成知能家居的操作。代码中演示了包含'打开灯'命令,参数为'灯的亮度'的GF函数的实现。",
]
similarity_results = process_requirements(requirements)
similarity_results2 = process_requirements2(requirements)
similarity_results3 = process_requirements3(requirements)
for requirement, similarity, similarity2, similarity3 in zip(requirements, similarity_results, similarity_results2, similarity_results3):
print(f"Requirement: {requirement}")
print(f"Similarity1: {similarity}")
print(f"Similarity2: {similarity2}")
print(f"Similarity3: {similarity3}")
print()
if __name__ == "__main__":
main()