e768098d0e
tools_continuous_delivery / Private PyPI non-main branch release (push) Has been skipped
tools_continuous_delivery / Private PyPI main branch release (push) Failing after 2m42s
Publish Promptflow Doc / Build (push) Has been cancelled
Publish Promptflow Doc / Deploy (push) Has been cancelled
Flake8 Lint / flake8 (push) Has been cancelled
Spell check CI / Spell_Check (push) Has been cancelled
100 lines
2.8 KiB
Markdown
100 lines
2.8 KiB
Markdown
# Customer Intent Extraction
|
|
|
|
This sample is using OpenAI chat model(ChatGPT/GPT4) to identify customer intent from customer's question.
|
|
|
|
By going through this sample you will learn how to create a flow from existing working code (written in LangChain in this case).
|
|
|
|
This is the [existing code](./intent.py).
|
|
|
|
## Prerequisites
|
|
Install promptflow sdk and other dependencies:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
Ensure you have put your azure OpenAI endpoint key in .env file.
|
|
|
|
```bash
|
|
cat .env
|
|
```
|
|
|
|
## Run flow
|
|
|
|
1. init flow directory - create promptflow folder from existing python file
|
|
```bash
|
|
pf flow init --flow . --entry intent.py --function extract_intent --prompt-template chat_prompt=user_intent_zero_shot.jinja2
|
|
```
|
|
The generated files:
|
|
- extract_intent_tool.py: Wrap the func `extract_intent` in the `intent.py` script into a [Python Tool](https://promptflow.azurewebsites.net/tools-reference/python-tool.html).
|
|
- flow.dag.yaml: Describes the DAG(Directed Acyclic Graph) of this flow.
|
|
- .gitignore: File/folder in the flow to be ignored.
|
|
|
|
2. create needed custom connection
|
|
```bash
|
|
pf connection create -f .env --name custom_connection
|
|
```
|
|
|
|
3. test flow with single line input
|
|
```bash
|
|
pf flow test --flow . --inputs ./data/sample.json
|
|
```
|
|
|
|
4. run with multiple lines input
|
|
```bash
|
|
pf run create --flow . --data ./data --column-mapping history='${data.history}' customer_info='${data.customer_info}'
|
|
```
|
|
|
|
You can also skip providing `column-mapping` if provided data has same column name as the flow.
|
|
Reference [here](https://aka.ms/pf/column-mapping) for default behavior when `column-mapping` not provided in CLI.
|
|
|
|
5. list/show
|
|
|
|
```bash
|
|
# list created run
|
|
pf run list
|
|
# get a sample completed run name
|
|
name=$(pf run list | jq '.[] | select(.name | contains("customer_intent_extraction")) | .name'| head -n 1 | tr -d '"')
|
|
# show run
|
|
pf run show --name $name
|
|
# show specific run detail, top 3 lines
|
|
pf run show-details --name $name -r 3
|
|
```
|
|
|
|
6. evaluation
|
|
|
|
```bash
|
|
# create evaluation run
|
|
pf run create --flow ../../evaluation/eval-classification-accuracy --data ./data --column-mapping groundtruth='${data.intent}' prediction='${run.outputs.output}' --run $name
|
|
```
|
|
|
|
```bash
|
|
# get the evaluation run in previous step
|
|
eval_run_name=$(pf run list | jq '.[] | select(.name | contains("eval_classification_accuracy")) | .name'| head -n 1 | tr -d '"')
|
|
# show run
|
|
pf run show --name $eval_run_name
|
|
# show run output
|
|
pf run show-details --name $eval_run_name -r 3
|
|
```
|
|
|
|
6. visualize
|
|
```bash
|
|
# visualize in browser
|
|
pf run visualize --name $eval_run_name # your evaluation run name
|
|
```
|
|
|
|
## Deploy
|
|
|
|
### Serve as a local test app
|
|
|
|
```bash
|
|
pf flow serve --source . --port 5123 --host localhost
|
|
```
|
|
Visit http://localhost:5213 to access the test app.
|
|
|
|
### Export
|
|
|
|
#### Export as docker
|
|
```bash
|
|
# pf flow export --source . --format docker --output ./package
|
|
``` |