forked from langchain-ai/langchainjs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update expression language docs, add RunnableMap.from method (langcha…
1 parent
9f2d296
commit b89ad8f
Showing
7 changed files
with
116 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
docs/extras/additional_resources/expression_language_cheatsheet.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# LangChain Expression Language Cheatsheet | ||
|
||
For a quick reference for LangChain Expression Language overview/cheatsheet made by [@zhanghaili0610](https://twitter.com/zhanghaili0610): | ||
|
||
 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Use RunnableMaps | ||
|
||
RunnableMaps allow you to execute multiple Runnables in parallel, and to return the output of these Runnables as a map. | ||
|
||
import CodeBlock from "@theme/CodeBlock"; | ||
import BasicExample from "@examples/guides/expression_language/runnable_maps_basic.ts"; | ||
|
||
<CodeBlock language="typescript">{BasicExample}</CodeBlock> | ||
|
||
## Manipulating outputs/inputs | ||
|
||
Maps can be useful for manipulating the output of one Runnable to match the input format of the next Runnable in a sequence. | ||
|
||
Note below that the object within the `RunnableSequence.from()` call is automatically coerced into a runnable map. All keys of the object must | ||
have values that are runnables or can be themselves coerced to runnables (functions to `RunnableLambda`s or objects to `RunnableMap`s). | ||
This coercion will also occur when composing chains via the `.pipe()` method. | ||
|
||
import SequenceExample from "@examples/guides/expression_language/runnable_maps_sequence.ts"; | ||
|
||
<CodeBlock language="typescript">{SequenceExample}</CodeBlock> | ||
|
||
Here the input to prompt is expected to be a map with keys "context" and "question". The user input is just the question. So we need to get the context using our retriever and passthrough the user input under the "question" key. |
37 changes: 37 additions & 0 deletions
37
examples/src/guides/expression_language/runnable_maps_basic.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import { ChatAnthropic } from "langchain/chat_models/anthropic"; | ||
import { PromptTemplate } from "langchain/prompts"; | ||
import { RunnableMap } from "langchain/schema/runnable"; | ||
|
||
const model = new ChatAnthropic({}); | ||
const jokeChain = PromptTemplate.fromTemplate( | ||
"Tell me a joke about {topic}" | ||
).pipe(model); | ||
const poemChain = PromptTemplate.fromTemplate( | ||
"write a 2-line poem about {topic}" | ||
).pipe(model); | ||
|
||
const mapChain = RunnableMap.from({ | ||
joke: jokeChain, | ||
poem: poemChain, | ||
}); | ||
|
||
const result = await mapChain.invoke({ topic: "bear" }); | ||
console.log(result); | ||
/* | ||
{ | ||
joke: AIMessage { | ||
content: " Here's a silly joke about a bear:\n" + | ||
'\n' + | ||
'What do you call a bear with no teeth?\n' + | ||
'A gummy bear!', | ||
additional_kwargs: {} | ||
}, | ||
poem: AIMessage { | ||
content: ' Here is a 2-line poem about a bear:\n' + | ||
'\n' + | ||
'Furry and wild, the bear roams free \n' + | ||
'Foraging the forest, strong as can be', | ||
additional_kwargs: {} | ||
} | ||
} | ||
*/ |
41 changes: 41 additions & 0 deletions
41
examples/src/guides/expression_language/runnable_maps_sequence.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import { ChatAnthropic } from "langchain/chat_models/anthropic"; | ||
import { CohereEmbeddings } from "langchain/embeddings/cohere"; | ||
import { PromptTemplate } from "langchain/prompts"; | ||
import { StringOutputParser } from "langchain/schema/output_parser"; | ||
import { | ||
RunnablePassthrough, | ||
RunnableSequence, | ||
} from "langchain/schema/runnable"; | ||
import { HNSWLib } from "langchain/vectorstores/hnswlib"; | ||
import type { Document } from "langchain/document"; | ||
|
||
const model = new ChatAnthropic(); | ||
const vectorstore = await HNSWLib.fromDocuments( | ||
[{ pageContent: "mitochondria is the powerhouse of the cell", metadata: {} }], | ||
new CohereEmbeddings() | ||
); | ||
const retriever = vectorstore.asRetriever(); | ||
const template = `Answer the question based only on the following context: | ||
{context} | ||
Question: {question}`; | ||
|
||
const prompt = PromptTemplate.fromTemplate(template); | ||
|
||
const formatDocs = (docs: Document[]) => docs.map((doc) => doc.pageContent); | ||
|
||
const retrievalChain = RunnableSequence.from([ | ||
{ context: retriever.pipe(formatDocs), question: new RunnablePassthrough() }, | ||
prompt, | ||
model, | ||
new StringOutputParser(), | ||
]); | ||
|
||
const result = await retrievalChain.invoke( | ||
"what is the powerhouse of the cell?" | ||
); | ||
console.log(result); | ||
|
||
/* | ||
Based on the given context, the powerhouse of the cell is mitochondria. | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters