import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, PromptTemplate from langchain_core.tools import Tool import json
加载环境变量
load_dotenv() os.environ[“OPENAI_API_KEY”] = “sk-淘宝key” api_key = os.getenv(‘OPENAI_API_KEY’)
========== 1. 初始化 LLM(大语言模型) ==========
LangChain 特点:统一的 LLM 接口,支持多种模型提供商
llm = ChatOpenAI(
base_url="https://api.openai.com/v1", api_key=api_key, model="gpt-4o", temperature=0.7 # LangChain 特点:统一的参数配置
)
以下是具体的子任务方法
def research_destination():
print("进行目的地研究 - 收集当地文化、天气和景点信息")
def book_transportation():
print("预订交通工具 - 选择航班和当地交通方式")
def reserve_accommodation():
print("安排住宿 - 根据预算选择酒店或民宿")
def plan_activities():
print("规划每日活动 - 创建景点游览和餐饮计划")
def prepare_documents():
print("准备旅行文件 - 检查签证、打印预订确认单")
def pack_luggage():
print("整理行李 - 根据天气准备衣物和必需品")
def confirm_arrival():
print("确认抵达安排 - 联系接机服务和酒店")
def calculator():
print(12*25)
LangChain 特点:统一的工具接口定义
tools = [
Tool( name="research_destination", func=research_destination, description="进行目的地研究 - 收集当地文化、天气和景点信息" ), Tool( name="book_transportation", func=book_transportation, description="预订交通工具 - 选择航班和当地交通方式" ), Tool( name="reserve_accommodation", func=reserve_accommodation, description="安排住宿 - 根据预算选择酒店或民宿" ), Tool( name="plan_activities", func=book_transportation, description="规划每日活动 - 创建景点游览和餐饮计划" ), Tool( name="prepare_documents", func=prepare_documents, description="准备旅行文件 - 检查签证、打印预订确认单" ), Tool( name="pack_luggage", func=pack_luggage, description="整理行李 - 根据天气准备衣物和必需品" ), Tool( name="calculator", func=calculator, description="执行简单的数学计算,如加减乘除运算" ), Tool( name="confirm_arrival", func=confirm_arrival, description="确认抵达安排 - 联系接机服务和酒店" )
] def explain_and_process(json_data):
""" 解释并处理旅行计划JSON数据 参数: json_data -- 包含旅行计划步骤的JSON字符串 返回: 处理后的计划步骤列表 """ # 1. 解析JSON数据 try: plan_data = json.loads(json_data) print("✅ JSON解析成功!数据结构验证通过") except json.JSONDecodeError as e: print(f"❌ JSON解析错误: {str(e)}") return None # 2. 解释数据结构 print("
🔍 JSON结构分析:“)
print(f"- 顶层对象包含 {len(plan_data)} 个键: {list(plan_data.keys())}") print(f"- 'steps' 键包含 {len(plan_data['steps'])} 个步骤") # 3. 提取并处理步骤数据 steps = [] print("
📋 计划步骤详情:”)
for step in plan_data["steps"]: # 验证必要字段 if "id" not in step or "description" not in step: print(f"⚠️ 警告: 步骤缺少必要字段 - {step}") continue # 创建步骤对象 step_obj = { "id": step["id"], "description": step["description"], "status": "pending" # 添加执行状态 } steps.append(step_obj) # 打印步骤信息 print(f"步骤 {step['id']}: {step['description']}") if "research_destination" in step['description'].lower(): research_destination() elif "book_transportation" in step['description'].lower(): book_transportation() elif "reserve_accommodation" in step['description'].lower(): reserve_accommodation() elif "plan_activities" in step['description'].lower(): plan_activities() elif "prepare_documents" in step['description'].lower(): prepare_documents() elif "pack_luggage" in step['description'].lower(): pack_luggage() elif "calculator" in step['description'].lower(): calculator() elif "confirm_arrival" in step['description'].lower(): confirm_arrival() # 4. 添加额外信息 print("
✨ 处理后的数据结构:“)
print(f"- 总步骤数: {len(steps)}") print(f"- 首个步骤: {steps[0]['description']}") print(f"- 最后步骤: {steps[-1]['description']}") return steps
def plan_agents():
""" 演示简化版 Agents:手动工具选择和执行 LangChain 特点:工具集成和智能选择(这里用简化版演示概念) """ print("=" * 50) print("🤖 简化版 Agents 演示:计划选择与执行") print("=" * 50) # 创建工具选择提示词 tool_selection_prompt = ChatPromptTemplate.from_messages([ ("system", """你是一个专业任务规划AI。请将以下任务分解为5-7个有序的关键步骤。 输出要求: 1. 只输出JSON格式,而且JSON格式要正确 2. JSON内容包含一个"steps"数组,每个步骤是一个对象,包含"id"(数字序号)和"description"(用到的步骤,如research_destination) 3. 确保步骤间有逻辑顺序和依赖关系 可以用到的步骤: 1. research_destination - 进行目的地研究 - 收集当地文化、天气和景点信息 2. book_transportation - 预订交通工具 - 选择航班和当地交通方式 3. reserve_accommodation - 安排住宿 - 根据预算选择酒店或民宿 4. plan_activities - 规划每日活动 - 创建景点游览和餐饮计划 5. prepare_documents - 准备旅行文件 - 检查签证、打印预订确认单 6. pack_luggage - 整理行李 - 根据天气准备衣物和必需品 7. calculator - 执行数学计算 8. confirm_arrival - 确认抵达安排 - 联系接机服务和酒店 """), ("human", "{question}") ]) tool_chain = tool_selection_prompt | llm question = '我要去日本东京,帮我安排行程。' print(f"👤 用户问题:{question}") # 1. 工具选择 selection_result = tool_chain.invoke({"question": question}) response_json = selection_result.content.replace('json','').replace('','') print(f"🧠 返回json:{response_json}") explain_and_process(response_json)
def main():
try: print("=== AI旅行规划Agent演示 ===") plan_agents() print("✅ 所有演示完成!") except Exception as e: print(f"❌ 演示过程中出现错误:{str(e)}") print("请检查 API 密钥和网络连接")
if name == “main”:
main()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/275334.html