Facefusion换脸工具常见问题:‘No source face detected‘错误全解析

核心内容摘要

AI写论文测评解析!这4款AI论文写作工具,优劣一目了然!
Miniconda-Python3.10实战:快速安装PyTorch/TensorFlow框架

【超全】基于微信小程序的高校考试模拟系统【包括源码+文档+调试】

本文详细介绍了如何在本地搭建LangChain

x开发环境配置OpenRouter免费模型API并创建第一个具备聊天和工具调用能力的Agent。

通过完整示例代码和详细步骤讲解读者可以学习到Agent的核心组成部分模型、工具、系统提示以及基于LangGraph的新架构调用方式。

文章还提供了两个实践练习帮助读者从抄代码过渡到自主修改为构建更复杂的AI应用打下基础。

本篇的目标很简单在本地搭好 LangChain

x 开发环境撰写本文时最新版本是

1.

3配好一个 LLM 提供商以 OpenRouter 为例使用免费模型写出并跑通你的第一个create_agent示例让它会正常聊天自动决定是否调用工具比如查询天气、做加法整篇看完、照着做一遍大约 3–5 小时内可以完成。

准备开发环境

1 基本要求项目建议配置操作系统macOS / Linux / Windows 10Win 推荐 WSL2Python 版本≥

10建议

11IDEVS Code / PyCharm / 其他你习惯的先确认 Python 版本任意终端$ python3 -V # 或 python -V版本 ≥

10 即可。

推荐用uv管理依赖包括 python 版本也可以直接用 uv 来管理。

以下命令可以查看当前系统安装了哪些 Python 版本$ uv python list

2 安装 LangChain

x 和模型依赖初始化 langchain

x-agent 项目$ uv init langchain

x-agent自动生成如下目录结构同时会自动进行 git initlangchain

x-agent├── main.py├── pyproject.toml└── README.md然后安装 langchain$ uv add langchain langchain-openai python-dotenvUsing CPython

3.

1

14Creating virtual environment at: .venvResolved 44 packages in

63sPrepared 3 packages in

3

43sInstalled 42 packages in 100ms langchain

1.

3 langchain-core

1.

7 langchain-openai

1.

7 langgraph

1.

5 python-dotenv

1.

1 ...注意LangChain

1.

3 使用了全新的基于LangGraph的 Agent 架构与旧版本

x的 API 有较大差异。

如果后续打算用别的模型可以对应再装$ uv add langchain-anthropic$ uv add langchain-google-genai

配置 LLM 提供商 API Key为了方便大家试验这里推荐注册 OpenRouter使用它们的免费模型比如GLM-

5-Air。

1 用环境变量管理 Key推荐在项目根目录创建.env文件不提交到 Git# OpenRouter 配置OPENROUTER_API_KEYyour_openrouter_api_key_here在 Python 里读这个变量import osfrom dotenv import load_dotenvload_dotenv() # 读取 .env 文件OPENROUTER_API_KEY os.getenv(OPENROUTER_API_KEY)如果你暂时不想用.env也可以在终端里直接设置仅当前会话有效$ export OPENROUTER_API_KEYyour_openrouter_api_key_here # macOS / Linux

写第一个 Agent会聊天 查天气新建文件agent

py填入下面的代码。

建议你先整段复制跑通再逐行理解。

from __future__ import annotationsimport osfrom dotenv import load_dotenvfrom langchain.agents import create_agentfrom langchain.tools import toolfrom langchain_openai import ChatOpenAI#

加载环境变量包含 OPENROUTER_API_KEYload_dotenv()# 从环境变量获取 OpenRouter API KeyOPENROUTER_API_KEY os.getenv(OPENROUTER_API_KEY)#

定义一个天气查询工具这里只是模拟tooldef get_current_weather(city: str) - str: 根据城市名返回当前天气信息示例工具内部数据是写死的 city city.lower() if beijing in city or 北京 in city: return 北京当前天气晴-4℃空气质量良。

if shanghai in city or 上海 in city: return 上海当前天气多云2℃有阵风。

return f{city} 当前天气信息暂不可用请稍后再试。

def main(): #

初始化聊天模型 llm ChatOpenAI( modelz-ai/glm-

5-air:free, base_urlhttps://openrouter.ai/api/v1, api_keyOPENROUTER_API_KEY, temperature

2, ) #

