使用OpenAI、LangChain、MongoDB构建一个AI agent

LangChain:使用自然语言查询数据库 在LLM模型还没有特别成熟,像现在这样火爆之前,我们对于数据库的传统理解方式依然还是建立在需要先去学习如如何使用SQL脚本来跟Database进行交互。这将需要花费你大量的时间和精力,而且随着时代的发展,数据库版本的升级迭代和新型的数据库产品的诞生,我们都需要快速的去适应。前几年随着云计算的火热,为了适应市场的需求,我们的产品需要去适配各大主流云厂商的DB产品;2022年开始在信创领域,也开始陆续推进国产数据库的适配(如达梦、人大金仓、TBaseOceanBase。 阅读详情

LangChain真是好起来了。24年中的时候用LangChain V2差点把我气死,现在V3用起来开始真香了~

像 ChatGPT、Gemini 和 Claude 这样的大模型已成为企业必不可少的工具。如今,几乎每家公司都希望根据自己的需求或客户群体,开发一款定制化的AI Agent。

这篇文章将重点介绍如何创建一个个性化的助手,这个助手不仅能进行功能调用,还能将对话记录存储在数据库中,实现多会话的连续互动,同时能够执行网页搜索并总结相关信息。

为了更好地组织结构并便于未来扩展功能,使用 Langchain、Langgraph 和 LangSmith 这三个工具,它们会简化整个过程,并提升系统的功能性。Langchain 可以简化流媒体处理、工具调用,并支持多种不同的 LLM。Langgraph 是一个组织工具,帮助我们选择使用的工具,并且让智能助手自主决策路径。LangSmith 则是一个观察工具,它能帮助我们监控向 LLM 提问到最终得到答案的整个过程。

完整代码见仓库:https://github.com/zpillsbury/ai-agent。

资源准备

  • Tavily API key
  • OpenAI API key
  • MongoDB Atlas
  • Langsmith API key

首先,在你的 .env 文件里加上几个关键的环境变量,包括 openai_key、tavily_key 和 mongo_uri。

📝 .env

OPENAPI\_KEY\=OPENAI\_KEY=sk-proj-XXXXXX
TAVILY\_API\_KEY\=tvly-XXXXXXXXXXXXXXXXXXXXXXXX
MONGO\_URI\=mongodb+srvXXXXXXXXXXXXXXXXXXXXXXXXXXX

LANGCHAIN\_TRACING\_V2\=true
LANGCHAIN\_ENDPOINT\=https://api.smith.langchain.com
LANGCHAIN\_API\_KEY\=lsv2\_pt\_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\_xxxxxxxxxx
LANGCHAIN\_PROJECT\=project-name

然后,把这些Key和 URI 都配置到你的设置文件里,确保 langsmith、OpenAI key、Tavily key和 Mongo URI 一个都不少。

📝 app/utilities/settings.py

from pydantic import SecretStr
from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
    openai_key: SecretStr
    tavily_api_key: str
    mongo_uri: SecretStr


    # LangSmith
    langchain_tracing_v2: bool = True
    langchain_endpoint: str = "https://api.smith.langchain.com"
    langchain_project: str = "ai-agent"
    langchain_api_key: str

    model_config = SettingsConfigDict(env_file=".env", extra="ignore")


settings = Settings()

使用设置中的API key设置 OpenAI 客户端。

📝 app/main.py

from langchain_openai import ChatOpenAI

from .utilities.settings import settings

llm = ChatOpenAI(
    openai_api_key=settings.openai_key,
    model_name="gpt-4o-mini",
    max_retries=2,
)

Langgraph

为了让聊天机器人的各个部分能够顺畅交流,需要设置一个全局“状态”变量,这样数据就能在各个节点间流通了。用 LLM 生成消息之后,通过 langgraph 的 add_messages 函数,把这些消息加入到聊天机器人的记忆里。

📝 app/main.py

from typing import Annotated, TypedDict

from langchain_core.messages import BaseMessage
from langgraph.graph import END, START, StateGraph
from langgraph.graph.message import add_messages
from langgraph.graph.state import CompiledStateGraph


class State(TypedDict):
    messages: Annotated[list[BaseMessage], add_messages]

在 langgraph 中,每个节点其实就是一个函数。我们现在要做一个新的 chatbot 函数,它会通过 llm.ainvoke 去调用 OpenAI,把当前的消息状态传过去。OpenAI 会给我们返回一条新的 AI 消息,然后我们就把这个新消息更新到状态里。通过上一步配置的 add_messages 函数,新消息会自动加入到现有的消息队列中。

最后提一下,langgraph 提供了同步和异步两种方法。如果你想要异步处理,只需在方法名前加个 a。这次我们选择异步的 ainvoke,而不是同步的 invoke。

📝 app/main.py

async def chatbot(state: State) -> State:
    """
    Chatbot
    """
    response_message = await llm.ainvoke(state["messages"])

    return {"messages": [response_message]}

现在,我们要用 add_node 把新写的函数加入到流程图里。在这个图中,节点之间的连线就是所谓的“边”

接下来,要用 add_edge 把图的起点 START 和聊天机器人节点连起来。最后用 graph_builder.compile 来编译这个图表。不编译的话,这个图表是没法用的。

其实这就是代码话的流程编排,很多AI WebUI都有。

📝 app/main.py

async def get_graph() -> CompiledStateGraph:    """    Get the graph    """    graph_builder = StateGraph(State)    graph_builder.add_node("chatbot", chatbot)    graph_builder.add_edge(START, "chatbot")    graph_builder.add_edge("chatbot", END)    graph = graph_builder.compile()    return graph

目前流程图长这样:

img图1 流程图

然后让我们来编写一个新异步函数 run_graph,通过 graph.astream(同步的话就用 stream)来启动我们精心编译的图。这个函数会激活“chatbot”节点,也就是之前定义的 chatbot 函数。

首先,它会放入一个System Prompt,再加上用户提出的问题,这样就构成了我们的对话状态。这些信息会被发送到 OpenAI,AI会回一条消息,我们的函数则会把这个回复加入到对话状态中。

在图的循环中,我们可以随时查看事件变量,了解当前的对话状态。我们会从这些事件中挖掘出 value,再从这个 value 中提取出最后一条消息的精华,最后把这份精华传回给用户。

至于系统提示,它就像是为 AI 助手提供了一份“情报”,让它的搜索更加精确。因为 LLM 的训练数据有截止时间,所以它可能会更擅长挖掘历史资料,而不是最新的知识。

📝 app/main.py

async def get_graph() -> CompiledStateGraph:
    """
    Get the graph
    """
    graph_builder = StateGraph(State)

    graph_builder.add_node("chatbot", chatbot)

    graph_builder.add_edge(START, "chatbot")
    graph_builder.add_edge("chatbot", END)

    graph = graph_builder.compile()

    return graph

接下来,写一个新异步函数 main,这个函数的核心任务就是接收用户的输入。同时,加入一个循环语句,它的作用是监听用户的输入,一旦用户键入(quit、exit 或 q),聊天就会在终端优雅地结束。

📝 app/main.py

from datetime import datetime, timezone
from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage

now = datetime.now(timezone.utc)

system_prompt = f"""
You are an AI assistant helping an user.

Current Date: {now}
"""

asyncdef run_graph(question: str) -> None:
    """
    Run the graph
    """
    asyncfor event in graph.astream(
        {
            "messages": [
                SystemMessage(content=system_prompt),
                HumanMessage(content=question),
            ]
        }
    ):
        for value in event.values():
            print(value["messages"][-1].content)

    returnNone

工具调用

现在,我们要利用 .env 和 .settings 文件中的 tavily_api_key。通过 TavilySearchResults,我们的 AI 助手就能在网上进行搜索了。这些搜索工具会被集成到 tools 中,方便未来我们随时扩充工具箱。然后,我们通过 llm_with_tools = llm.bind_tools 这行代码,将工具列表绑定到 AI 助手身上。最后,记得把代码中所有用到 llm 的地方,都替换成 llm_with_tools,这样一来,AI 助手就能使用这些工具了。

📝 app/main.py

async def main() -> None:
    """
    AI Agent
    """
    whileTrue:
        question = input("q: ")
        if question.lower() in ["quit", "exit", "q"]:
            print("Goodbye!")
            break

        await run_graph(question)

    returnNone


if __name__ == "__main__":
    anyio.run(main)

下一步,加入一个 tool_node,这个节点的作用是激活调用 AI 消息的工具。设置一个 add_conditional_edge,这个特殊的边可以让 AI 助手根据不同的需求,导向不同的节点。它会先判断是否需要进行工具调用,如果不需要,那么流程就会直接导向 END 节点,结束这次交互。

📝 app/main.py

from langchain_community.tools.tavily_search import TavilySearchResults


web_search = TavilySearchResults(max_results=2)
tools = [web_search]

llm = ChatOpenAI(
    openai_api_key=settings.openai_key,
    model_name="gpt-4o-mini",
    max_retries=2,
)

llm_with_tools = llm.bind_tools(tools)

asyncdef chatbot(state: State) -> State:
    """
    Chatbot
    """
    response_message = await llm_with_tools.ainvoke(state["messages"])

    return {"messages": [response_message]}

存储对话数据

接下来,利用 .env 和 .settings 文件中的 mongo_uri。首先,在代码的顶部加入 async_mongodb_client。然后,我们会在 get_graph 函数中设置一个检查点,它的作用是将记忆存储到 mongoDB。注意,这个操作需要放在异步函数里面才能正常执行哦。

📝 app/main.py

async def get_graph() -> CompiledStateGraph:
    """
    Get the graph
    """
    graph_builder = StateGraph(State)

    graph_builder.add_node("chatbot", chatbot)

    tool_node = ToolNode(tools=tools)
    graph_builder.add_node("tools", tool_node)

    graph_builder.add_edge(START, "chatbot")

    graph_builder.add_conditional_edges("chatbot", tools_condition)
    graph_builder.add_edge("tools", "chatbot")

    graph = graph_builder.compile()

    return graph

现在,利用 MongoDB 来设置 thread_id,这样做可以保存不同聊天记录中的消息。这个功能很强大,它让助手能够跨多个聊天 session 记住之前的对话内容。而且,如果想要为不同的聊天创建独立的记录,只需要使用不同的 thread_id 就可以轻松实现。

📝 app/main.py

from typing import Annotated, Any, TypedDict
from langchain_core.runnables import RunnableConfig
from langgraph.checkpoint.mongodb.aio import AsyncMongoDBSaver
from motor.motor_asyncio import AsyncIOMotorClient

async_mongodb_client: AsyncIOMotorClient[Any] = AsyncIOMotorClient(
    settings.mongo_uri.get_secret_value()


asyncdef get_graph() -> CompiledStateGraph:
    """
    Get the graph
    """
    checkpointer = AsyncMongoDBSaver(
        client=async_mongodb_client,
        db_name="ai",
        checkpoint_collection_name="checkpoints",
        writes_collection_name="checkpoint_writes",
    )

    graph_builder = StateGraph(State)

    graph_builder.add_node("chatbot", chatbot)

    tool_node = ToolNode(tools=tools)
    graph_builder.add_node("tools", tool_node)

    graph_builder.add_edge(START, "chatbot")

    graph_builder.add_conditional_edges("chatbot", tools_condition)
    graph_builder.add_edge("tools", "chatbot")

    graph = graph_builder.compile(checkpointer=checkpointer)

    return graph

现在,可以执行脚本,看看运行结果。由于输入的是当前日期,所以它能展示出团队最新的动态和信息。

from langchain_core.runnables import RunnableConfig


asyncdef run_graph(config: RunnableConfig, question: str) -> None:
    """
    Run the graph
    """
    graph = await get_graph()

    asyncfor event in graph.astream(
        {
            "messages": [
                SystemMessage(content=system_prompt),
                HumanMessage(content=question),
            ]
        },
        config=config,
        stream_mode="values",
    ):
        event["messages"][-1].pretty_print()

    returnNone


asyncdef main() -> None:
    """
    AI Agent
    """
    config = RunnableConfig(configurable={"thread_id": 1})

    whileTrue:
        question = input("q: ")
        if question.lower() in ["quit", "exit", "q"]:
            print("Goodbye!")
            break

        await run_graph(config=config, question=question)

    returnNone

可以在你的 langsmith 项目中逐步查看运行过程。

在这里插入图片描述
图2 Langsmith 可视化Trace

这就是打造一个能够自主决定是否需要调用工具、能够在网上查找信息,并且能够为每个对话线程保存信息,从而记住之前对话的 AI 助手的基本步骤。因为我们用的是 langchain,所以以后想要加入流媒体处理、支持多种模型和其他 AI 模型(llms)的功能,也会变得相当简单。

​

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

构建LangChain应用程序的示例代码:47、使用MongoDB和LangChain为RAG应用添加语义缓存和记忆功能 本文介绍了如何在RAG(检索增强生成)应用中使用MongoDB的新功能MongoDBCache和MongoDBChatMessageHistory。文章详细说明了安装必要库、设置先决条件、下载并分析数据集、创建简单的RAG链、添加聊天历史功能,以及使用语义缓存来加速响应等步骤。这些技术可以显著提高RAG应用的性能和用户体验。 阅读详情

相关推荐

使用 MongoDB Atlas 实现向量搜索:LangChain 实践指南

MongoDB Atlas 是一个完全托管的云数据库,支持 AWS、Azure 和 GCP。最新版本支持原生的向量搜索以及全文搜索(BM25),使得在 MongoDB 文档数据上执行近似最近邻搜索成为可能。这篇文章将介绍如何利用包在 LangChain 中使用 MongoDB Atlas 向量搜索。

qahaj的博客 577

LangGraph--CompiledStateGraph

我按照使用频率和逻辑把所有方法分成五类。类别方法用途执行完整执行一次流式边执行边输出事件更细粒度事件工具list_tools查看工具状态get_state获取当前状态。

zkw54334的博客 860

SpringBoot集成LangChain4j构建生产级AI Agent

AI Agent 是大模型从单次调用迈向自主决策的关键范式,其核心在于会话管理、工具编排与状态持久化。LangChain4j 作为 Java 生态原生的 LangChain 实现,将 LLM 能力抽象为可注入、可配置、可监控的 Spring Bean,天然兼容自动装配、事务管理与 Actuator 指标体系。结合 SpringBoot 的约定优于配置理念,开发者能复用熟悉的 @Service、@Autowired 和 starter 机制,快速构建具备记忆能力(ChatMemory)、多模型切换(OpenA

weixin_30562507的博客 335

Agent开发框架-LangGraph

LangGraph 是一个用于构建有状态和多角色的 LLM Apps 的开源库,常用于创建单Agent和多Agent的工作流。

weixin_44907479的博客 1258

SpringBoot集成LangChain4j构建企业级AI Agent工程实践

AI Agent 已从概念验证走向生产落地,其核心挑战在于如何将大语言模型能力深度融入现有 Java 工程体系。本文围绕 SpringBoot 与 LangChain4j 的协同机制展开,解析依赖管理(BOM)、配置驱动(ConfigurationProperties)、Bean 编排(@AiService + AOP)及存储扩展(ChatMemoryStore SPI)四大技术原理,阐明为何成熟的 Spring 生态能为 AI 组件提供生命周期治理、安全密钥注入、多模型热切换与高并发会话隔离等关键能力。面

weixin_34176694的博客 374

构建AI Agent可观测性实验平台:从黑盒调试到白盒工程化

在AI应用开发中,可观测性是实现系统可靠性和可维护性的核心工程概念。它通过日志、指标和追踪三大支柱,让开发者能够洞察软件内部状态与行为逻辑。对于日益复杂的AI Agent系统,可观测性技术价值尤为突出,它能够将Agent的决策过程、工具调用链和状态演变从黑盒变为白盒,从而支持高效的调试、性能优化与成本控制。这一理念在AI Agent开发领域的具体应用,便是构建一个专注于可观测性和可组装性的实验平台,即Agent Harness。该平台通过非侵入式的数据采集,为基于LangChain等框架构建的Agent提供

weixin_34248487的博客 444

使用OpenAI、LangChain、MongoDB构建一个AI agent✨

LangChain真是好起来了。24年中的时候用LangChain V2差点把我气死,现在V3用起来开始真香了~像 ChatGPT、Gemini 和 Claude 这样的大模型已成为企业必不可少的工具。如今,几乎每家公司都希望根据自己的需求或客户群体,开发一款定制化的AI Agent。这篇文章将重点介绍如何创建一个个性化的助手,这个助手不仅能进行功能调用,还能将对话记录存储在数据库中,实现多会话的连续互动,同时能够执行网页搜索并总结相关信息。

十一月廿七风雨大作 6447

AI Agent开发实战:从零构建自主智能体,实现自动化与决策支持

Agentic AI 正在成为 AI 领域的新焦点。它不再是简单地生成文本或图像,而是能够自主规划、决策并执行复杂任务的智能体。如果你对如何让 AI 真正“动起来”去完成一个目标感兴趣,那么这篇文章就是为你准备的。我们将从最基础的概念入手,直接进入实战,通过一个具体的框架来搭建和运行你的第一个 AI Agent。本文的重点不是空谈理论,而是让你能快速上手,理解 Agent 的核心工作流程,并能在自己的开发环境中复现。无论你是想了解 Agentic AI 的开发者,还是希望将其应用于自动化流程的技术人员,都能

weixin_33841503的博客 409

从零构建AI Agent:基于LangChain与ReAct框架的智能研究助手实践

在实际 AI 应用开发中,我们经常面临一个困境:大模型本身很强大,能理解问题也能生成答案,但它就像一个知识渊博但“手无寸铁”的专家,无法主动查询信息、调用接口或执行计算。这就是 AI Agent 要解决的问题——它让大模型从一个“对话者”转变为一个能自主规划、使用工具、完成复杂任务的“行动者”。然而,很多开发者对 Agent 的理解停留在概念层面,面对 LangChain 这类框架时,往往被其复杂的抽象和快速迭代的版本所困扰,不知从何下手。 本文旨在彻底改变这一状况。我们将从一个最核心的机制——ReAct

weixin_34082789的博客 412

AI Agent实战:从零构建可落地的本地化智能体工作流

AI Agent并非高级Prompt工程,而是具备目标导向、环境感知、工具调用与执行反馈四大原子能力的自主系统。其核心原理在于将人类SOP转化为LLM可解析的结构化函数调用序列,通过function calling实现意图识别与任务规划,再依托本地Python工具链完成可控执行。这种设计显著提升响应效率(实测1.8秒闭环)、保障数据主权,并天然适配内网OA、财务报销、销售分析等强流程型业务场景。本文聚焦‘小而准’的MVC实现路径,以Excel数据分析+PDF周报生成为例,详解如何绕过LangChain抽象陷

diyudong4681的博客 441

华为防火墙USG6000系列多ISP上网(通过WEB界面设置)

华为防火墙多ISP上网,内网分区上网。内网多网段不同上网方式。

daxihe880的博客 1万+

SpringBoot集成LangChain4j构建生产级AI Agent服务骨架

AI Agent是让大模型具备工具调用、记忆管理和上下文感知能力的核心范式,其本质是将自然语言指令转化为结构化决策与服务编排。在Java技术栈中,LangChain4j为SpringBoot提供了轻量、可嵌入的Agent开发支持,但真正落地需突破依赖注入、会话隔离、工具安全边界与可观测性等工程瓶颈。本文聚焦于SpringBoot 3.x + JDK17环境下,如何基于LangChain4j构建可部署、可调试、可监控的最小可行Agent闭环——涵盖多环境模型切换、MongoDB持久化会话、@Tool工程化封装

weixin_33709364的博客 410

k-shape时间序列聚类实战:从理论到tslearn实现

本文深入探讨了k-shape时间序列聚类算法,从核心原理到tslearn库的实战应用。k-shape通过标准化互相关系数衡量序列形状相似性,专注于识别波动模式而非绝对数值。文章详细介绍了算法流程、Python环境搭建、数据预处理、最佳K值确定方法,并通过完整代码示例展示了模型训练与结果可视化,帮助读者掌握这一强大的“形状捕手”工具。

weixin_29061465的博客 176

企业AI Agent平台选型指南:NocoBase与LangChain对比

AI Agent技术作为企业数字化转型的核心组件,通过自动化流程和智能决策显著提升运营效率。其工作原理基于机器学习模型与业务系统的深度集成,在数据安全合规的前提下实现业务流程优化。从技术价值看,优秀的AI Agent平台需要平衡开发灵活性与企业级功能完备性,典型应用场景包括智能审批、客户服务自动化等。针对当前热门的开源解决方案,NocoBase凭借可视化无代码特性成为企业快速落地的首选,而LangChain则因其完整的LLM工具链受到开发者青睐。本文通过8个维度的深度对比,结合GDPR合规要求和RBAC权限

weixin_30552811的博客 331

基于MOS的防反接电路

防反接电路一般用于电源入口处,在电源反接时,保证电源入口之后的电路不会受到损害。一般在电源电流较小、对1V左右的压降不敏感时可以使用二极管进行防反接。防反接的形式有直接在正极串联二极管(如图1),或使用整流桥的方式(如图2),但这两种方式均存在:1、存在二极管的管压降;2、过大电流时,二极管消耗的功率大,发热严重。这两个问题。 图 1 二极管防反接电路 图 2 整流管防反接电路 1、基于NMO...

qq_42682826的博客 2万+

禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结

本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。

table的专栏 945

LangChain实战:从零构建AI智能代理的完整指南

在人工智能应用开发领域,大语言模型(LLM)的兴起催生了新的工程范式。其核心原理在于将非确定性的语言模型与确定性的外部工具和数据源进行有效连接,从而构建出能够自主执行复杂任务的智能系统。这一技术价值在于解决了LLM从“能聊天”到“能干活”的关键跨越,使得AI能够可靠地接入搜索、数据库、API等外部能力,实现流程自动化与决策支持。其典型应用场景包括企业知识库问答、自动化工作流助手以及复杂决策支持系统等。本文聚焦于**LangChain**这一开源框架,它通过提供链(Chains)、代理(Agents)等核心抽

weixin_34375251的博客 297

CAN XL和10Base-T1S全对比:在区域架构中如何选择最适合的车载通信协议?

本文深入对比了CAN XL和10Base-T1S在车载网络架构中的性能差异,通过实测数据和典型应用场景分析,为区域架构设计提供选型指南。重点探讨了带宽、延迟、成本等关键指标,帮助工程师在ADAS传感器部署和车身控制网络优化中做出明智选择。

pear55的博客 597

LangChain入门指南:快速构建AI应用的五大核心组件

语言模型应用开发中,框架工具链是提升效率的关键技术。LangChain作为专为AI应用设计的开发框架,通过标准化模型接入、提示工程、记忆管理等核心组件,将复杂流程封装为可复用模块。其核心原理是构建语言模型与其他系统组件的连接层,支持OpenAI GPT系列、Claude等主流模型,开发者可通过参数调节控制输出特性(如temperature参数影响创造性)。技术价值体现在开发效率提升3-5倍,已被Airbnb等企业用于智能客服、知识问答等场景。本文以天气查询机器人为例,演示如何通过Agent组装、工具链搭建实

weixin_30680385的博客 475

告别Modern Standby!Win10/11强制S3睡眠的终极指南(含BIOS设置避坑)

本文是针对Windows 10/11用户因Modern Standby(S0低电量待机)导致睡眠耗电、发热问题的终极解决方案。文章详细对比了Modern Standby与传统S3睡眠(Suspend to RAM)的本质区别,并提供了从系统诊断、注册表修改、BIOS/UEFI设置避坑到驱动优化的完整步骤,旨在帮助用户强制启用稳定、省电的S3睡眠模式,彻底告别睡眠噩梦。

n7o8p的博客 805

基于STM32-XPC仿真平台的构架

基于STM32-XPC仿真平台的构架 xPC Target是MathWorks公司的MATLAB提供的一个基于RTW(Real-Time Workshop)体系框架的附加产品,是一种用于产品原型开发、测试和配置实时系统的PC机解决途径。xPC目标实时仿真系统能够使开发者在产品开发前进行产品原型的快速实现、测试和评估,是 Simulink 工具集下用于产品原型开发设计测试集于一体的工具箱。

sujianbonwpu的博客 4489

LangChain框架解析:AI代理开发实战指南

大语言模型(LLM)应用开发中,AI代理(Agent)技术正成为连接模型能力与业务系统的关键桥梁。其核心原理是通过工具调用(Tool Calling)和链式推理(Chain-of-Thought)机制,将大模型的认知能力与外部系统对接。LangChain作为当前最流行的开源框架,通过标准化接口显著降低了开发门槛,支持从简单问答到复杂业务流程的各类场景。特别是在电商客服、智能助手等需要记忆管理和多步交互的领域,其预置的Chain模板和Agent架构能快速实现意图识别、知识检索、决策执行等核心功能。企业级应用中

chengyixian7877的博客 425

大疆视觉算法面试,手推极线几何这关刷掉了一半人

摘要:大疆机器视觉算法工程师面试重点考察目标检测工程优化、深度估计几何原理和视觉SLAM全流程。目标检测侧重模型压缩和部署优化,需掌握知识蒸馏、量化及算子融合;深度估计要求推导双目几何并理解单目深度恢复方法;视觉SLAM需熟悉前后端流程及ORB-SLAM3/VINS-Mono区别。面试常要求手推PnP等公式,注重实践能力。准备需重点练习公式推导和代码实现,掌握工程落地细节。

郑伟强dev的专栏 194

AI Agent网页交互实践:基于Playwright与OpenAI的自动化方案

网页自动化是软件工程中实现流程自动化、数据采集和界面测试的核心技术,其原理在于通过程序模拟用户操作浏览器,完成导航、点击、输入等交互。这项技术的价值在于能够高效处理动态渲染页面和复杂交互流程,克服传统爬虫的局限。在AI Agent领域,为智能体赋予网页交互能力,能极大扩展其应用场景,使其从封闭对话系统升级为能主动在开放互联网环境中执行任务的智能助手。本文聚焦于如何利用Playwright等浏览器自动化框架,结合OpenAI等大语言模型,构建稳定可靠的AI网页交互智能体,解决元素定位、状态感知和异常处理等工程

weixin_34228387的博客 304

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

AI Agent开发框架推荐:主流框架对比与最佳实践选型指南

AI Agent 开发领域,可基于成熟框架快速构建复杂应用的及如下。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 1029

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LangChain Agent:AI如何重构智能应用开发流程

而使用LangChain后,只需要定义好文档加载器链,Agent就能自动选择合适的解析方式。LangChain内置的问答链配合OpenAI的embedding,只需要定义好检索器,问答逻辑就自动生成了。这个项目需要处理多种格式的文档,还要实现智能问答和数据存储,如果用传统方式开发,光是处理各种边界条件就够头疼的。遇到问题时,平台的AI对话功能可以直接询问技术细节,比查文档快多了。我实际使用下来,发现它的AI辅助功能确实能大幅提升开发效率,而且一键部署特别方便,不用操心服务器配置的问题。

SilverfoxOwl19的博客 872

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 手把手教你使用 BERT 进行文本分类——代码逐行注释讲解
下一篇: 大模型入门书籍 | 《大模型基础》开源分享!
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值