从无代码到完全控制:我如何使用 LangGraph 和 Whisper 重建 ElevenLabs 的人工智能

ElevenLabs AI语音合成工具的应用与实践 ElevenLabs致力于让内容能够用任何语言和语音被广泛接受。通过其先进的AI技术,它们能够生成数百种新旧声音的语音,这对全球化内容的提供是非常有益的。特别是对于需要多语言内容生成的应用场景,ElevenLabs无疑是一个重要的选择。我个人一直在使用ElevenLabs提供的语音合成解决方案,它的简单易用真的让人惊叹。此外,在此基础上进一步进行语音效果的优化和自定义,能够大幅提升用户体验。对于开发者来说,这无疑是一个非常具备实践意义的工具。今天的技术分享就到这里,希望对大家有帮助。 阅读详情

在探索 ElevenLabs 的 AI 代理功能并亲身体验了我可以多快构建一个功能齐全的语音机器人而无需编写大量代码后,我不禁想——如果我从头开始构建它会怎样?在 我之前的文章 中,我分享了如何使用 ElevenLabs 和 Make.com 创建一个能够轻松安排会议和处理客户互动的语音机器人。无代码的方法取得了令人印象深刻的结果,但作为一个代码爱好者,我想要更多的控制和自定义。

这次,我决定走一条不同的道路——使用 LangGraph、ElevenLabs 的 API 和 Whisper 从头重建 AI 语音机器人。我的目标是更好地理解其内部工作原理,微调其性能,并探索现成解决方案无法提供的新可能性。在这篇文章中,我不仅会带你深入了解构建我自己版本的 ElevenLabs AI 代理的幕后,还会为你提供一个清晰的框架,以便你自己重建一个语音机器人。在这个过程中,我会分享我面临的挑战、我做出的决策,以及自定义编码解决方案的灵活性如何解锁无尽的可能性。

AI语音机器人构建模块

为了使这个项目成为现实,我依赖于三个构成AI语音机器人基础的关键组件:

null

语音转文本:Whisper

Whisper,由OpenAI开发,是一种先进的语音转文本模型,以其准确性和多语言能力而闻名。它高效地将口语转换为文本,使其成为处理高精度语音输入的理想解决方案。其深度学习能力使其能够理解各种口音和方言,确保在不同人群中提供流畅的用户体验。在这个项目中,我利用了OpenAI的Python SDK来处理音频输入:

openai_client.audio.transcriptions.create(
   model="whisper-1", 
   file=audio_bytes,
)
对话式人工智能代理:LangGraph

LangGraph,由LangChain开发,是AI语音机器人的核心,能够创建具有工具调用和记忆功能的结构化互动对话。它允许管理复杂的对话流程和决策过程,确保机器人能够智能地响应广泛的用户输入。通过LangGraph,我能够设计出高度动态和适应性的对话体验,能够记住之前的互动并有效利用各种工具来增强功能。

文本转语音:ElevenLabs API

ElevenLabs API 驱动文本转语音组件,提供自然且逼真的语音响应。该组件通过提供类人语音输出来增强用户互动,使对话更加引人入胜和直观。在这个项目中,我利用了 ElevenLabs 的 Python SDK,使用 eleven_turbo_v2_5 模型将文本生成语音:

elevenlabs_client.text_to_speech.convert(
    voice_id="YUdpWWny7k5yb4QCeweX",
    output_format="mp3_22050_32",
    text=cleaned_text,
    model_id="eleven_turbo_v2_5", 
    voice_settings=VoiceSettings(
        stability=0.0,
        similarity_boost=1.0,
        style=0.0,
        use_speaker_boost=True,
    ),
)

通过这些组件,我能够从零开始创建一个高度响应和智能的语音机器人。

分步构建 AI 语音机器人

现在我们已经涵盖了基本构建模块,让我们深入实施。我们将首先创建一个 使用 LangGraph 的基本对话聊天机器人,具备记忆功能和获取当前日期和时间的工具。聊天机器人功能正常后,我们将通过添加两个额外的节点来增强它——一个用于 使用 Whisper 处理传入音频到文本,另一个用于 使用 ElevenLabs API 将聊天机器人的响应转换为音频。这种分步方法将提供坚实的基础,同时逐步增强语音机器人的功能。

第一步:构建基本对话聊天机器人

