1 .*args接收任意多个【普通位置参数】,打包成元组 tuple,args 就是元组变量名,  *= 打包符号,args是约定名字(可以改成*nums*data,但规范写 args)

**kwargs:接收所有 key=value 格式的关键字实参,自动打包成字典 dict

  • *args → 打包位置参数 (1,2,3)元组
  • **kwargs → 打包关键字参数 a=1,b=2字典

2. 字典 .items () 方法

遍历字典键值对(k,v),返回可迭代对象,配合 for k,v in ... 拆包

  • .keys():只遍历键
  • .values():只遍历值
  • .items()键 + 值一起取出

3. 列表推导式

[表达式 for 变量 in 可迭代对象]

4.lambda 匿名函数 :  lambda 入参: 返回表达式

lambda x: x + "!":接收 x,返回x加感叹号

5.**字典 字典拆包

**result:把字典 {"city":"北京","temp":"25℃"}拆成关键字实参:city="北京", temp="25℃"

6.字符串.format() 模板替换

{变量名} 占位符,.format(关键字参数)自动替换占位内容

7.  *列表 → 拆 / 收 列表、元组 , 拆成位置参数 (1,2,3)

  **字典 →拆 / 收 字典 ,  拆成关键字参数 k1=v1,k2=v2

8.yield → 生成器标志

  1. 函数里出现yield,这个函数不再返回普通值,而是返回生成器对象(generator)。
  2. yield 数据:暂停函数、抛出当前片段,下次迭代从暂停位置继续往下执行 , 一次只占一块内存;
  3. return:直接终止函数,一次性返回数据、函数结束。

9.__repr__(self) 调试打印魔法方法

  1. print(对象)时自动调用,自定义对象输出字符串;
  2. 不写__repr__:默认打印内存地址<__main__.Document object at ...>,不方便调试;
  3. 格式化 f-string:{变量}填充数据。

10. try-except-finally 完整异常结构

     try:包裹可能报错的代码(接口调用最容易报错,放这里)

     except 指定异常类:精准捕获对应错误,细分异常优先写在前(先抓具体错误,再抓通用错误)

  • PermissionError:权限 / 密钥鉴权失败(OpenAI 密钥错误、余额不足属于这类业务异常)
  • Exception:Python 通用父类,能捕获绝大多数非系统致命异常,用来兜底所有未知报错

       finally无论 try 里正常运行 / 触发 except 报错,代码一定会执行(接口调用结束收尾固定放这里)

 11. open() 函数:文件操作入口

  • 作用:Python 内置函数,用来打开文件,返回文件对象。
  • 语法:open(filepath, mode, encoding=...)
    • filepath:文件路径;
    • mode="r":只读模式(read),默认值,只能读取文件,不能修改;
    • encoding="utf-8":指定编码格式,避免中文乱码,读取文本文件时强烈建议加上。

  f.read() 方法:读取文件全部内容

  with ... as f: 上下文管理器(重点!)
  • 作用:自动管理文件资源,代码执行完会自动关闭文件,不用手动写 f.close(),即使中间报错也能保证文件正常关闭,避免资源泄漏。
  • 是 Python 读写文件的标准推荐写法,比裸写 open() + close() 更安全。

  split() 分割

    content.split("。"):按中文句号 分割文本,把长文本切成句子列表。

  strip() 去空白

      s.strip():去掉句子前后的空白(空格、换行、制表符),比如句子前后的空格、换行符会被删掉。

    if s.strip():过滤掉空白句子。因为 split("。") 后可能会出现空字符串(比如文本末尾的句号分割出的空元素),s.strip() 会把空白字符串转为空,在列表推导式里作为条件,空值会被过滤掉。

12.json.dump()写入文件直接操作文件对象,生成 .json 文件

  json.dumps()转成 JSON 字符串只返回字符串,不写入文件

  json.load()读取文件直接从文件对象读取,还原成 Python 数据

  json.loads()解析 JSON 字符串从字符串解析,不涉及文件操作

json.dump() + json.load() 是 JSON 文件读写的标准组合,必须牢记用法。

13.按固定长度 chunk_size 切割文本

  range(0, len(content), chunk_size) 是按步长切割的标准写法;

  content[i:i+chunk_size] 切片取出每一段文本。

14.re.findall() 函数(提取匹配内容)

      在字符串中,找出所有匹配正则模式的子串,返回一个列表。

15.[]:字符集,表示匹配其中任意一个字符;

  +:量词,表示匹配前面的模式一次或多次

16.re.sub() 函数(替换 / 清洗文本)

     用指定内容,替换字符串中所有匹配正则模式的子串,返回处理后的新字符串。

17.空白字符正则 \s+

  \s:匹配任意空白字符,包括空格 、换行 \n、制表符 \t

18.messages 角色的作用system 设定人设、user 发起提问

    响应体解析choices[0].message.content 是获取回复文本的固定写法。

 OpenAI SDK 的标准调用流程:初始化客户端 → 发送请求 → 解析响应

    API 密钥的安全管理:使用环境变量 OPENAI_API_KEY

19.stream=True:开启流式模式 , 模型生成一点就发一点,前端可以实时显示,用户体验更流畅。

     stream=False 时,API 会等模型生成完所有内容再一次性返回,体验有延迟。

20.三种 Chat API 角色的核心作用

     system给模型设定角色、规则和行为边界,决定它怎么说话、做什么

     user用户提出的问题或指令

     assistant模型生成的回答 / 回复

21.环境变量读取

  os.getenv("OPENAI_API_KEY") 是读取 API Key 的标准方式

  OpenAI Chat API 调用格式

  • messages 必须包含 systemuser 角色
  • 响应内容通过 response.choices[0].message.content 获取
  • model 参数(如 gpt-3.5-turbo)是必填项

22. async defawait

  • async def 用来定义异步函数(协程)
  • await asyncio.sleep(t) 用来模拟耗时操作,让出 CPU,让其他任务有机会执行
  • 只有 async 函数内部才能使用 await

23.asyncio.gather() 的作用

asyncio.gather(*tasks) 会:

  • 接收多个协程 / 任务,并发执行它们
  • 等所有任务完成后,按传入顺序返回结果列表
  • 总耗时 ≈ 任务中耗时最长的那个,而不是时间相加

24.asyncio.run(main())

  • Python 3.7+ 的标准入口方式
  • 负责创建事件循环,运行 main() 协程,结束后关闭循环

25.分词:用 jieba.cut() 对问题和知识库文本分词,转成集合方便求交集。

26.排序与筛选sort(reverse=True, key=lambda x: x[0]) 按分数从高到低排序,取前 top_k 条并过滤掉 0 分文档。

27.关键词重叠法的两个局限

   1.无法理解语义和同义词关系

   2.无法处理语序、句式和歧义,容易误匹配

28.向量检索(embedding-based retrieval)如何解决

   对于同义词、近义词,模型会生成相似的向量

   向量捕捉了文本的整体语义信息,语序、句式和多义词的影响会被大幅削弱,模型能理解句子的     真实含义,从而避免了字面匹配的缺陷。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