openai的API实现代码函数检索

该代码段用于从Python代码文件中提取函数,利用OpenAI的预训练模型获取函数的向量表示,然后通过余弦相似性进行搜索。支持对大量Python代码文件进行处理,找到与查询函数内容相似的函数。同时,文章提到了opencv库在图像处理,如物体跟踪、人脸识别等方面的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 从代码库中先把所有的函数提取出来
import os
from glob import glob
import pandas as pd

def get_function_name(code):
    assert code.startswith("def ")
    return code[len("def "): code.index("(")]

def get_until_no_space(all_lines, i) -> str:
    ret = [all_lines[i]]
    for j in range(i + 1, i + 10000):
        if j < len(all_lines):
            if len(all_lines[j]) == 0 or all_lines[j][0] in [" ", "\t", ")"]:
                ret.append(all_lines[j])
            else:
                break
    return "\n".join(ret)

def get_functions(filepath):
    whole_code = open(filepath).read().replace("\r", "\n")
    all_lines = whole_code.split("\n")
    for i, l in enumerate(all_lines):
        if l.startswith("def "):
            code = get_until_no_space(all_lines, i)
            function_name = get_function_name(code)
            yield {"code": code, "function_name": function_name, "filepath": filepath}


root_dir = os.path.expanduser("~")

code_root = root_dir + "/python"

code_files = [y for x in os.walk(code_root) for y in glob(os.path.join(x[0], '*.py'))]
print("Total number of py files:", len(code_files))

if len(code_files) == 0:
    print("no code files")

all_funcs = []
for code_file in code_files:
    funcs = list(get_functions(code_file))
    for func in funcs:
        all_funcs.append(func)

print("Total number of functions extracted:", len(all_funcs))

OpenAI API中的get_embedding是用于获取给定文本的向量表示的方法。它使用OpenAI的预训练模型,将输入文本转换为一个向量,该向量可用于计算文本之间的相似性或进行其他自然语言处理任务。
get_embedding方法接受一个文本字符串作为输入,并返回一个表示该文本的向量。这个向量通常是一个具有固定维度的浮点数数组。该方法可以用于多种应用,例如文本分类、聚类、信息检索、自动摘要、机器翻译等。
需要注意的是,get_embedding方法返回的向量是基于OpenAI的预训练模型计算得出的,并且可能不适用于某些特定应用场景,因此需要根据具体应用情况选择合适的方法和模型。

from openai.embeddings_utils import get_embedding

df = pd.DataFrame(all_funcs)
df['code_embedding'] = df['code'].apply(lambda x: get_embedding(x, engine='text-embedding-ada-002'))
df['filepath'] = df['filepath'].apply(lambda x: x.replace(code_root, ""))
df.to_csv("data/code_search_python.csv", index=False)
df.head()

定义搜索函数

from openai.embeddings_utils import cosine_similarity

def search_functions(df, code_query, n=3, pprint=True, n_lines=7):
    embedding = get_embedding(code_query, engine='text-embedding-ada-002')
    df['similarities'] = df.code_embedding.apply(lambda x: cosine_similarity(x, embedding))

    res = df.sort_values('similarities', ascending=False).head(n)
    if pprint:
        for r in res.iterrows():
            print(r[1].filepath+":"+r[1].function_name + "  score=" + str(round(r[1].similarities, 3)))
            print("\n".join(r[1].code.split("\n")[:n_lines]))
            print('-'*70)
    return res
    
#调用搜索
res = search_functions(df, '想要搜索的函数内容', n=3)

深度学习模型列举
python的opencv库使用模板匹配
Python的opencv库进行物体跟踪
Python的opencv库使用行人检测
Python的使用opencv库人脸识别
Python的opencv库使用Haar 级联检测
Python的opencv库使用FAST 算法进行特征检测
Python的opencv库使用ORB算法 进行特征检测
Python的opencv库使用SURF 进行特征检测
Python的opencv库使用SIFT 进行特征检测
opencv库的功能
运动控制卡的运动控制介绍
介绍一下labview
运动控制卡
c# 如何调用Halcon 进行人脸识别
python如何使用halcon识别二维码
windows程序如何转linux开发
linux 的gdb软件如何使用
c#如何使用 USB(Universal Serial Bus)进行通信
数字化器Digitizer框架

### 设置 `OPENAI_API_KEY` 环境变量的方法 在 macOS 中,可以通过多种方式来设置 `OPENAI_API_KEY` 环境变量。以下是几种常见的方法: #### 方法一:通过终端设置临时环境变量 可以直接在当前会话中设置环境变量,这种方法仅适用于当前终端会话[^2]。一旦关闭终端窗口,该环境变量将会失效。 ```bash export OPENAI_API_KEY="your_openai_api_key_here" ``` 此命令会在当前终端会话中创建名为 `OPENAI_API_KEY` 的环境变量并赋值为您的 API 密钥。 --- #### 方法二:为当前用户添加永久性环境变量 如果希望每次打开新终端时都自动加载这个环境变量,则可以将其配置文件中定义。对于大多数 macOS 用户来说,默认使用的 shell 是 Bash 或 Zsh。下面分别介绍两种情况下的操作方法。 ##### 对于使用 **Bash Shell** 的用户: 编辑用户的 `.bash_profile` 文件或者 `.bashrc` 文件(取决于具体版本),并将以下内容追加进去[^3]: ```bash echo 'export OPENAI_API_KEY="your_openai_api_key_here"' >> ~/.bash_profile source ~/.bash_profile ``` 这将在下次启动新的 bash session 时自动应用上述设定。 ##### 如果您正在使用的是 **Zsh (默认)**: 同样地, 修改对应的 zsh 配置文件: ```bash echo 'export OPENAI_API_KEY="your_openai_api_key_here"' >> ~/.zshrc source ~/.zshrc ``` 完成之后重新开启一个新的 Terminal 实例即可生效. --- #### 方法三:利用 `.env` 文件配合 Python 工具库 另一种推荐的方式是借助 `.env` 文件以及第三方工具如 `python-dotenv`, 这样做不仅简化了流程而且提高了安全性[^5]. 创建一个名为`.env`的纯文本文件放在项目根目录下,并按照如下格式填写: ``` OPENAI_API_KEY=your_openai_api_key_here ``` 随后,在Python脚本里引入dotenv模块读取这些参数: ```python from dotenv import load_dotenv import os load_dotenv() # 加载 .env 文件中的环境变量到进程中去. api_key = os.getenv('OPENAI_API_KEY') print(f"The loaded API key is {api_key}") ``` 这里调用了 `os.getenv()` 函数尝试从操作系统层面检索指定名称的环境变量;而在此之前我们已经借由 `load_dotenv()` 将本地磁盘上的.env数据映射到了内存当中[^4]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

openwin_top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值