首先,我们将创建一个简单的聊天机器人,能够记住之前的消息并获取当前的日期和时间。这将涉及定义状态管理系统,集成一个从 API 获取日期和时间的工具,以及使用 LangGraph 构建对话流程。

null

定义状态管理系统

我们首先定义聊天机器人的状态,以跟踪对话消息。

from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph.message import add_messages

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

State 类使用注释列表来存储消息,并在新消息到达时附加它们。

实现记忆功能

接下来,我们引入记忆功能,以存储和检索之前的消息,确保对话的连续性。

from langgraph.checkpoint.memory import MemorySaver

memory = MemorySaver()

MemorySaver 组件帮助在交互过程中持久化聊天机器人的状态。

定义工具

接下来,我们定义一个工具,从 API 获取当前的日期和时间。

from langchain_core.tools import tool
import requests

@tool
def get_date_and_time() -> dict:
    """
    Call tool to fetch the current date and time from an API.
    """
    try:
        response = requests.get("https://timeapi.io/api/Time/current/zone?timeZone=Europe/Brussels")
        response.raise_for_status()
        data = response.json()
        return {"date_time": data["dateTime"], "timezone": data["timeZone"]}
    except requests.RequestException as e:
        return {"error": str(e)}

这个函数获取当前的日期和时间,并以 JSON 格式返回。

设置语言模型

我们现在设置语言模型,并将其与定义的工具集成,使聊天机器人能够在其响应中调用外部工具。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([get_date_and_time])

构建对话流程

使用 LangGraph,我们现在构建一个简单的对话流程,仅依赖一个“聊天机器人”节点,该节点可以访问 get_date_and_time 工具。

from langgraph.graph import StateGraph
from langchain_core.runnables import RunnableConfig

def chatbot(state: State, config: RunnableConfig):
    return {"messages": [llm_with_tools.invoke(state["messages"])]}

### initiate the graph
graph_builder = StateGraph(State)
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_edge("chatbot", "chatbot")
graph = graph_builder.compile(checkpointer=memory)

这个设置允许聊天机器人处理消息,将其存储在记忆中,并做出相应的响应。

第2步:增强聊天机器人语音功能

接下来,我们将向聊天机器人工作流程中添加两个额外的节点——一个用于使用Whisper将输入音频处理为文本,另一个用于使用ElevenLabs API将文本响应转换为音频。这一增强将使聊天机器人转变为一个功能完善的语音助手。

null

输入:捕获音频

为了提供无缝且互动的体验,聊天机器人必须能够准确地倾听和理解用户。这就是OpenAI的Whisper模型发挥作用的地方,使聊天机器人能够有效地捕获和转录口语。

语音转文本过程包括几个关键步骤:

音频捕获: 使用sounddevice库,聊天机器人监听用户麦克风的语音输入。当检测到声音时,录音过程自动开始,并在一段时间的静默后停止。

处理音频输入: 配置多个参数以优化语音检测:

  • • SAMPLE_RATE:定义采样率以确保足够的语音捕获。
  • • THRESHOLD:设置检测语音活动的最低音频水平。
  • • SILENCE_DURATION:确定在停止录音之前应保持多长时间的静默。
  • • CHUNK_SIZE:指定处理的音频块大小。

语音识别: 一旦录音完成,使用OpenAI的Whisper API对音频进行处理并转录为文本,该API支持高精度的多语言语音识别。

import io
import threading
import numpy as np
import sounddevice as sd
from scipy.io.wavfile import write

from openai import OpenAI

from langgraph.graph import  MessagesState, HumanMessage

### Initialize OpenAI client
openai_client = OpenAI()


### Audio settings
SAMPLE_RATE = 16000# Adequate for human voice frequency
THRESHOLD = 500# Silence detection threshold (adjust if needed)
SILENCE_DURATION = 1.5# Duration (seconds) of silence before stopping
CHUNK_SIZE = 1024# Number of frames per audio chunk

