自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 记录下学习agent应用开发的第15天(实现Langchain下的memory)

我尝试过使用RunnableWithMessageHistory组件(一个包装器,可以让链自动处理历史消息的填充和存储过程)和ChatMessageHistory组件(默认的内存中实现,适合临时对话)去创建历史会话列表,就可以省去手动保存记录(history.append)这段代码,但是测试结果没有实现记忆功能,经查询我了解到,这两个组件已被 LangChain 官方标记为废弃,替代组件在LangGraph中,所以只能手动建表去临时保存。测试结果如下,可以看到ai确实记住了历史会话内容。

2026-08-01 03:05:49 359

原创 记录下学习agent应用开发的第14天(通过解析器将回答文本转为python对象)

在实际应用中往往需要有针对性的回答,其输出格式就要统一,为了实现这个功能,今天我学习了Langchain的一个解析器组件PydanticOutputParser,强制让Agent的回答以json格式输出。用户输入jd和resume后,template将这两条信息填入模板生成一个完整的prompt,prompt通过chain传送给llm,llm思考后输出的回答再通过chain传送给parser,parser将回答内容转为MatchResult 类的实例对象(为了可以调用回答的数据内容)。

2026-07-30 01:15:04 310

原创 记录下学习agent应用开发的第13天(基于LCEL的chain)

chain按照输入→中间件→输出的顺序链接各组件,组件的输入必须是前一个组件的输出。总结:今天学习LCEL链路体系下的chain,用到了昨天学习的ChatPromptTemplate组件,其格式化的prompt可以通过chain传到其他Runnable组件中进行处理。(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常blog )今天我学习了Langchain框架下的核心组件chain链,其原理是将多个 Runnable 组件串联而成的可执行流水线,上一个组件的输出自动成为下一个组件的输入。

2026-07-26 22:58:31 467

原创 记录下学习agent应用开发的第12天(Prompt Templates)

如果只是将用户输入文本和system prompt拼接成prompt发送给模型,利用python的f-string写法就能实现,而ChatPromptTemplate工具写了一个规范的prompt模板,通过invoke调用写好的system prompt也可以和用户输入文本拼接。而ChatPromptTemplate工具和这些都属于Langchain框架下的组件,同一个接口可以互通,其拼接的prompt可以被其它组件识别。通过for循环轮流切换不同的role,根据用户的输入输出对应的回答。

2026-07-25 02:03:24 500

原创 记录下学习agent应用开发的第11天(Langchain框架)

原手写代码段要通过if来匹配工具函数名,而Langchain框架在内部维护了一个注册表,可以自动按函数名查找执行,而且添加新工具函数时不需要去改动代码,注册表会自动更新。同时,Langchain可以自己管理发送给llm的历史会话记录message,而手写的则要手动上传和维护。(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常blog)为了方便理解底层原理,前面学习过程中的功能性代码大部分都是自己手写,出于便捷,今天我采用Langchain框架来代替那些复用率高的代码段。

2026-07-24 09:14:16 369

原创 记录下学习agent应用开发的第十天(添加读取pdf文本功能、项目上传Github)

这只是一个简单的玩具,还没达到我预期的效果,后面会上传更全面的版本。大家可以关注一下,督促我的日常学习。ChromaDB最初保存的是python知识库,我通过上传pdf格式的java知识库来测试agent能否读取pdf文件。结果如下,可以看出agent成功读取了上传的文件内容,并更新覆盖了原知识库。(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常blog)今天我给agent添加了将pdf导入到知识库功能(目前只支持txt和纯文字的pdf),然后完善一些细节,将其上传到Github。

2026-07-22 01:12:59 349

原创 记录下学习agent应用开发的第九天(agent可视化界面)

(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常blog)我结合前面学过的知识,给agent补充了一些功能(流式输出、历史会话保存和读取、滑窗裁剪),并仿照之前做过的网页版聊天机器人,利用Streamlit给agent包装了一个web。第一部分是初始化,内容包括:接入模型api和接口网址、加载 Embedding 模型(将文本转为向量)、加载 token 计数器(计算会话消耗的token)、设置安全阈值(token超出就触发滑窗裁剪)、设置文件保存路径和连接 ChromaDB 向量数据库。

2026-07-19 23:58:40 460

原创 记录下学习agent应用开发的第八天(开发基于ReAct的简易agent)

为了避免ai陷入逻辑思考的死循环,我设置思考最大轮数max_steps为10作为安全阀,就算ai真的陷入逻辑死循环一直重复思考和调用工具,在第十轮后就会强制跳出循环并输出“未在限定步数内完成”,避免资源成本的浪费。与前面开发过的RAG聊天机器人不同的是,agent可以自己思考决定是否调用工具,调用完后根据返回的结果思考当前掌握的信息是否足够回答用户的问题,不够则重新思考并调用工具,经过几次循环后再输出回答。类似的,ai在调用计算器工具时,因为对计算结果这个客观事实有绝对把握,只进行了一次循环就得出答案。

