RunnableLambda
使用RunnableLambda,把 lambda 匿名函式的傳回值作為 prompt 輸入參數。
語法:
匿名函式變數 = RunnableLambda(lambda 參數: 傳回值)
my_func = RunnableLambda(lambda ai_msg: {"name": ai_msg.text})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain_core.output_parsers import StrOutputParser,JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.runnables import RunnableLambda
prompt = PromptTemplate.from_template(
"我的鄰居姓{lastname},剛生了{gender},幫忙想1個名字,並轉成JSON格式給我。"
"要求key是name,value就是剛才你想的1個名字,請嚴格遵守格式要求")
second_prompt = PromptTemplate.from_template(
"姓名{name},請幫我解析含義。"
)
my_func = RunnableLambda(lambda ai_msg: {"name": ai_msg.text})
llm = ChatGoogleGenerativeAI(model="gemini-3-flash-preview", temperature=0)
str_parser = StrOutputParser()
chain = prompt | llm | my_func | second_prompt | llm | str_parser
res = chain.invoke({"lastname": "李", "gender": "女兒"})
print(res)
這是一個非常優雅且富有文化底蘊的名字。以下是對「**李詩涵**」這個名字的詳細解析:
### 1. 單字拆解
* **李 (Lǐ)**:
* **姓氏地位**:中國與台灣最常見的姓氏之一,歷史悠久,曾是唐朝的國姓,象徵著繁茂與生命力。
* **字義**:原意指「李樹」或「李子」。在姓名學中,李字給人一種穩重、紮根大地的感覺。
* **詩 (Shī)**:
* **字義**:指詩歌、詩句。
* **寓意**:代表**才華、文學修養、浪漫與靈性**。這個字賦予孩子一種文靜、優雅的氣質,象徵生活如詩般美好,擁有豐富的內心世界與藝術感。
* **涵 (Hán)**:
* **字義**:原意為水入船中,後引申為包容、蘊含、滋潤(如:涵養、包涵)。
* **寓意**:代表**深度、修養與包容力**。這個字暗示了一個人有內涵、有禮貌,性格溫潤如水,處事大方且具備良好的自我約束能力。
RunnableLambda 父類別是 Runnable,而Runnable 的 __or__()方法參數接受Callable類型。
而lambda語法,父類別是Callable,所以也可以直接把Lambda語法放入chain。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def __or__(
self,
other: Runnable[Any, Other]
| Callable[[Iterator[Any]], Iterator[Other]]
| Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
| Callable[[Any], Other]
| Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]:
"""Runnable "or" operator.
Compose this `Runnable` with another object to create a
`RunnableSequence`.
Args:
other: Another `Runnable` or a `Runnable`-like object.
Returns:
A new `Runnable`.
"""
return RunnableSequence(self, coerce_to_runnable(other))
lambda 放入chain。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from langchain_core.output_parsers import StrOutputParser,JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.runnables import RunnableLambda
prompt = PromptTemplate.from_template(
"我的鄰居姓{lastname},剛生了{gender},幫忙想1個名字,並轉成JSON格式給我。"
"要求key是name,value就是剛才你想的1個名字,請嚴格遵守格式要求")
second_prompt = PromptTemplate.from_template(
"姓名{name},請幫我解析含義。"
)
llm = ChatGoogleGenerativeAI(model="gemini-3-flash-preview", temperature=0)
str_parser = StrOutputParser()
chain = prompt | llm | (lambda ai_msg: {"name": ai_msg.text}) | second_prompt | llm | str_parser
res = chain.invoke({"lastname": "李", "gender": "女兒"})
print(res)