defrecord_audio_until_silence(state: MessagesState):
    """Waits for the user to start speaking, records the audio, and stops after detecting silence."""

    audio_data = []  # List to store audio chunks
    silent_chunks = 0# Counter for silent chunks
    started_recording = False# Flag to track if recording has started

    defrecord_audio():
        """Continuously records audio, waiting for the user to start speaking."""
        nonlocal silent_chunks, audio_data, started_recording

        with sd.InputStream(samplerate=SAMPLE_RATE, channels=1, dtype='int16') as stream:
            print("Waiting for you to start speaking...")

            # Keep waiting indefinitely for the user to start talking
            whilenot started_recording:
                audio_chunk, _ = stream.read(CHUNK_SIZE)
                audio_array = np.frombuffer(audio_chunk, dtype=np.int16)

                # Check if there is voice input
                if np.abs(audio_array).max() > THRESHOLD:
                    started_recording = True
                    print("Voice detected. Recording started.")
                    audio_data.append(audio_chunk)
                    break

            # Start recording once voice is detected
            whileTrue:
                audio_chunk, _ = stream.read(CHUNK_SIZE)
                audio_data.append(audio_chunk)
                audio_array = np.frombuffer(audio_chunk, dtype=np.int16)

                # Detect silence after user has finished speaking
                if np.abs(audio_array).max() < THRESHOLD:
                    silent_chunks += 1
                else:
                    silent_chunks = 0# Reset if sound is detected

                # Stop if silence is detected for the specified duration
                if silent_chunks > (SILENCE_DURATION * SAMPLE_RATE / CHUNK_SIZE):
                    print("Silence detected. Stopping recording.")
                    break

    # Start recording in a separate thread
    recording_thread = threading.Thread(target=record_audio)
    recording_thread.start()
    recording_thread.join()

    # Stack all audio chunks into a single NumPy array and write to file
    audio_data = np.concatenate(audio_data, axis=0)

    # Convert to WAV format in-memory
    audio_bytes = io.BytesIO()
    write(audio_bytes, SAMPLE_RATE, audio_data)  # Use scipy's write function to save to BytesIO
    audio_bytes.seek(0)  # Go to the start of the BytesIO buffer
    audio_bytes.name = "audio.wav"# Set a filename for the in-memory file

    # Transcribe via Whisper
    transcription = openai_client.audio.transcriptions.create(
       model="whisper-1", 
       file=audio_bytes,
       language='nl'
    )

    # Print the transcription
    print("Here is the transcription:", transcription.text)

    # Write to messages
    return {"messages": [HumanMessage(content=transcription.text)]}

输出:让聊天机器人拥有语音功能

为了提供真正引人入胜的用户体验,聊天机器人需要以自然和类人化的方式进行交流。这就是ElevenLabs强大的文本转语音(TTS)功能发挥作用的地方,使我们能够无缝地将聊天机器人的响应转换为生动的音频。

该过程涉及几个关键步骤:

  • • 初始化ElevenLabs客户端: 设置ElevenLabs API客户端并配置API密钥,以便与文本转语音服务进行通信。
  • • 处理聊天机器人响应: 在将文本转换为语音之前,清理聊天机器人的响应,以去除可能干扰音频输出的任何格式化伪影。
  • • 将文本转换为语音: 将清理后的文本发送到ElevenLabs API,利用高级语音设置控制稳定性、相似性增强和发音风格等方面。
  • • 播放生成的音频: 一旦TTS转换完成,音频响应将回放给用户,确保流畅自然的对话流程。

以下是文本转语音转换的实现方式:

import os
from elevenlabs import play, VoiceSettings
from elevenlabs.client import ElevenLabs
from langgraph.graph import  MessagesState


### Initialize ElevenLabs client
elevenlabs_client = ElevenLabs(api_key=os.getenv("ELEVEN_API_KEY"))

defplay_audio(state: MessagesState):
    """Plays the audio response from the remote graph with ElevenLabs."""

    # Response from the agent
    response = state['messages'][-1]

    # Prepare text by replacing ** with empty strings
    cleaned_text = response.content.replace("**", "")

    # Call text_to_speech API with turbo model for low latency
    response = elevenlabs_client.text_to_speech.convert(
        voice_id="YUdpWWny7k5yb4QCeweX",  # Adam pre-made voice
        output_format="mp3_22050_32",
        text=cleaned_text,
        model_id="eleven_turbo_v2_5", 
        language_code="nl",
        voice_settings=VoiceSettings(
            stability=0.0,
            similarity_boost=1.0,
            style=0.0,
            use_speaker_boost=True,
        ),
    )

    # Play the audio back
    play(response)
图形构建:集成音频处理