2026-07-18 23:58:22 543

原创 记录下学习agent应用开发的第七天( Function Calling机制、description)

但是我把TOOLS中调用的两个函数的函数名调换后,其描述就会匹配不上(description告诉ai要查天气就调用““calculator_add”函数,要算加法就调用“get_weather”函数),理论上得到的结果是错误的,可ai仍能正确调用函数。当询问跟函数无关的问题,比如我提问“java的创始人是谁”时 ,ai根据语义判断找不到代码中的相关函数 ,就回归正常聊天模式,自己思考后回答。虽然前面的描述和函数名不匹配,但ai根据用户语义和参数 description,综合判断出真正要调用的函数是什么。

2026-07-17 02:23:24 522

原创 记录下学习agent应用开发的第六天(完整开发基于RAG框架的聊天机器人)

对于上面这两种情况,我的感觉是模型出现了幻觉,但opencode给我的解释是:模型把"我"识别为一个指代词,而不是一个需要查资料的事实,所以不会去知识库里搜"我"这个词,而是查看历史内容看"我"指代什么,符合限制3:参考对话历史理解用户的追问和指代。以下存在特殊情况:我在相邻的两轮会话中分别告诉机器人我的名字和今天天气,再次询问时虽然都根据知识库和system prompt回答“没有关于***的相关信息”,但是下面图一的回答中有提到“小明”,而图二的回答没有提到“下雨”。

2026-07-16 02:36:02 361

原创 记录下学习agent应用开发的第五天(RAG检索机制、向量)

结合前面的输出和本次的结果,我直观地理解了向量检索的全过程:通过Embedding模型把知识库的chunk转成向量存入向量数据库,检索时把用户文本对应的向量和知识库chunk对应的向量进行相关度计算。今天主要理解了向量、向量数据库、相似度等概念,了解检索机制的底层逻辑,会调用Embedding模型把chunk转成向量、通过计算向量判断相似程度。个人初步的理解是把文本划分,转成向量存入向量数据库,然后找出相关度最高(接近1)的几个向量,把这几个向量对应的文本块/数据块(chunk)一起发送给大模型。

2026-07-15 02:02:13 186

原创 记录下学习agent应用开发的第四天(滑动窗口机制删除早期文本)

类似地,站在用户视角,不久前还在和ai分享自己的生活或者使用ai办公,因为token上限问题就把前面重要的内容删除了,用户的心情会很糟糕,甚至工作进度也会受影响。我目前采取的是滑动窗口机制。其实还有个类似的机制叫固定窗口,同样是通过删除来避免内容超出文本限制,与滑动窗口不同的是滑动窗口机制规定会话达到一定轮数后就强制清除所有内容,处理更简单暴力,但问题也很明显:无法支持长期会话。总结:今天就实现了利用滑动窗口机制来控制聊天文本体量的功能,通过“删旧存新”的逻辑去避免记忆文本超出模型读取的上限。

2026-07-14 00:47:03 230

原创 记录下学习agent应用开发的第三天(流式输出、包装网页)

如果chunk内有实质内容,就打印单个content, end=""是打印完不换行,flush=True是强制刷新直接输出给用户(为了省 I/O 操作,Python 打印东西不是直接输出,而是先扔到一个缓冲区里。(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常vlog)第三天我把聊天机器人的阻塞式输出改为流式输出,这样的输出方式更贴合主流ai。以上是我实现聊天机器人流式输出的过程,结果不好演示就不贴图了,原先的回答是等待几秒到十几秒才有内容输出,更新后回答效果是几个字几个字地连续打印。

2026-07-13 01:45:34 347

原创 记录下学习agent应用开发的第二天(上下文关联、保存会话内容、读取历史会话)

我的思路是使用json来存用户和机器人的会话记录,每次启动机器人时查看json文件的内容,如果存在则读取后转为list(类似上下文关联)喂给模型,模型就会基于json所存的记录来进行后面的会话,在每次对话后(一问一答)程序会把整个历史记录list表转为json覆盖写入存储文件。清空聊天内容,测试机器人是否记忆清除的内容。(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常vlog)虽然第一天运行的聊天机器人可以跑通,但是无法关联上下文文本,不算是严格意义上的聊天,只是单向的问答反馈。

2026-07-12 00:52:16 357

原创 记录下学习agent应用开发的第一天(学基础理论、创建聊天机器人)

(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常vlog)为什么选择这条路,我认为deepseek是比我聪明的,根据它给的路线看看能学到什么程度。向机器人提问的时候得不到回复,逐步查明是输入的接口地址不对,修改后机器人就可以聊天了。我感觉处理这个明显错误的过程不值一提,但是提醒我以后对输入的信息要反复核查,明面的错误不应该犯。下面是它在D盘给我创的文件夹,子文件夹venv里的是Python 虚拟环境 ,.env里存的是api,tutor.py里的就是聊天机器人。

2026-07-11 00:40:03 561

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除