LangChain+LangSmith实战:如何用OllamaLLM构建多场景AI厨师(含完整代码)
LangChainLangSmith实战构建多场景AI厨师的完整指南想象一下拥有一个能随时切换中餐大师和西点主厨身份的AI助手不仅能回答专业烹饪问题还能根据你的需求自动选择最适合的烹饪知识库——这就是我们将要构建的多场景AI厨师。不同于简单的问答机器人这个项目将展示如何利用LangChain的路由链实现智能场景切换并通过LangSmith全程监控每个决策环节。1. 项目架构设计思路这个AI厨师的核心在于它的场景感知能力。当用户询问如何制作提拉米苏时系统能自动识别这是西点问题而调用西餐模板当问题变成红烧肉的火候控制时又会无缝切换到中餐专家模式。这种动态路由能力背后是三个关键组件多提示管理系统维护不同烹饪领域的专业模板库路由决策引擎分析问题语义并选择最匹配的烹饪领域执行监控体系通过LangSmith追踪每个决策节点的逻辑# 架构示意图代码表示 class AIChefArchitecture: def __init__(self): self.template_repository {} # 存储多场景提示模板 self.router_engine None # 路由决策模块 self.langsmith_integration {} # 监控配置这种设计特别适合知识领域边界清晰但内部复杂的场景。在烹饪领域中餐和西餐在技法、工具、术语上都有明显差异但各自内部又有严密的体系正是路由链发挥优势的典型场景。2. 环境配置与基础搭建2.1 工具链准备需要安装的核心组件及其作用工具版本要求功能描述LangChain≥0.1.0链式调用框架基础OllamaLLM最新版本地运行的LLM引擎LangSmith-链式调用监控平台Python≥3.8运行环境安装命令pip install -U langchain langsmith ollama2.2 LangSmith监控配置LangSmith的配置需要四个环境变量建议通过.env文件管理# .env 文件示例 LANGSMITH_TRACINGtrue LANGSMITH_API_KEYyour_api_key_here LANGSMITH_ENDPOINThttps://api.smith.langchain.com LANGSMITH_PROJECTai-chef-debug提示项目名称建议按功能或日期划分例如ai-chef-202406便于后期追溯3. 多场景提示工程实践3.1 构建专业厨师角色模板中餐和西餐模板的关键差异体现在专业术语体系中餐强调火候、勾芡西餐注重烤箱预热、打发计量单位中餐常用适量西餐精确到克工具偏好中餐依赖炒锅西餐常用烤箱chinese_template 你是一位拥有30年经验的中餐主厨精通川、粤、鲁等八大菜系。 回答时请遵循 1. 使用中式烹饪术语如炝锅、勾薄芡 2. 配料用量用适量、少许等中餐表述 3. 优先推荐中式厨具铁锅、蒸笼等 问题{input} western_template 你是米其林三星西点师擅长法式、意式烘焙。 回答需包含 1. 精确到克的原料配比 2. 烤箱温度和时间参数 3. 标准西餐制作流程术语 问题{input} 3.2 动态路由系统实现路由链的核心是决策模板需要明确定义各场景的边界from langchain.chains.router import LLMRouterChain from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE destinations [ chinese: 中式烹饪技法、菜谱、火候控制等问题, western: 西式烘焙、酱汁制作、烤箱使用等问题 ] router_template MULTI_PROMPT_ROUTER_TEMPLATE.format( destinations\n.join(destinations) )路由决策过程会在LangSmith中生成详细的轨迹记录包括输入问题分析各场景匹配度评分最终选择决策4. 完整链式调用集成4.1 多链组装技术构建完整的AI厨师需要三种链协同工作路由链判断问题类型目标链中餐/西餐专业链默认链处理通用烹饪问题from langchain.chains import MultiPromptChain # 初始化各专业链 chain_map { chinese: LLMChain(llmollama_llm, promptchinese_prompt), western: LLMChain(llmollama_llm, promptwestern_prompt) } # 构建完整管道 ai_chef MultiPromptChain( router_chainrouter_chain, destination_chainschain_map, default_chaindefault_chain, verboseTrue )4.2 LangSmith监控点配置在关键节点添加跟踪标记# 在链式调用中添加metadata def track_chain(chain, metadata): chain.metadata {**chain.metadata, **metadata} return chain chinese_chain track_chain(chinese_chain, {domain: chinese})LangSmith控制台将显示每个链的输入/输出执行耗时和token消耗路由决策路径的可视化5. 实战调试技巧5.1 常见路由错误排查通过LangSmith的Trace功能可以发现场景误判比如把披萨识别为中餐解决方案增强路由模板中的示例术语混淆如将炒应用于烤箱料理解决方案完善各场景的术语黑名单注意在LangSmith中比较不同版本的运行轨迹是优化的重要方法5.2 性能优化策略缓存机制对常见问题答案缓存from langchain.cache import SQLiteCache llm.cache SQLiteCache(database_path.ai_chef_cache.db)模板精简移除冗余描述减少token使用并行执行对复杂查询启用多链并行6. 进阶扩展方向这个基础框架可以延伸出多种专业变体多语言支持增加模板语言版本菜系细分将中餐扩展为川菜、粤菜等子分类用户偏好记忆集成对话记忆功能# 扩展示例添加日本料理专家 japanese_template 你是一位寿司大师精通江户前寿司制作... prompt_infos.append({ key: japanese, description: 日料制作、刺身处理等问题, template: japanese_template })在实际项目中我们团队发现路由准确率对示例描述的质量极其敏感。经过多次迭代最终采用的描述方式需要同时包含典型问题示例领域专有名词常见误判案例的排除说明