通过定义处理文本和语音交互的功能,下一步是将这些能力无缝集成到统一的工作流程中。通过构建智能对话图,我们可以确保语音识别、基于文本的对话和语音响应之间的顺畅流动。

在这一阶段,我们将定义一个新的基于LangGraph的工作流程,将音频输入和输出功能与我们的聊天机器人连接,从而实现以下操作顺序:

  1. \1. 捕获音频输入:
  • • 聊天机器人监听用户输入并将其从语音转换为文本。
  • • 一旦检测到语音并进行处理,生成的文本将传递给聊天机器人进行分析。

2. 处理基于文本的对话:

  • • 聊天机器人根据转录的输入和其内部逻辑生成响应。
  • • 它可以利用诸如日期和时间检索功能等工具来丰富交互。

3. 生成和播放音频输出:

  • • 聊天机器人的文本响应通过使用ElevenLabs API转换为语音。
  • • 响应被播放给用户,完成交互循环,并允许用户再次响应,从而无缝继续对话。

通过以这种方式构建对话工作流程,我们创建了一个能够高效处理语音和文本交互的动态语音助手。

以下是我们如何构建完整图形以集成所有组件:

from langgraph.graph import StateGraph, MessagesState, END, START

### Define parent graph
builder = StateGraph(MessagesState)

### Add remote graph directly as a node
builder.add_node("audio_input", record_audio_until_silence)
builder.add_node("agent", graph)
builder.add_node("audio_output", play_audio)
builder.add_edge(START, "audio_input")
builder.add_edge("audio_input", "agent")
builder.add_edge("agent", "audio_output")
builder.add_edge("audio_output", "audio_input")
audio_graph = builder.compile(checkpointer=memory)
第3步:测试语音助手

一旦聊天机器人和音频功能完全集成,就必须测试系统以确保其顺畅运行。我们将通过流式传输输入命令并观察聊天机器人的响应来启动测试对话。

from langchain_core.messages import convert_to_messages
from langchain_core.messages import HumanMessage

config = {"configurable": {"thread_id": "1"}}

for chunk in audio_graph.stream({"messages":HumanMessage(content="Follow the user's instructions:")}, stream_mode="values", config=config):
    chunk["messages"][-1].pretty_print()

结论

从零开始构建这个 AI 语音助手是一次激动人心且有益的经历。使用预构建工具是一回事,但从头开发解决方案则提供了更深入的理解,了解一切是如何结合在一起的。从将语音转文本与 Whisper 集成到使用 ElevenLabs 生成逼真的响应,每一步都带来了宝贵的见解和进一步自定义的可能性。

如果你是一个喜欢折腾 AI 的人,或者想将你的项目超越无代码平台的限制,深入代码将为你打开一个机会的世界。确实,这需要更多的努力,但能够将你的解决方案精确调整到你的需求,使这一切都值得。不论你是为了乐趣而构建,还是在解决现实世界的挑战,创造 AI 驱动的语音助手的旅程才刚刚开始。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

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

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

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

img

640套AI大模型报告合集

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

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

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

LangGraph--基础学习(stream 流式调用和使用) ¶values 为每个节点执行完毕以后,State 对象更新以后的值updates 为每个节点执行完毕以后,需要更新的内容或者可以理解为节点返回的内容,但是只包含State 中定义的属性。debug 模式会将节点执行的输入和输出返回messages 模式只会返回大模型的流式输出常用的模式为 updates和values, 如果我们只关心每个节点执行结束以后State 的值,那么需要使用 values 模式,如果想要获取每个节点的返回值,则需要使用 updates。 阅读详情

相关推荐

LangGraph 源码分析 | 结构化输出

结构化输出建立在 LLM 已经经过 Tool use 微调的基础上Tool use 功能允许在特定场景下,根据可用的工具列表,LLM 能够智能地选择最合适的工具。接着,模型会根据该工具的 API 调用指南,生成符合要求的 JSON 格式请求而 LangGraph 的结构化输出复用了 Tool use 的功能,将给定的模式 schema 看成一个工具,要求 LLM 根据 schema 的描述,输出符合要求的“请求格式”,并取出 Tool use 功能返回的冗余字段。

qq_45931691的博客 2285

从零开始:LangGraph初学者指南!构建你的第一个AI Agent!

