mirror of
https://github.com/hwchase17/langchain.git
synced 2026-06-09 10:17:00 +00:00
fix: Fix LLM mimicking Unicode responses due to forced Unicode
conversion of non-ASCII characters.
- **Description:** This PR fixes an issue where the LLM would mimic
Unicode responses due to forced Unicode conversion of non-ASCII
characters in tool calls. The fix involves disabling the `ensure_ascii`
flag in `json.dumps()` when converting tool calls to OpenAI format.
- **Issue:** Fixes ↓↓↓
input:
```json
{'role': 'assistant', 'tool_calls': [{'type': 'function', 'id': 'call_nv9trcehdpihr21zj9po19vq', 'function': {'name': 'create_customer', 'arguments': '{"customer_name": "你好啊集团"}'}}]}
```
output:
```json
{'role': 'assistant', 'tool_calls': [{'type': 'function', 'id': 'call_nv9trcehdpihr21zj9po19vq', 'function': {'name': 'create_customer', 'arguments': '{"customer_name": "\\u4f60\\u597d\\u554a\\u96c6\\u56e2"}'}}]}
```
then:
llm will mimic outputting unicode. Unicode's vast number of symbols can
lengthen LLM responses, leading to slower performance.
<img width="686" height="277" alt="image"
src="https://github.com/user-attachments/assets/28f3b007-3964-4455-bee2-68f86ac1906d"
/>
---------
Co-authored-by: Mason Daugherty <github@mdrxy.com>
Co-authored-by: Mason Daugherty <mason@langchain.dev>
106 lines
2.8 KiB
Markdown
106 lines
2.8 KiB
Markdown
# langchain-exa
|
|
|
|
This package contains the LangChain integrations for Exa Cloud generative models.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install -U langchain-exa
|
|
```
|
|
|
|
## Exa Search Retriever
|
|
|
|
You can retrieve search results as follows
|
|
|
|
```python
|
|
from langchain_exa import ExaSearchRetriever
|
|
|
|
exa_api_key = "YOUR API KEY"
|
|
|
|
# Create a new instance of the ExaSearchRetriever
|
|
exa = ExaSearchRetriever(exa_api_key=exa_api_key)
|
|
|
|
# Search for a query and save the results
|
|
results = exa.invoke("What is the capital of France?")
|
|
|
|
# Print the results
|
|
print(results)
|
|
```
|
|
|
|
### Advanced Features
|
|
|
|
You can use advanced features like text limits, summaries, and live crawling:
|
|
|
|
```python
|
|
from langchain_exa import ExaSearchRetriever, TextContentsOptions
|
|
|
|
# Create a new instance with advanced options
|
|
exa = ExaSearchRetriever(
|
|
exa_api_key="YOUR API KEY",
|
|
k=20, # Number of results (1-100)
|
|
type="auto", # Can be "neural", "keyword", or "auto"
|
|
livecrawl="always", # Can be "always", "fallback", or "never"
|
|
summary=True, # Get an AI-generated summary of each result
|
|
text_contents_options={"max_characters": 3000} # Limit text length
|
|
)
|
|
|
|
# Search for a query with custom summary prompt
|
|
exa_with_custom_summary = ExaSearchRetriever(
|
|
exa_api_key="YOUR API KEY",
|
|
summary={"query": "generate one line summary in simple words."} # Custom summary prompt
|
|
)
|
|
```
|
|
|
|
## Exa Search Results
|
|
|
|
You can run the ExaSearchResults module as follows
|
|
|
|
```python
|
|
from langchain_exa import ExaSearchResults
|
|
|
|
# Initialize the ExaSearchResults tool
|
|
search_tool = ExaSearchResults(exa_api_key="YOUR API KEY")
|
|
|
|
# Perform a search query
|
|
search_results = search_tool._run(
|
|
query="When was the last time the New York Knicks won the NBA Championship?",
|
|
num_results=5,
|
|
text_contents_options=True,
|
|
highlights=True
|
|
)
|
|
|
|
print("Search Results:", search_results)
|
|
```
|
|
|
|
## Exa Find Similar Results
|
|
|
|
You can run the ExaFindSimilarResults module as follows
|
|
|
|
```python
|
|
from langchain_exa import ExaFindSimilarResults
|
|
|
|
# Initialize the ExaFindSimilarResults tool
|
|
find_similar_tool = ExaFindSimilarResults(exa_api_key="YOUR API KEY")
|
|
|
|
# Find similar results based on a URL
|
|
similar_results = find_similar_tool._run(
|
|
url="http://espn.com",
|
|
num_results=5,
|
|
text_contents_options=True,
|
|
highlights=True
|
|
)
|
|
|
|
print("Similar Results:", similar_results)
|
|
```
|
|
|
|
## Configuration Options
|
|
|
|
All Exa tools support the following common parameters:
|
|
|
|
- `num_results` (1-100): Number of search results to return
|
|
- `type`: Search type - "neural", "keyword", or "auto"
|
|
- `livecrawl`: Live crawling mode - "always", "fallback", or "never"
|
|
- `summary`: Get AI-generated summaries (True/False or custom prompt dict)
|
|
- `text_contents_options`: Dict to limit text length (e.g. `{"max_characters": 2000}`)
|
|
- `highlights`: Include highlighted text snippets (True/False)
|