准备工具 tools [get_current_weather] #

使用 create_agent 创建 AgentLangChain

1.

3 新 API # 返回 CompiledStateGraph基于 LangGraph agent create_agent( modelllm, toolstools, system_prompt( 你是一个乐于助人的中文 AI 助手。

当用户询问与天气相关的问题时请优先考虑调用相应工具。

), ) #

准备输入状态 user_input 帮我查一下北京的天气然后再用一句话建议我要不要带伞。

#

调用 Agent使用 invoke 方法 # LangChain

x 的状态包含 messages 字段 result agent.invoke({messages: [(user, user_input)]}) #

打印最终回答 # result 是一个状态字典包含 messages 字段 messages result.get(messages, []) if messages: print(【Agent 最终回答】) # 最后一条消息通常是 AI 的回复 last_message messages[-1] print(last_message.content) #

打印中间步骤工具调用轨迹 print(\n【中间步骤工具调用轨迹】) step_count 0 for msg in messages: # 检查是否是 AI 消息且包含工具调用 if msg.type ai and hasattr(msg, tool_calls) and msg.tool_calls: for tool_call in msg.tool_calls: step_count 1 print(f\nStep {step_count}:) print(f 工具名: {tool_call.get(name, unknown)}) print(f 工具参数: {tool_call.get(args, {})}) # 检查是否是工具返回消息 elif msg.type tool: print(f 工具返回: {msg.content}) if step_count 0: print( (本次调用未使用工具)) print(\n【完整消息历史】) for msg in messages: content_preview ( f {msg.type}: {msg.content[:100]}... if len(msg.content) 100 else f {msg.type}: {msg.content} ) print(content_preview)if __name__ __main__: main()运行$ uv run python agent

py预期效果【Agent 最终回答】根据北京当前晴天、-4℃的天气情况建议您不需要带伞但要注意保暖。

【中间步骤工具调用轨迹】Step 1: 工具名: get_current_weather 工具参数: {city: 北京} 工具返回: 北京当前天气晴-4℃空气质量良。

【完整消息历史】 human: 帮我查一下北京的天气然后再用一句话建议我要不要带伞。

ai: 我来帮您查询北京的天气情况。

tool: 北京当前天气晴-4℃空气质量良。

ai: 根据北京当前晴天、-4℃的天气情况建议您不需要带伞但要注意保暖。

到这一步你已经成功调用了 OpenRouter 提供的 GLM-

5-Air 模型用create_agent构建了一个基于LangGraph的标准

x Agent让它自己决定是否要调用get_current_weather工具并基于工具结果给出最终回答能看见中间工具调用轨迹这对后面调试非常重要。

理解一下你刚刚写的这个 Agent轻度拆解不需要完全吃透只要知道大致层次即可后面会在专门的章节展开讲。

1 模型ChatOpenAIllm ChatOpenAI( modelz-ai/glm-

5-air:free, base_urlhttps://openrouter.ai/api/v1, api_keyOPENROUTER_API_KEY, temperature

2,)这是一个统一的模型封装把各种聊天接口包装成一个通用的ChatModel通过base_url参数可以轻松切换到其他提供商当然如果换 Anthropic、Google 的得换类不是 ChatOpenAI换模型时只需要修改model和base_url其他逻辑基本不变。

2 工具tool装饰器tooldef get_current_weather(city: str) - str: 根据城市名返回当前天气信息 ...任何一个普通 Python 函数加上tool装饰器就变成了 Agent 可以看见和调用的工具函数签名参数名、文档字符串会被自动转成模型可理解的工具描述文档字符串很重要模型会根据它来决定何时调用这个工具。

后面你会把数据库查询、RAG 检索、HTTP 请求、业务接口调用都包成类似的工具。

3 Agentcreate_agentagent create_agent( modelllm, toolstools, system_prompt你是一个乐于助人的中文 AI 助手...,)这是 LangChain

x 的核心入口基于LangGraph构建返回一个CompiledStateGraph对象有状态的 DAG 图system_prompt参数直接传入系统指令无需额外创建 Prompt 模板Agent 会自动处理工具调用的决策循环。

重要变更与旧版本

0.

x不同新版本不再需要AgentExecutor使用起来更简洁。

4 调用方式invoke 状态result agent.invoke({messages: [(user, user_input)]})messages result[messages]LangChain

x 使用状态字典作为输入输出格式输入格式{messages: [消息列表]}输出格式{messages: [完整对话历史]}消息类型包括human用户、aiAI 回复、tool工具返回

5 工具调用信息的提取for msg in messages: if msg.type ai and hasattr(msg, tool_calls) and msg.tool_calls: for tool_call in msg.tool_calls: print(f工具名: {tool_call.get(name)}) print(f工具参数: {tool_call.get(args)}) elif msg.type tool: print(f工具返回: {msg.content})AI 消息的tool_calls属性包含工具调用请求工具返回消息的type为toolcontent包含返回结果通过遍历消息历史可以完整还原 Agent 的决策过程。

两个建议练习从抄代码到自己改一改当你已经能把上面的agent

py跑通之后建议你立刻做下面两件事把别人的 Demo转成你自己的东西。

练习 1再加一个「计算器工具」在文件中添加tooldef add_numbers(a: float, b: float) - str: 返回两数之和以字符串形式返回 return str(a b)然后把tools [get_current_weather]改成tools [get_current_weather, add_numbers]修改user_inputuser_input 请先帮我算一下

1

5

3然后顺便告诉我上海的天气。

观察Agent 是否会在一次对话内依次调用两个工具中间步骤打印是否有add_numbers和get_current_weather两个工具调用。

练习 2改写系统指令System Prompt把system_prompt( 你是一个乐于助人的中文 AI 助手。

当用户询问与天气相关的问题时请优先考虑调用相应工具。

),改成类似system_prompt( 你是一位冷静理性的 AI 助手说话简洁只给结论。

如果不确定答案请明确说不确定不要乱编。

),重新运行感受回答语气是否变得更冷静简洁对天气数据库中没有的城市是否会更倾向于说不确定。

这是你后面做「提示词工程」「安全控制」的基础。

本阶段小结到目前为止你已经完成了在本地搭建了一个干净的 LangChain

x 开发环境配置了 OpenRouter API Key使用免费的 GLM-

5-Air 模型用create_agent写出了一个最小可用的 Agent它已经可以和你自然语言对话根据问题内容自己决定要不要调用工具把工具返回的结果融合进最终回答把中间思考路径和工具调用轨迹暴露给你看。

关键要点回顾要点LangChain

1.

3 的变化Agent 创建使用create_agent(model, tools, system_prompt)返回类型返回CompiledStateGraph基于 LangGraph调用方式agent.invoke({messages: [...]})结果格式result[messages]包含完整对话历史工具调用从 AI 消息的tool_calls属性获取从实战角度讲你已经具备了写一个简单实用机器人的基础能力——它可以接第三方 API当成聊天入口 业务工具总调度。

下一步练习建议尝试连接真实的天气 API如和风天气、OpenWeather添加更多工具时间查询、单位转换、数据存储等学习如何添加对话历史实现多轮对话AI时代未来的就业机会在哪里答案就藏在大模型的浪潮里。

从ChatGPT、DeepSeek等日常工具到自然语言处理、计算机视觉、多模态等核心领域技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。

掌握大模型技能就是把握高薪未来。

那么普通人如何抓住大模型风口AI技术的普及对个人能力提出了新的要求在AI时代持续学习和适应新技术变得尤为重要。

无论是企业还是个人都需要不断更新知识体系提升与AI协作的能力以适应不断变化的工作环境。

因此这里给大家整理了一份《2026最新大模型全套学习资源》包括2026最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题、AI产品经理入门到精通等带你从零基础入门到精通快速掌握大模型技术由于篇幅有限有需要的小伙伴可以扫码获取

成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。

这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。

大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。

书籍含电子版PDF

大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。

大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。

大模型行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。

大模型面试题面试不仅是技术的较量更需要充分的准备。

在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。

为什么大家都在学AI大模型随着AI技术的发展企业对人才的需求从“单一技术”转向 “AI行业”双背景。

企业对人才的需求从“单一技术”转向 “AI行业”双背景。

金融AI、制造AI、医疗AI等跨界岗位薪资涨幅达30%-50%。

同时很多人面临优化裁员近期科技巨头英特尔裁员2万人传统岗位不断缩减因此转行AI势在必行这些资料有用吗这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。

本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。

大模型全套学习资料已整理打包有需要的小伙伴可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

17分钟真人录音mp3百度云网盘-17分钟真人录音mp3百度云网盘应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123