在构建的过程中,状态对象承载了必要的上下文信息,为各个组件之间的交互提高标准化数据格式话不多说,现在开始!动手来!一定要动起手来跑!AI发展飞快!只有动手了,才知道里面会遇到什么问题,才能知道,底层原理是什么!我给大家准备了一份全套的《AI大模型零基础入门+进阶学习资源包》,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。😝有需要的小伙伴,可以VX扫描下方二维码免费领取🆓。

qq_41314882的博客 1432

【产品调研】AI语音合成领域先锋:ElevenLabs 公司与产品调研报告

ElevenLabs是一家专注于AI语音合成的创新公司,由前Google工程师和Palantir策略师于2022年创立。其核心技术包括支持70多种语言的文本转语音、高保真语音克隆和多语言AI配音,已获多轮融资,估值达33亿美元。该技术被广泛应用于影视、教育、游戏等领域,但也面临深度伪造和版权争议。公司正通过语音识别工具加强监管,平衡技术创新与伦理安全。

qq_25438419的博客 844

AI助理大爆发!ElevenLabs 11ai:语音操控,无缝连接你的工作!

无论是安排日程、添加 Notion 任务,还是通过 Perplexity 研究客户,11ai 都能以自然语音和低延迟完成,展现了 Conversational AI 的潜力。当前免费开放,鼓励用户测试并反馈,重点收集:最有价值的集成、MCP 服务器需求、语音交互体验、核心功能建议。提供 5000+ 预设语音,或通过上传音频(1-5 分钟)创建自定义语音克隆,适配品牌或个人需求。基于 ElevenLabs 的文本转语音(TTS)技术,支持 70+ 语言,生成超真实语音。

具身机器人和通用AI 1287

《AI音频类工具之十一——​ ElevenLabs》

ElevenLabs是一个功能强大且用途广泛的AI语音软件平台,它结合了人工智能技术与个性化语音合成,为用户提供了一系列创新且实用的功能。功能概述:ElevenLabs的语音克隆技术是其核心功能之一,允许用户从一分钟的音频样本中创建逼真的声音。用户可以克隆任何想要的声音,包括自己的声音、名人的声音或虚构人物的声音。应用场景:这一功能在有声读物朗读、视频配音、个性化语音消息等领域具有广泛应用。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 2067

555定时器呼吸灯电路制作全攻略:从仿真到实物搭建(附避坑指南)

本文详细介绍了使用555定时器制作呼吸灯电路的完整流程,从基础原理到实物搭建,包括电路设计、元件选择、仿真验证、焊接技巧及调试优化。特别提供了避坑指南,帮助电子爱好者快速掌握这一经典DIY项目,实现美观的呼吸灯效果。

weixin_33734785的博客 404

LangGraph 多智能体架构全解析:五种经典模式与交接实战应用指南

显式控制流(普通边):LangGraph 允许通过 普通图边显式定义应用程序的控制流(即智能体之间通信的顺序)。这是上述架构中最具确定性的变体 —— 我们始终提前知道接下来将调用哪个智能体。动态控制流(指令):在LangGraph中,可以让大语言模型(LLMs)决定应用程序控制流的部分内容。这可以通过使用Command来实现。其中一种特殊情况是监督者工具调用架构。在这种情况下,为监督者智能体提供支持的工具调用大语言模型将决定调用工具(智能体)的顺序。python# 显式定义调用流程适用场景。

佑瞻的博客 1948

Excel数据透视表实战:分组折线图制作与动态分析指南

数据可视化是数据分析的关键环节,其核心原理在于将抽象数据转化为直观图形,以揭示趋势、对比差异。在众多图表类型中,折线图因其能清晰展示连续数据随时间或其他序列的变化趋势,而成为趋势分析的利器。其技术价值在于通过视觉编码,将多维数据关系降维呈现,从而辅助决策。在业务分析、运营监控等应用场景中,常需对比不同分组(如产品线、销售区域)在同一时间序列上的表现,这正是分组折线图要解决的核心问题。本文聚焦于利用Excel数据透视表这一强大工具,高效构建动态分组折线图,并深入探讨数据透视表在数据重塑和图表自动化中的实战应用

weixin_29057237的博客 382

ElevenLabs 会话式 AI 现已即时连接各大服务平台

