From b1012183d4dc71ba7ec206044d050e229d4bee5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=B8=E9=9B=81?= Date: Thu, 28 May 2026 00:12:39 +0800 Subject: [PATCH] examples: add LangChain integration guide (FunASR as agent tool) --- examples/langchain/README.md | 83 ++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 examples/langchain/README.md diff --git a/examples/langchain/README.md b/examples/langchain/README.md new file mode 100644 index 000000000..956b5a873 --- /dev/null +++ b/examples/langchain/README.md @@ -0,0 +1,83 @@ +# FunASR + LangChain Integration + +Use FunASR as a speech-to-text tool in your LangChain agents. Since FunASR exposes an OpenAI-compatible API, integration is straightforward. + +## Setup + +```bash +# Start FunASR server +pip install torch torchaudio +pip install funasr vllm fastapi uvicorn python-multipart +funasr-server --device cuda + +# Install LangChain +pip install langchain langchain-openai +``` + +## As a LangChain Tool + +```python +from langchain.tools import tool +from openai import OpenAI + +asr_client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused") + +@tool +def speech_to_text(audio_path: str) -> str: + """Transcribe an audio file to text using local FunASR. + Supports wav, mp3, flac. Returns transcribed text with speaker IDs.""" + result = asr_client.audio.transcriptions.create( + model="fun-asr-nano", + file=open(audio_path, "rb"), + response_format="verbose_json" + ) + return result.text + + +# Use with any LangChain agent +from langchain_openai import ChatOpenAI +from langchain.agents import AgentExecutor, create_tool_calling_agent +from langchain_core.prompts import ChatPromptTemplate + +llm = ChatOpenAI(model="gpt-4o") +tools = [speech_to_text] +prompt = ChatPromptTemplate.from_messages([ + ("system", "You are a helpful assistant that can transcribe audio files."), + ("human", "{input}"), + ("placeholder", "{agent_scratchpad}"), +]) + +agent = create_tool_calling_agent(llm, tools, prompt) +executor = AgentExecutor(agent=agent, tools=tools) +result = executor.invoke({"input": "Please transcribe meeting.wav"}) +``` + +## With Dify / AutoGen / CrewAI + +Any framework supporting OpenAI audio API connects directly: + +```python +from openai import OpenAI +client = OpenAI( + base_url="http://localhost:8000/v1", # FunASR server + api_key="unused" +) +result = client.audio.transcriptions.create( + model="fun-asr-nano", + file=open("audio.wav", "rb") +) +``` + +## Features + +- 50+ languages (Chinese dialects, English, Japanese, Korean...) +- Speaker diarization (`spk=true`) +- Word-level timestamps (`response_format="verbose_json"`) +- Hotword boosting +- 170x realtime, fully local, MIT license + +## Links + +- [FunASR GitHub](https://github.com/modelscope/FunASR) +- [OpenAI API examples](../openai_api/) +- [Website](https://www.funasr.com)