day 2:RAG 快速原型实现计划

发布时间:2026/6/7 1:49:01

day 2:RAG 快速原型实现计划 Deep Agents Template 的高级功能**规划、委派、批评子智能体、写文件等和前端 HTTP 调用的能力。下面我为你整合一个完整的项目基于deepagents库LangChain 的深度智能体模板外加 Flask 包装层和前端聊天界面。这样你既得到了 deep agent 的强大工作流又能通过浏览器与它交互。最终项目结构my_deep_agent/ ├── .env # API Key 配置 ├── requirements.txt # 依赖列表 ├── app.py # Flask 后端 deep agent 逻辑 ├── static/ │ └── index.html # 前端聊天界面 └── README.md # 运行说明1. 后端代码 (app.py)这里使用deepagents的create_deep_agent保留其内置的plan、delegate、critique、finalize流程并添加两个默认子智能体研究员和批评家。然后通过 Flask 暴露/chat接口供前端调用。importosfromdotenvimportload_dotenvfromflaskimportFlask,request,jsonifyfromflask_corsimportCORSfromlangchain_openaiimportChatOpenAI# 如果你用其他模型可改为 ChatAnthropicfromdeepagentsimportcreate_deep_agentfromdeepagents.middlewareimportSubAgentMiddlewarefromlangchain_core.toolsimporttool load_dotenv()# ---------- 配置模型使用通义千问或 OpenAI 兼容服务----------api_keyos.getenv(DASHSCOPE_API_KEY)base_urlos.getenv(DASHSCOPE_BASE_URL)ifnotapi_keyornotbase_url:# 如果没有配置 DashScope尝试用 Anthropicapi_keyos.getenv(ANTHROPIC_API_KEY)ifnotapi_key:raiseValueError(请设置 DASHSCOPE_API_KEY 或 ANTHROPIC_API_KEY)# 模型初始化这里以 DashScope 兼容 OpenAI 为例llmChatOpenAI(modelqwen-plus,temperature0.7,api_keyapi_key,base_urlbase_url,model_kwargs{extra_body:{enable_thinking:False}})# 如果你使用 Anthropic Claude改为# from langchain_anthropic import ChatAnthropic# llm ChatAnthropic(modelclaude-3-5-sonnet-20241022, temperature0.7)# ---------- 自定义工具类似 get_weather----------tooldefget_weather(city:str)-str:获取指定城市的天气模拟returnf️{city}今天天气晴朗气温 22°C适合出行。# ---------- 构建 Deep Agent ----------# create_deep_agent 会自动包含计划、委派、批评、最终确定四步流程# 同时内置了 execute 和 write_file 工具并自动添加了两个子智能体researcher 和 criticdeep_agentcreate_deep_agent(modelllm,tools[get_weather],# 你可以添加更多自定义工具system_prompt你是一个智能助手负责计划、委派、批评并最终回答用户问题。 如果用户询问需要搜索或分析的信息可以委派给 researcher 子智能体 如果用户询问需要批判性分析可以委派给 critic 子智能体。 你也可以直接调用 get_weather 工具回答天气问题。,# 可选自定义子智能体# sub_agents[...])# ---------- Flask 应用 ----------appFlask(__name__)CORS(app)# 允许前端跨域app.route(/chat,methods[POST])defchat():datarequest.get_json()user_messagedata.get(message,)ifnotuser_message:returnjsonify({error:消息不能为空}),400try:# 调用 deep agent使用 invoke它会完整执行 plan-delegate-...-finalizeresponsedeep_agent.invoke({messages:[(user,user_message)]})# 提取最后一条 AI 消息的内容final_messageresponse[messages][-1].contentreturnjsonify({response:final_message})exceptExceptionase:returnjsonify({error:str(e)}),500if__name____main__:app.run(host0.0.0.0,port5000,debugTrue)注意deepagents库需要单独安装它依赖langgraph和一些中间件。如果create_deep_agent的签名与上述不同请查阅 deepagents 文档。上面的代码假设create_deep_agent接受model,tools,system_prompt等参数并内置子智能体。2. 前端代码 (static/index.html)与之前相似提供简洁的聊天界面。!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8metanameviewportcontentwidthdevice-width, initial-scale1.0title深度智能体助手/titlestylebody{font-family:system-ui;max-width:800px;margin:2rem auto;padding:0 1rem;background:#f5f7fb;}.chat-container{background:white;border-radius:1rem;box-shadow:0 4px 12pxrgba(0,0,0,0.1);display:flex;flex-direction:column;height:70vh;overflow:hidden;}.messages{flex:1;padding:1.5rem;overflow-y:auto;display:flex;flex-direction:column;gap:1rem;}.message{display:flex;gap:0.5rem;}.user-message{justify-content:flex-end;}.assistant-message{justify-content:flex-start;}.bubble{max-width:70%;padding:0.75rem 1rem;border-radius:1.5rem;line-height:1.4;}.user-bubble{background:#007aff;color:white;border-bottom-right-radius:0.25rem;}.assistant-bubble{background:#e9e9ef;color:black;border-bottom-left-radius:0.25rem;}.input-area{display:flex;gap:0.5rem;padding:1rem;border-top:1px solid #ddd;background:white;}input{flex:1;padding:0.75rem;border:1px solid #ccc;border-radius:2rem;font-size:1rem;}button{background:#007aff;color:white;border:none;border-radius:2rem;padding:0 1.25rem;cursor:pointer;}button:hover{background:#005fc1;}.loading{text-align:center;color:#666;font-style:italic;margin:0.5rem 0;}/style/headbodydivclasschat-containerdivclassmessagesidmessagesdivclassmessage assistant-messagedivclassbubble assistant-bubble 你好我是深度智能体支持计划、委派、批评和最终解答。试试问我“西安天气”或“分析一下人工智能的未来趋势”。/div/div/divdivclassinput-areainputtypetextiduserInputplaceholder输入消息...onkeypresshandleKeyPress(event)buttonidsendBtn发送/button/div/divscriptconstmessagesDivdocument.getElementById(messages);constuserInputdocument.getElementById(userInput);constsendBtndocument.getElementById(sendBtn);constAPI_URLhttp://127.0.0.1:5000/chat;functionaddMessage(content,isUser){constmessageDivdocument.createElement(div);messageDiv.classNamemessage${isUser?user-message:assistant-message};constbubbledocument.createElement(div);bubble.classNamebubble${isUser?user-bubble:assistant-bubble};bubble.textContentcontent;messageDiv.appendChild(bubble);messagesDiv.appendChild(messageDiv);messagesDiv.scrollTopmessagesDiv.scrollHeight;}functionshowLoading(){constloadingDivdocument.createElement(div);loadingDiv.idloading;loadingDiv.classNameloading;loadingDiv.textContent 深度思考中计划→委派→批评→最终回答...;messagesDiv.appendChild(loadingDiv);messagesDiv.scrollTopmessagesDiv.scrollHeight;}functionhideLoading(){constloadingDivdocument.getElementById(loading);if(loadingDiv)loadingDiv.remove();}asyncfunctionsendMessage(){constmessageuserInput.value.trim();if(!message)return;userInput.value;addMessage(message,true);showLoading();try{constresponseawaitfetch(API_URL,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({message:message}),});hideLoading();if(!response.ok){consterrorDataawaitresponse.json();addMessage(❌ 错误:${errorData.error||请求失败},false);return;}constdataawaitresponse.json();addMessage(data.response,false);}catch(error){hideLoading();addMessage(❌ 网络错误:${error.message},false);}}functionhandleKeyPress(event){if(event.keyEnter)sendMessage();}sendBtn.addEventListener(click,sendMessage);/script/body/html3. 环境变量 (.env)根据你使用的模型提供者填写# 使用阿里云 DashScope兼容 OpenAI DASHSCOPE_API_KEYsk-xxxxxx DASHSCOPE_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 # 或者使用 Anthropic # ANTHROPIC_API_KEYsk-ant-xxxxxx4. 依赖文件 (requirements.txt)flask3.0.3 flask-cors4.0.1 python-dotenv1.0.1 langchain-openai0.1.20 # 如果用 dashscope # langchain-anthropic0.1.20 # 如果用 anthropic deepagents0.1.0 # 这个包可能还在开发请使用最新版 # 注意deepagents 会自动安装 langgraph 等依赖安装命令pip install -r requirements.txt如果deepagents包尚未在 PyPI 发布你可能需要从 GitHub 安装pipinstallgithttps://github.com/langchain-ai/deepagents.git具体请查阅 deepagents 官方文档5. 运行说明 (README.md)# 深度智能体 前端调用 本整合项目基于 Deep Agents Template通过 Flask 提供 HTTP API前端可以聊天调用深度智能体计划→委派→批评→最终回答。 ## 快速开始 1. 安装依赖 bash pip install -r requirements.txt配置 API Key在.env中填入你的 DASHSCOPE_API_KEY 或 ANTHROPIC_API_KEY。启动后端python app.py服务运行在 http://0.0.0.0:5000打开前端用浏览器打开static/index.html文件。测试在聊天框输入问题例如“西安天气怎么样”或“分析一下人工智能对教育的影响”。注意事项第一次调用可能较慢因为 deep agent 会进行多轮内部推理。你可以修改app.py中的get_weather工具或添加更多自定义工具。该模板继承了 deep agent 的execute、write_file能力可以在对话中让 agent 执行代码或写入文件。--- ## 6. 验证工作 1. **启动后端**后打开前端输入“西安天气”。 - 预期智能体会调用 get_weather 工具返回天气信息。 2. 输入“写一个 Python 脚本打印 hello world”。 - 预期deep agent 可能会使用 execute 工具运行代码取决于模型决策。 3. 输入“研究一下 LangChain 的最新进展”。 - 预期agent 可能会委派给 researcher 子智能体然后返回总结。 --- ## 如果 deepagents 包不可用怎么办 如果 deepagents 库尚未公开或安装失败你可以退而使用 langgraph 的 create_react_agent 并手动实现“计划-委派-批评”流程。但为了体验模板的完整功能建议先去 [LangChain Deep Agents 官方仓库](https://github.com/langchain-ai/deepagents) 查看最新安装方式。 --- ## 总结 - 你得到一个**独立的项目**不是覆盖原有 README而是新建一个基于 deep agent 的完整应用。 - 后端使用 create_deep_agent保留了模板的规划、委派、批评、最终确定能力。 - 前端通过 HTTP 调用与深度智能体对话。 - 你可以在此基础上任意扩展工具和子智能体。 如果你在安装 deepagents 时遇到问题或者希望我提供一个**纯 langgraph 版本**手动模拟计划-委派-批评流程请告诉我我可以再给你一套备选方案。

相关新闻