本文介绍如何结合 AgentLoop 记忆库 和 LangChain 构建一个带有记忆功能的个人专属烹饪助手。
操作步骤
安装依赖:
pip install langchain==1.2.8 langchain-openai==1.1.7 agentloop-memory配置代码中需要的环境变量:
ALIYUN_ACCESS_KEY_ID ALIYUN_ACCESS_KEY_SECRET CMS_ENDPOINT CMS_WORKSPACE CMS_MEMORY_STORE OPENAI_API_KEY复制并运行代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- """烹饪 Agent 助手""" import os import sys from agentloop_memory import Config, AgentLoopMemoryClient from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage class CookingAgent: """烹饪助手""" def __init__(self, memory_client: AgentLoopMemoryClient, user_id: str, llm: ChatOpenAI): self.memory = memory_client self.user_id = user_id self.agent_id = "cooking_assistant" self.llm = llm self.system_prompt = """你是专业的烹饪助手"小厨"。根据用户的记忆(饮食偏好、过敏等)提供个性化建议。""" self.history = [] def chat(self, message: str) -> str: """处理对话""" # 检索记忆 try: memories = self.memory.search( query=message, user_id=self.user_id, agent_id=self.agent_id, top_k=3, rerank=True ).get("results", []) except Exception as e: print(f"[检索记忆失败: {e}]") memories = [] # 构建提示 context = "\n".join([f"- {m.get('memory', '')}" for m in memories]) memory_context = f"用户记忆:\n{context}" if context else "暂无记忆" messages = [ SystemMessage(content=self.system_prompt), SystemMessage(content=memory_context), *self.history[-6:], # 最近3轮对话 HumanMessage(content=message) ] # 生成响应 response = self.llm.invoke(messages).content # 更新历史 self.history.extend([HumanMessage(content=message), SystemMessage(content=response)]) # 保存记忆(异步) try: self.memory.add( messages=[ {"role": "user", "content": message}, {"role": "assistant", "content": response} ], user_id=self.user_id, agent_id=self.agent_id, infer=True, async_mode=True ) except Exception as e: print(f"[保存记忆失败: {e}]") return response def init_clients(): """初始化客户端""" # 检查环境变量 required = ["ALIYUN_ACCESS_KEY_ID", "ALIYUN_ACCESS_KEY_SECRET", "CMS_ENDPOINT", "CMS_WORKSPACE", "CMS_MEMORY_STORE", "OPENAI_API_KEY"] missing = [v for v in required if not os.getenv(v)] if missing: print(f" 缺少环境变量: {', '.join(missing)}") sys.exit(1) # 初始化 Memory 客户端 config = Config( access_key_id=os.getenv("ALIYUN_ACCESS_KEY_ID"), access_key_secret=os.getenv("ALIYUN_ACCESS_KEY_SECRET"), endpoint=os.getenv("CMS_ENDPOINT"), ) memory_client = AgentLoopMemoryClient( config, workspace=os.getenv("CMS_WORKSPACE"), memory_store=os.getenv("CMS_MEMORY_STORE"), ) # 初始化 LLM llm = ChatOpenAI( api_key=os.getenv("OPENAI_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model=os.getenv("OPENAI_MODEL", "qwen-plus"), temperature=0.7 ) return memory_client, llm def main(): """主函数""" print("=" * 50) print(" 智能烹饪助手 - 小厨") print("=" * 50) print() # 初始化 try: memory_client, llm = init_clients() agent = CookingAgent(memory_client, "user_123", llm) except Exception as e: print(f"✗ 初始化失败: {e}") sys.exit(1) # 主循环 while True: try: user_input = input("你: ").strip() if not user_input: continue # 对话 response = agent.chat(user_input) print(f"\n小厨: {response}\n") except KeyboardInterrupt: print("\n\n再见!") break except Exception as e: print(f"\n✗ 错误: {e}\n") if __name__ == "__main__": main()运行 Agent 并进行对话:
第一轮对话:
你: 我喜欢吃 川菜,湖南菜系,可以吃辣. 今天中午 吃什么你有推荐吗?小厨: 你好呀~欢迎来和小厨一起琢磨美食! 既然你喜欢川菜、湘菜,又不怕辣,那咱们今天中午就可以安排一顿“热辣鲜香、下饭到跺脚”的硬菜组合! 【今日推荐:剁椒鱼头 + 干煸四季豆 + 毛血旺盖饭(简版快手版)】 ——兼顾经典、过瘾、易操作,1小时内可搞定(含备菜+烹饪): 剁椒鱼头(湘味代表,鲜辣直冲天灵盖!) - 鱼头选胖头鱼/花鲢鱼头,提前用料酒、姜片、盐稍腌; - 铺满自制或优质剁椒(推荐湖南临武/浏阳剁椒,辣中带酸香),加蒜末、豆豉、少量糖提鲜; - 水开上锅蒸15–18分钟,出锅撒葱花+淋一勺滚烫热油,“滋啦”一声,香气爆炸 小贴士:怕腥?蒸前在鱼鳃和腹腔塞几片紫苏叶,去腥增香一级棒! 干煸四季豆(川湘都爱的下饭菜) - 四季豆手掰段,用中小火干煸至表皮微皱、略虎斑(不加油先煸,更香!); - 盛出后爆香蒜末、干辣椒段、肉末(可选),再回锅+少许酱油、糖、蚝油调味; 升级建议:加一小把四川芽菜或湖南剁辣椒,风味更地道! 主食搭配:毛血旺盖饭(快手减配版) - 用现成鸭血块、午餐肉、黄豆芽、千张结焯水备用; - 烧热油炒香郫县豆瓣+火锅底料(半勺足矣),加高汤/清水煮沸,下食材烫2分钟; - 淋花椒油+撒花椒粉+翠绿蒜苗段——麻辣鲜烫,一口入魂! 饭后解辣小彩蛋:冰镇绿豆沙 or 一杯浓茉莉花茶(清热又刮油~) 需要我帮你: 整理成详细步骤版食谱(含用量、时间点)? 推荐适合单人份的简化做法(比如免蒸鱼头的替代方案)? 或者根据你手边现有食材(比如只有鸡胸肉/豆腐/土豆…)重新定制一道辣味主菜? 随时告诉我,小厨马上为你现炒一盘热乎的灵感!你: 剁椒鱼头具体的做法是什么呢你: 剁椒鱼头具体的做法是什么呢 小厨: 太好啦~你点名要「剁椒鱼头」,这道菜可是湘菜里的“辣味顶流”、宴客C位担当!小厨这就为你奉上**家庭实操版详细做法**——不花哨、不翻车,重点讲清【去腥关键、火候节点、风味灵魂】,连新手也能一次成功(附避坑Tips!) --- 【家庭版剁椒鱼头|2–3人份|耗时约35分钟】 **核心食材清单(超市/菜场轻松搞定)** | 食材 | 用量 | 小厨备注 | |------|------|-----------| | **胖头鱼头(花鲢鱼头)** | 1个(约1.2–1.5kg,带鱼鳃、鱼脑饱满为佳) | 选现杀的!鱼眼清澈、鱼鳃鲜红、无异味;提前让摊主劈开成两半(更易入味+好蒸) | | **湖南剁椒** | 180–200g(推荐:**临武剁椒**或**浏阳豆豉剁椒**) | 别用四川泡椒代替!湘剁椒是“鲜辣+微酸+豆豉香”,才是灵魂!可加1小勺豆豉增醇厚感 | | **紫苏叶** | 6–8片(新鲜为佳,干紫苏次之) | **去腥神器!** 鱼腹内、鱼头上都要铺,不可省! | | **姜片 + 葱段** | 姜15g切片、葱2根打结 | 去腥基底 | | **料酒** | 2勺(30ml) | 腌制用 | | **白胡椒粉** | 1/4小勺 | 提鲜去腥,比黑胡椒更柔和 | | **糖** | 1/2小勺(约3g) | 中和辣味、提鲜,湘菜秘技! | | **蒸鱼豉油** | 1勺(15ml) | 出锅前淋,咸鲜不齁咸(不用生抽!) | | **热油** | 3大勺(约45ml,花生油/茶籽油更香) | 淋油是“香气引爆点”,务必烧至**微微冒青烟(约180℃)** | --- **超清晰步骤(含时间&手感判断)** ** 处理鱼头(5分钟|去腥成败在此一步!)** → 鱼头洗净,**重点刮净鱼鳃、黑膜、鱼喉部血块**(腥味最大来源!可用小刀轻刮或厨房纸擦干); → 用厨房纸彻底吸干表面和内部水分(水汽=蒸不熟+腥气重); → 在鱼肉厚处(如鱼脸、鱼脑旁)斜划2–3刀,方便入味; → 用料酒、姜片、葱结、白胡椒粉、1小勺盐,**里外均匀抹匀**,腌10分钟; → 腌好后倒掉渗出的水汁,**再用厨房纸吸一遍**(关键!)。 **铺料(3分钟|层次决定风味深度)** → 取深盘(能平放鱼头),铺姜片+紫苏叶; → 放鱼头(皮朝上!鱼脑朝向自己,最嫩部位先接触热气); → **鱼腹内塞紫苏叶+姜片+葱段**; → 均匀铺满剁椒(**边缘略厚、鱼脑处堆高一点**,越厚越香辣); → 撒豆豉碎(如有)、糖、再盖2片紫苏叶。 **蒸制(15–18分钟|宁欠勿过!)** → 蒸锅水**大火烧开**(必须沸腾再上锅!冷水上锅鱼肉易老); → 鱼盘放入,**中大火蒸15分钟**(1.2kg鱼头)→ **1.5kg加2分钟**; → 判断熟了没?用筷子戳鱼眼旁最厚处,**能轻松穿透、鱼肉呈蒜瓣状分离、无透明感**即好; → 千万别蒸久!鱼脑会变蜂窝、鱼肉发柴。 **淋油点睛(2分钟|香气封神时刻)** → 取出鱼盘,**倒掉蒸出的水汁**(全是腥水!必倒!); → 撒新鲜葱丝+香菜末(可选); → 烧热油至**青烟微起**,**绕鱼头边缘淋一圈,最后集中浇在剁椒堆高处**——滋啦!香气直冲鼻腔; → 淋1勺蒸鱼豉油(沿盘边缓缓淋,避免冲散剁椒)。 --- 【小厨贴心避坑指南】 **为什么我的鱼头还是有点腥?** → 90%败在:①黑膜没刮净 ②没用紫苏 ③蒸出的水没倒掉。 **剁椒太咸怎么办?** → 腌鱼时**盐减半或不加盐**,靠剁椒和蒸鱼豉油调味。 **没有蒸锅?** → 用炒锅+蒸架+锅盖严实,水开后计时,确保蒸汽足! **想更香?** → 淋油前加1小勺**山胡椒油**(湖南特产,清香麻香,点睛之笔!) --- **配餐建议**(让你这顿饭更地道) - 主食:**热乎糙米饭**(吸汁一流!)或**手擀面**(蘸汤吃绝了) - 解辣:**冰镇酸梅汤** or **拍黄瓜+醋泡藠头**(脆爽解腻) - 加菜彩蛋:蒸鱼同时,用余热灶台快速炒个**辣椒炒肉**,双辣暴击,快乐翻倍! 需要我为你: 生成**可打印的图文步骤卡**(含备料图示)? 推荐**3款靠谱网购剁椒品牌+避雷清单**? 或者帮你把这道菜**精简成单人份·15分钟快手版**(比如用鱼头块代替整头)? 随时喊我,小厨锅铲已就位,等你一声令下~ (悄悄说:今晚蒸鱼头,记得开窗!那香味…邻居可能会来敲门问菜单 )第二轮对话
你: 今天中午吃什么呢?小厨: 小厨来啦~今天中午,咱们继续延续昨天那顿清爽又下饭的风格,但稍作升级,兼顾营养、快手和你的口味偏好(喜欢微辣、重鲜香、不排斥内脏类食材,且对豆制品接受度高)! 今日推荐午餐:**「川香鱼头豆腐煲 + 蒜蓉空心菜 + 酸梅山药脆片」** (15分钟主菜+5分钟配菜,全程少油少盐,保留镬气) **主菜|川香鱼头豆腐煲(简化快煮版)** → 沿用你爱的“鱼头+豆制品”组合,但这次换成嫩豆腐+鱼头同炖,加少量泡椒末、姜蒜末、一勺豆瓣酱(可选郫县豆瓣或低盐版),清水代替高汤,小火焖8分钟即成。豆腐吸饱鱼鲜与辣香,鱼肉细嫩无刺,暖胃又开胃~ 小贴士:鱼头已提前去鳃洗净,用厨房纸吸干再煎一下,更香不腥。 **清口配菜|蒜蓉空心菜** → 热锅冷油爆香蒜末,大火快炒30秒断生,淋半勺薄盐酱油提鲜。脆嫩爽口,完美中和微辣。 **点睛小食|酸梅山药脆片(免炸!空气炸锅/烤箱版)** → 山药切薄片,喷少许油+少量酸梅粉(或话梅酱稀释后轻拌),180℃烤12分钟至微脆。酸甜微咸,健脾开胃,还能悄悄补锌补钾~(你知道的,上次你说最近容易疲劳,这个小搭配我悄悄加了心思) 需要我帮你列个采购清单、写详细步骤,或者调整成素食/减脂/控糖版本,随时告诉我哦~ 今天想吃得热乎点,还是清爽点?小厨马上为你优化!
该文章对您有帮助吗?