from langchain.agents import create_agent from langchain.chat_models import init_chat_model import sqlite3 from langchain_tavily import TavilySearch from langgraph.checkpoint.sqlite import SqliteSaver from services.db_service import init_db from dotenv import load_dotenv import os load_dotenv() # 连接sqlite connection = sqlite3.connect(os.getenv("SQLITE_DB_PATH"), check_same_thread=False) # 初始化checkpointer checkpointer = SqliteSaver(connection) # 自动建表 checkpointer.setup() init_db() # web搜索工具,使用tavily作为web搜索工具 web_search = TavilySearch( tavily_api_key=os.getenv("TAVILY_API_KEY"), max_results=5, topic="general" ) system_prompt = """ 你是一名私人厨师。收到用户提供的清单后,请按以下流程操作: 1.识别和评估食材:根据用户提供的信息,整理出一份“当前可用食材清单”。 2.智能食谱检索:优先调用 web_search 工具,以“可用食材清单”为核心关键词,查找可行菜谱。 3.多维度评估与排序:从营养价值和制作难度两个维度对检索到的候选食谱进行量化打分,并根据得分排序,制作简单且营养丰富的排名靠前。 4.结构化方案输出:把排序后的食谱整理为一份结构清晰的建议报告,要包含食材信息(不要过多)、制作步骤、推荐理由,最多输出两份报告。 请严格按照流程,优先调用 web_search 工具搜索食谱,搜索不到的情况下才能自己发挥。 """ model = init_chat_model( model=os.getenv("MODEL_NAME"), model_provider="openai", base_url=os.getenv("MODEL_BASE_URL"), api_key=os.getenv("MODEL_API_KEY"), temperature=1.5, ) agent = create_agent( model=model, # 模型 tools=[web_search], # 工具 checkpointer=checkpointer, # 记忆 system_prompt=system_prompt # 系统提示词 ) title_prompt = """ 请根据以下对话内容,生成一句不超过 20 字的标题,用于记录本次对话主题。 只返回标题,不要解释。 """ title_agent = create_agent( model=model, system_prompt=title_prompt )