利用先进AI实现自然语音,提供播客、视频旁白等应用,具备用户友好特性…ElevenLabs 会话式 AI 新增 MCP 支持,用户可即时接入 Salesforce、HubSpot 和 Gmail 等服务。集成这些平台不再需要手动工具定义和设置步骤。此次更新还支持用户通过自然语言指令构建智能体,实现预约安排、数据汇总、信息检索或工作流自动化等功能。

心雨楼 469

Android 默认授予所有应用权限以及特殊权限处理

PackageManagerService作为android的主要系统服务之一,包含处理应用权限相关的职责。源码地址如下:在PMS成功启动时并收到回掉systemReady回进行应用权限授予。DefaultPermissionGrantPolicy为权限处理策略管理类。这里并没有赋予所有系统应用权限,所以当进行应用时还是会显示权限检查的弹框。可通过此方法进行所有应用权限赋予:如果不想所有应用都授予权限,可考虑在system/etc下的权限相关xml文件添加应用包名和所需权限。

Jimmy的专栏 1513

108、AWB 时间滤波器:帧间白平衡平滑,防止色彩跳变与过冲

摘要: 文章探讨了AWB(自动白平衡)时间滤波器的设计与优化,以解决帧间白平衡跳变和过冲问题。通过自适应状态机(STABLE/TRANSITION/JUMP)动态调整平滑系数alpha,结合帧率归一化和过冲保护(方向检测+限幅),实现场景切换快速响应与静态稳定性的平衡。作者分享了工程经验:避免固定阈值、联动AE/AF、真实场景验证,并推荐简化卡尔曼滤波替代IIR。最终方案在旗舰机前置摄像头中成功消除“闪白”现象,强调参数需动态适应光照与色温变化。

sundong_81的博客 65

使用ElevenLabs实现语音生成:从入门到精通

ElevenLabs提供了一种生成逼真、多功能且上下文感知的AI音频的能力,支持29种语言和数百种声音。无论是创建新的声音还是使用现有声音,ElevenLabs都提供了强大的工具。通过本文中的示例,您可以轻松上手使用ElevenLabs进行语音生成。ElevenLabs官方文档。

ppoojjj的博客 2092

基于Python的军事装备信息爬虫实战:Scrapy+Playwright+智能反反爬技术

本文将详细介绍如何使用Python构建一个高效的军事装备信息爬虫系统。我们将从基础的HTTP请求开始,逐步深入到使用Scrapy框架、Playwright浏览器自动化以及最新的反反爬技术。文章包含完整的代码实现、性能优化策略以及数据处理方案,旨在为读者提供一个全面的军事信息爬取解决方案。关键词:Python爬虫、军事装备、Scrapy、Playwright、反反爬。

2201_76125261的博客 1158

LangGraph不是LangChain升级版:Workflow图化需谨慎

Workflow编排是AI工程中基础且高频的技术概念,其核心在于数据流与控制流的合理抽象。LangChain的Chain模型面向确定性数据流,适合结构化、单向、无状态的处理任务;而LangGraph的StateGraph则面向动态控制流,要求状态持久化、路径可分叉、节点间强契约。盲目将简单链式流程升级为图结构,不仅无法提升可观测性与可维护性,反而引入序列化开销、调试复杂度与运行时幽灵分支等工程风险。真正需要Graph的场景,必须满足跨节点状态管理、条件驱动跳转及人工干预等典型需求。本文结合LangGraph

weixin_29061531的博客 179

【RAG文档解析优化】复杂Excel表格处理

