学习大模型RAG与Agent智能体基础知识day1

学习大模型RAG与Agent智能体基础知识day1 开头各位好啊如你所见博主是个新手新到这是我第一次发博客。现在是2026.5.20的凌晨哦情人节到了…前几周刚刚学完langchain的基础知识跟着教程做了个前后端前端因为没学所以代码直接搬教程的的AI私厨管家借助阿里云成功在本地网络上跑起来了。把前后端代码打包放到GitHub后我开始下一段旅程RAG知识的学习学了一两天我突然想到或许把遇到的问题和有趣的事情写在博客里可以帮到别人我自己也能当个错题本有的错误不是第一次犯了所以就是这样啦我不擅长写文章能看到这里真的很谢谢你对了如果你真的想看看那个AI私厨的代码到这个网址https://github.com/QHzzy035/AI_PrivateKitchen接下来是日志部分代码一览# 导入依赖fromopenaiimportOpenAIfromdotenvimportload_dotenvimportos#导入环境变量load_dotenv()# 获取openai对象openai_objectOpenAI(base_urlos.getenv(DASHSCOPE_BASE_URL),api_keyos.getenv(DASHSCOPE_API_KEY),)# 定义模型responseopenai_object.chat.completions.create(modelqwen3.5-plus,messages[{role:system,content:你是一个python编程专家而且话很多。},{role:assistant,content:好的我是python编程专家很高兴见到你你要问什么},{role:user,content:使用python编程技术输出1-10。}],streamTrue)# 流式输出forchunkinresponse:ifchunk.choicesandchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end,flushTrue)日志1导入dotenv不要忘记导入dotenv中的load_dotenv并运行load_dotenv除非你的环境变量都在高级系统设置中配置好了这是第二次犯错了fromdotenvimportload_dotenvimportos如果没有导入这个调用openai模型时会显示超时没找到base_url自动换成了openai官网的url普通网络打不开日志2流式输出流式输出存在一些奇怪的地方我一开始在输出部分写了这些代码forchunkinresponse:print(chunk.choices[0].delta.content,end,flushTrue)结果输出就一直蹦出NoneNoneNone后来发现其实运行一段时间后就正常吐字了然后我改成了forchunkinresponse:ifchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end,flushTrue)有了检测后None不再蹦出来了结果运行到最后报错IndexError: list index out of range根据网上给的资料因为 if chunk.choices[0].delta.content: 会先执行 chunk.choices[0]如果 choices 是空列表就会 IndexError。所以我又加上了判断chunk.choices非空的代码forchunkinresponse:ifchunk.choicesandchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end,flushTrue)好啦这下解决了日志3messages警告等下messages那块一直警告应为类型 ‘Iterable[ChatCompletionDeveloperMessageParam | ChatCompletionSystemMessageParam | ChatCompletionUserMessageParam | ChatCompletionAssistantMessageParam | ChatCompletionToolMessageParam | ChatCompletionFunctionMessageParam]’但实际为 ‘list[dict[str, str]]’问了AI告诉我是OpenAI SDK 的 messages 参数在类型系统中被定义为多种特定消息类型的联合如 ChatCompletionSystemMessageParam、ChatCompletionUserMessageParam 等每个类型有严格的字段要求例如 role 必须是特定字面量content 必须存在。而你直接使用了通用的 list[dict[str, str]]类型检查器无法确认这些字典是否真的符合 API 所需的精确结构。简单说就是openai的消息有专门给用户消息系统消息AI回复消息这三类设计的函数按照SDK设计应该这样改fromopenai.types.chatimportChatCompletionSystemMessageParam,ChatCompletionUserMessageParam,ChatCompletionAssistantMessageParam messages[ChatCompletionSystemMessageParam(rolesystem,content...),ChatCompletionAssistantMessageParam(roleassistant,content...),# 注意拼写ChatCompletionUserMessageParam(roleuser,content...)]嗯有点类似之前学lanngchain写的HumanMessage但是不太一样HumanMessages用在键值对中与messages相对的值位置responseagent.stream({messages:[HumanMessage(content宝宝出去玩怎么样不要老是坐在家里嘛。)]},stream_modemessages)嗯请无视文本后面我可能会换成SDK的方法毕竟这个警告太烦了结语好了今天遇到的问题就这些如果我写的没错的话希望可以帮到你。最后可以给个赞吗装可爱