第8章 智能体开发实战-代码和提示词-林子雨编著《AI编程》
内容提要
本文介绍LangChain与Streamlit构建AI应用的核心技术:LangChain支持消息类型、工具调用、提示词模板、少样本学习及对话历史管理;Streamlit提供聊天界面、打字机效果和图表渲染。实践项目包括哲学家启发式对话应用,并遵循Superpowers七步法规范开发流程。
延伸解读
环境变量与API安全
文中强调使用python-dotenv管理API密钥,避免硬编码。示例中展示了.env文件配置,包括OPENAI_API_KEY、OPENAI_BASE_URL和OPENAI_MODEL_NAME。这提醒开发者,在真实项目中应妥善保管密钥,并可通过环境变量灵活切换不同模型服务,如文中使用腾讯TokenHub中转,避免直接请求OpenAI。
消息类型与工具调用机制
LangChain区分HumanMessage、AIMessage、SystemMessage和ToolMessage,分别对应不同对话环节。工具调用是智能体核心能力:模型生成工具请求,开发者执行函数,结果通过ToolMessage返回模型生成最终回答。理解这一流程有助于设计更复杂的智能体,如天气查询示例所示。
提示词模板与少样本学习
ChatPromptTemplate支持动态参数,便于复用和切换角色;FewShotPromptTemplate通过示例展示输入输出映射,帮助模型快速理解任务。相比直接拼接字符串,模板更结构化、易维护。少样本学习尤其适合需要特定推理模式的场景,如数学应用题,文中示例展示了其用法。
Streamlit与LangChain集成要点
Streamlit采用脚本重跑模型,每次交互重新执行脚本,因此需用st.session_state持久化对话历史,并用@st.cache_resource缓存LLM实例避免重复创建。st.chat_message和st.chat_input提供原生聊天组件,结合打字机效果可提升体验。集成时注意遵循这些规范,确保应用稳定高效。
Q&A
LangChain中SystemMessage、HumanMessage、AIMessage分别有什么用途?
SystemMessage用于设定系统指令或角色,HumanMessage表示用户输入,AIMessage用于表示AI的回复或作为多轮对话的历史记录。
LangChain中工具调用(Tool Calling)是如何工作的?
当用户问题需要外部信息时,大语言模型生成工具调用请求,开发者执行对应Python函数,再将返回值通过ToolMessage传回模型,模型据此生成最终回答。
LangChain中提示词模板(PromptTemplate)相比字符串拼接有什么优势?
提示词模板使用占位符动态填充,更结构化、易维护,支持角色和风格等可变部分的灵活切换。
少样本提示(Few-Shot)是如何帮助大语言模型理解业务逻辑的?
通过在提示词中嵌入少量示例,直接展示输入到输出的映射关系,模型通过模仿示例的推理模式来处理新问题。
LangChain中管理多轮对话历史有哪两种方式?
一种是手动列表管理,另一种是使用InMemoryChatMessageHistory API,后者更简洁。
Streamlit中如何实现打字机效果?
通过生成器函数逐字产出文本,并使用st.empty()占位符配合循环更新显示内容,实现逐字输出的打字机效果。
Streamlit中如何构建聊天界面?
使用st.chat_message和st.chat_input组件,结合st.session_state存储消息历史,实现聊天界面。
哲学家启发式对话应用的核心功能是什么?
用户与10位西方哲学家轮流对话,哲学家不直接回答,而是通过启发式提问回应,体现各自哲学思想,回答不超过150字并以反问结束。
Superpowers七步法开发流程包括哪些步骤?
包括需求对齐、环境隔离、任务拆解、逐任务开发、TDD测试、代码评审、项目收尾七个步骤,需严格按顺序执行。