—从识别表格边界,到恢复内部结构,再到生成RAG友好的表示——我们可以系统性地将这些“带刺的玫瑰”驯服。虽然代码实现可能充满细节和挑战,但其带来的回报是巨大的:一个更干净、更可靠的知识库,以及一个能真正理解和利用表格数据、从而提供精准答案的RAG系统。为了人类阅读的便利性,制作者常常会使用合并单元格来创建标题、使用多层表头来组织复杂的列、在同一个Sheet页中放置多个相关的表格,并添加大量的注释说明。它们就像一朵朵“带刺的玫瑰”,虽然蕴含着宝贵的数据,但如果直接用传统的方法(如。

kakaZhui的博客 853

cesium 实现经纬线绘制和经纬度标注

废话不对数直接上线效果图及代码 1.效果图 2.实现代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=

一碗老面的博客 2570

从“被优化”到“AI训练师”:35岁转行实操手册,把经验变成喂给AI的“黄金饲料”

2025年的职场,“35岁+”仿佛一道无形的分水岭。

m0_59163425的博客 4514

置顶必读(3) |《滚雪球学SpringBoot》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 15万+

LangGraph 教程:初学者综合指南(1)

使用大型语言模型 ( LLMs ) 构建应用程序为创建复杂的交互式系统提供了令人兴奋的机会。但随着这些应用程序变得越来越复杂,特别是那些涉及多个LLMs协同工作的应用程序,新的挑战出现了。我们如何管理这些代理之间的信息流?我们如何确保他们无缝互动并保持对手头任务的一致理解?这就是LangGraph 的用武之地。

陈开心的博客 7385

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LangGraph 之 stream_mode 解析——values(完整状态)、updates(增量更新)与 [“updates“, “values“] 混合模式

文章摘要: 本文介绍了LangGraph工作流中三种stream_mode的用法差异。"values"模式输出完整状态流,展示每一步执行后的全局状态;"updates"模式仅输出节点增量更新,适合实时推送;混合模式可同时获取两种数据。通过一个包含"润色主题"和"生成笑话"两个节点的简单工作流示例,对比演示了不同模式下的输出效果,并总结了各自适用场景。最后补充了直接获取最终结果的invoke方法,帮助开发者根据需要选择合适的执行方

青衫客36的博客 1179

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[使用ElevenLabs提升语音生成的AI项目!]

ElevenLabs是一家语音AI研究与部署公司,致力于使用AI技术生成数百种新的和现有语言的语音,其核心使命是使内容在任何语言和语音中都可以访问。他们的技术能够生成最逼真、灵活且上下文感知的AI音频。通过本文的介绍,相信大家对如何使用ElevenLabs生成AI语音有了基本的了解。ElevenLabs提供的工具使得复杂的语音生成任务变得直观且易于实现。ElevenLabs官方文档Python包elevenlabs GitHub页面LangChain社区工具文档。

akhfuiigabv的博客 1173

LangGraph构建Agent逐步指南:从入门到精通

LangGraph是一个构建于LangChain之上的高级库,旨在通过引入循环计算能力来增强您的大型语言模型(LLM)应用。虽然LangChain允许创建用于线性工作流的有向无环图(DAG),但LangGraph更进一步,支持添加循环,这对于开发复杂的、类似智能体的行为至关重要。这些行为使得LLM能够持续循环执行某个过程,根据不断变化的条件动态决定下一步要采取的行动。LangGraph:结点、状态和边LangGraph的核心概念是状态图状态:表示在计算过程中维护和更新的上下文或记忆。

2401_85390073的博客 3904

打造逼真语音体验:使用ElevenLabs的AI技术

ElevenLabs是一家提供先进AI语音生成服务的公司,其技术能够生成高度真实且灵活的语音,支持29种语言的数百种新旧语音。该服务不仅可以帮助开发者生成逼真的语音内容,还能在多语言环境中提升用户体验。ElevenLabs为开发者提供了一种有效的方式来实现语音生成,通过简单的API调用即可生成高质量的语音内容。这项技术在多语言和多场景应用中展现出巨大潜力,特别是在需要个性化和上下文感知的语音应用中。ElevenLabs 官方文档。

ahdfwcevnhrtds的博客 1075

langchain系列(终)- LangGraph 多智能体详解

本文主要写了LangGraph实现多代理(多智能体)的概念、原理、代码实现,除此之外还是用了函数API的方式来实现功能

forevercui的博客 5120

langchain-graph-builder

langchain-graph-builder 是一个基于 FastAPI 构建的后端服务项目,旨在为知识库的创建、管理以及与之相关的对话功能提供接口支持。通过该项目,用户可以方便地创建知识库、上传文件至知识库、获取文件内容、删除知识库、生成知识库文件向量、获取知识库信息、进行大模型流式对话以及 RAG 对话等操作,同时还支持创建知识库图谱。

m0_75170107的博客 419
上一篇: 2025年大模型最大的风口来了!DeepSeek:你不知道的未来趋势和机会(含入门技巧)
下一篇: 转行AI大模型算法工程师,如何在人工智能领域实现职业跃迁
冻感糕人~
博客等级 码龄3年 8926粉丝 2393原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值